Keycloak Realm Setup
Create the realm, clients, and login user the platform needs before you install — with the commands to do it by hand.
Before you run Platform Installation, a Keycloak realm has to exist with three clients and a login user already in it. The operator only provisions into an existing realm (see Managed Keycloak) — it never creates the realm itself, so this is a one-time manual step.
One realm, shared by the platform and every validator
Everything below goes into one realm. That's the same realm you point the operator at with operator.keycloak.realm in Platform Installation, and the same realm Managed Keycloak later provisions per-validator clients into. There's no separate "platform realm" and "validator realm" — one realm serves both.
Placeholders used below
$REALM
validator-intellecteu-devnet
The realm you create — becomes operator.keycloak.realm.
$BASE_HOSTNAME
validators.example.com
Should match operatorRuntime.baseHostname — used in the UI client's redirect URI.
$UI_USERNAME / $UI_EMAIL
catalyx-ui-admin / catalyx-ui-admin@example.com
The browser login user you create for catalyx-canton-ui.
What to create
Realm
—
$REALM, enabled, display name "CatalyX Canton Validator" (or your own).
Client — catalyx-operator-admin
$REALM
Confidential, service accounts enabled, standard flow disabled (service account only — never used for browser login). Its secret is what you store as admin-client-secret in the catalyx-operator-keycloak secret in Platform Installation, and is referenced by operator.keycloak.adminClientId.
Client — catalyx-api
$REALM
Confidential, service accounts enabled, standard flow enabled, direct access grants disabled, redirectUris: ["/*"], webOrigins: ["/*"]. Its secret is what you store as client-secret in the catalyx-api-credentials secret.
Client — catalyx-canton-ui
$REALM
Public, standard flow enabled (browser OIDC with PKCE), direct access grants disabled, redirect URI https://$BASE_HOSTNAME/*, web origin https://$BASE_HOSTNAME. Matches ui.oidc.clientId (default catalyx-canton-ui).
User — $UI_USERNAME
$REALM
Enabled, email verified, password set. Used to sign in to the CatalyX UI in a browser via catalyx-canton-ui. Carries no realm roles — it's a plain login, not an admin account.
Permission to grant
There is one role assignment to make: the catalyx-operator-admin service account (service-account-catalyx-operator-admin) gets the realm-admin client role of $REALM's own realm-management client — not master's. That scopes the operator to administering just $REALM, and is what lets its client-credentials login create and update the per-validator clients, scopes, and users described in Managed Keycloak.
Commands
Everything below can equally be done by hand in the Keycloak Admin Console (Realm settings → Create realm, Clients → Create client, Users → Add user, and the role assignment under a user's Role mapping tab).
Run these with kcadm.sh against your Keycloak — from a shell with kcadm.sh on the path (for example kubectl exec into the Keycloak pod), or adapt them to the Admin REST API if you're not using the CLI.
Authenticate
Create the realm
Create catalyx-operator-admin in $REALM and grant it realm-admin
Create catalyx-api in $REALM
Create catalyx-canton-ui in $REALM
Create the UI login user
Retrieve the catalyx-operator-admin secret
Store the printed value as admin-client-secret in the catalyx-operator-keycloak secret — see step 2 of Platform Installation.
Retrieve the catalyx-api secret
Store the printed value as client-secret in the catalyx-api-credentials secret — also step 2 of Platform Installation.
Next step
With the realm, its three clients, and the UI login user in place, continue to Platform Installation to create the Kubernetes secrets from the two client secrets above and install the Helm chart.
Last updated
Was this helpful?