Per-realm Frontend URL
https://auth.customer.com/realms/prod no matter which cell hosts it (frontendUrl override).Migrating an identity provider touches every app that authenticates against it, so the goals are: keep the auth URL, don’t force password resets, and control the cutover.
| You have | Keycloak equivalent |
|---|---|
| Tenant / User Pool / Auth0 tenant | Realm |
| Application / App Client | Client |
| Connection / Identity Provider | Identity Provider (OIDC/SAML) |
| Rule / Action / Trigger / Hook | Authenticator SPI / event listener |
| Hosted login page | Realm themes (FreeMarker) |
| Custom claims / mappers | Protocol & client scope mappers |
Breaking the issuer URL invalidates live tokens and app config. We preserve it three ways:
Per-realm Frontend URL
https://auth.customer.com/realms/prod no matter which cell hosts it (frontendUrl override).Hostname routing
CNAME auth.customer.com → our edge; the router maps host → tenant → cell.TLS per domain
Realm import carries hashed credentials, so users keep their passwords. What you can’t carry across vendors are private signing keys — so after a cross-vendor cutover users re-authenticate once (no password reset, just a fresh login). Options:
Export users + hashed credentials from the source and import via the Admin API / realm import. Best when the source exposes password hashes in a supported format.
Stand up the source as a federated IdP or use a custom UserStorageProvider; users migrate
on first login. Zero big-bang risk; good for very large or slow-to-drain user bases.
Bulk-import the active core, JIT-migrate the long tail, then decommission the source.
Moving an existing Postgres-backed Keycloak into the platform uses standard Postgres tooling: logical replication (publication/subscription) or AWS DMS for continuous sync with minimal downtime. Physical/streaming replication isn’t available into Aurora from arbitrary sources — use logical. See Multi-Cloud for the same mechanism cross-cloud.
wal_level = logical, sufficient max_replication_slots / max_wal_senders) and create a
replication user with REPLICATION + read on the Keycloak schema. Note the DB host, port, name.dms.t3.medium is fine for most).CDCLatencySource/CDCLatencyTarget and the validation state in
CloudWatch until full load completes and CDC latency is ~0.Reference: AWS DMS documentation and PostgreSQL as a DMS source.