Vault の使用

Keycloak での Vault の使用方法と設定方法について説明します。

Keycloak は、Vault SPI の 2 つの既成実装を提供します。プレーンテキストのファイルベースの Vault と Java KeyStore ベースの Vault です。

ファイルベースの Vault 実装は、特に Kubernetes/OpenShift シークレットに役立ちます。Kubernetes シークレットを Keycloak コンテナにマウントすると、データフィールドはフラットファイル構造でマウントされたフォルダーで使用できるようになります。

Java KeyStore ベースの Vault 実装は、ベアメタルインストールでシークレットを保存するのに役立ちます。パスワードで暗号化された KeyStore Vault を使用できます。

利用可能な統合

Vault に保存されたシークレットは、管理コンソールの次の場所で使用できます。

  • SMTP メールサーバーのパスワードを取得する

  • LDAP ベースのユーザーフェデレーションを使用する際に LDAP バインドクレデンシャルを取得する

  • 外部アイデンティティプロバイダーを統合する際に OIDC アイデンティティプロバイダーのクライアントシークレットを取得する

Vault の有効化

ファイルベースの Vault を有効にするには、次のビルドオプションを使用して Keycloak を最初にビルドする必要があります。

bin/kc.[sh|bat] build --vault=file

同様に、Java KeyStore ベースの Vault の場合は、次のビルドオプションを指定する必要があります。

bin/kc.[sh|bat] build --vault=keystore

ファイルベースの Vault の設定

シークレットを検索するベースディレクトリの設定

Kubernetes/OpenShift シークレットは基本的にマウントされたファイルです。これらのファイルをマウントするディレクトリを設定するには、次のコマンドを入力します。

bin/kc.[sh|bat] start --vault-dir=/my/path

レルム固有のシークレットファイル

Kubernetes/OpenShift シークレットは Keycloak でレルムごとに使用され、ファイルの名前付け規則が必要です。

${vault.<realmname>_<secretname>}

Java KeyStore ベースの Vault の設定

Java KeyStore ベースの Vault を使用するには、最初に KeyStore ファイルを作成する必要があります。これを行うには、次のコマンドを使用できます。

keytool -importpass -alias <realm-name>_<alias> -keystore keystore.p12 -storepass keystorepassword

次に、Vault に保存する値を入力します。-alias パラメーターの形式は、使用されるキーリゾルバーによって異なることに注意してください。デフォルトのキーリゾルバーは REALM_UNDERSCORE_KEY です。

これにより、デフォルトで SecretKeyEntry 内に汎用 PBEKey (パスワードベースの暗号化) の形式で値が保存されます。

その後、次のランタイムオプションを使用して Keycloak を起動できます。

bin/kc.[sh|bat] start  --vault-file=/path/to/keystore.p12 --vault-pass=<value> --vault-type=<value>

--vault-type パラメーターはオプションであり、デフォルトは PKCS12 であることに注意してください。

Vault に保存されたシークレットは、レルム内で次のプレースホルダーを介してアクセスできます (REALM_UNDERSCORE_KEY キーリゾルバーを使用していると仮定)。${vault.realm-name_alias}

シークレット名でのアンダースコアの使用

シークレットを正しく処理するには、<secretname> 内のすべてのアンダースコアを二重にします。REALM_UNDERSCORE_KEY キーリゾルバーを使用する場合、<realmname> 内のアンダースコアも二重になり、<secretname> と <realmname> は単一のアンダースコアで区切られます。

  • レルム名: sso_realm

  • 希望する名前: ldap_credential

  • 結果のファイル名

sso__realm_ldap__credential

ssorealm の間、および ldapcredential の間の二重アンダースコアに注意してください。

キーリゾルバーの詳細については、サーバー管理ガイドのキーリゾルバーセクションを参照してください。

例: 管理コンソールで LDAP バインドクレデンシャルシークレットを使用する

設定例
  • secrettest という名前のレルム

  • バインドクレデンシャルの希望する名前 ldapBc

  • 結果のファイル名: secrettest_ldapBc

管理コンソールでの使用

LDAP ユーザーフェデレーションを設定する際に、Bind Credential の値として ${vault.ldapBc} を使用して、管理コンソールからこのシークレットを使用できます。

関連オプション

vault

Vault プロバイダーを有効にします。

CLI: --vault
Env: KC_VAULT

file, keystore

vault-dir

設定すると、指定されたディレクトリ内のファイルの内容を読み取ることでシークレットを取得できます。

CLI: --vault-dir
Env: KC_VAULT_DIR

vault-file

キーストアファイルへのパス。

CLI: --vault-file
Env: KC_VAULT_FILE

vault-pass

Vault キーストアのパスワード。

CLI: --vault-pass
Env: KC_VAULT_PASS

vault-type

キーストアファイルのタイプを指定します。

CLI: --vault-type
Env: KC_VAULT_TYPE

PKCS12 (デフォルト)

このページの内容