Keycloak Realmインポート

オペレーターを使用した自動Keycloak Realmインポートの実行方法

Keycloak Realmのインポート

Keycloak Operatorを使用すると、Keycloak DeploymentのRealmインポートを実行できます。

  • Keycloakに同じ名前のRealmが既に存在する場合、上書きされません。

  • Realm Import CRは、新しいRealmの作成のみをサポートしており、Realmの更新や削除はサポートしていません。Keycloak上で直接実行されたRealmへの変更は、CRに同期して戻されることはありません。

Realm Import Custom Resourceの作成

以下は、Realm Import Custom Resource (CR) の例です。

apiVersion: k8s.keycloak.org/v2alpha1
kind: KeycloakRealmImport
metadata:
  name: my-realm-kc
spec:
  keycloakCRName: <name of the keycloak CR>
  realm:
    ...

このCRは、keycloakCRNameフィールドで定義されているKeycloak Deployment CRと同じ名前空間に作成する必要があります。realmフィールドは、完全なRealmRepresentationを受け入れます。

RealmRepresentationを取得する推奨される方法は、エクスポート機能であるRealmのインポートとエクスポートを活用することです。

  1. Realmを単一のファイルにエクスポートします。

  2. JSONファイルをYAMLに変換します。

  3. 取得したYAMLファイルをrealmキーの本文としてコピー&ペーストし、インデントが正しいことを確認してください。

Realm Import CRの適用

kubectlを使用して、正しいクラスタ名前空間にCRを作成します。

YAMLファイルexample-realm-import.yamlを作成します。

apiVersion: k8s.keycloak.org/v2alpha1
kind: KeycloakRealmImport
metadata:
  name: my-realm-kc
spec:
  keycloakCRName: <name of the keycloak CR>
  realm:
    id: example-realm
    realm: example-realm
    displayName: ExampleRealm
    enabled: true

変更を適用します。

kubectl apply -f example-realm-import.yaml

実行中のインポートのステータスを確認するには、次のコマンドを入力します。

kubectl get keycloakrealmimports/my-realm-kc -o go-template='{{range .status.conditions}}CONDITION: {{.type}}{{"\n"}}  STATUS: {{.status}}{{"\n"}}  MESSAGE: {{.message}}{{"\n"}}{{end}}'

インポートが正常に完了すると、出力は次の例のようになります。

CONDITION: Done
  STATUS: true
  MESSAGE:
CONDITION: Started
  STATUS: false
  MESSAGE:
CONDITION: HasErrors
  STATUS: false
  MESSAGE:

プレースホルダー

インポートは、環境変数を参照するプレースホルダーをサポートしています。詳細については、Realmのインポートとエクスポートを参照してください。KeycloakRealmImport CRを使用すると、spec.placeholdersスタンザを介してこの機能を活用できます。例:

apiVersion: k8s.keycloak.org/v2alpha1
kind: KeycloakRealmImport
metadata:
  name: my-realm-kc
spec:
  keycloakCRName: <name of the keycloak CR>
  placeholders:
    ENV_KEY:
      secret:
        name: SECRET_NAME
        key: SECRET_KEY
    ...

上記の例では、プレースホルダーの置換が有効になり、キーENV_KEYを持つ環境変数が、Secret SECRET_NAMEのキーSECRET_KEYの値から作成されます。現在、Secretsのみがサポートされており、それらはKeycloak CRと同じ名前空間にある必要があります。

このページについて