第13章 Vault を使用したシークレットの取得
直接入力せずに Vault からシークレットを取得するには、以下の特別に作成された文字列を適切なフィールドに入力します。
**${vault.**_key_**}**
キー
は vault によって認識されたシークレットの名前です。
レルム間でシークレットのリークを防ぐために、Red Hat Single Sign-On はレルム名と vault 式から取得した キー
を組み合わせます。このメソッドは、キー
が vault のエントリーに直接マップされるのではなく、キー
をレルム名と組み合わせるために使用されるアルゴリズムに従って最終的なエントリー名を作成します。
以下のフィールドの vault からシークレットを取得できます。
- SMTP パスワード
- レルム SMTP 設定
- LDAP バインド認証情報
- LDAP ベースのユーザーフェデレーションの LDAP 設定
- OIDC アイデンティティープロバイダーシークレット
- アイデンティティープロバイダーの OpenID Connect Config 内のクライアントシークレット
vault を使用するには、Red Hat Single Sign-On で Vault プロバイダーを登録します。ここ で説明するプロバイダーを使用するか、プロバイダーを実装できます。詳細は、サーバー開発者ガイド を参照してください。
Red Hat Single Sign-On では、Red Hat Single Sign-On インスタンスごとに最大 1 つのアクティブな vault プロバイダーが許可されます。クラスター内の各インスタンスで vault プロバイダーを一貫して設定します。
13.1. Kubernetes/OpenShift ファイルのプレーンテキスト Vault プロバイダー
Red Hat Single Sign-On は、Kubernetes シークレット の vault 実装をサポートします。Kubernetes のシークレットはデータボリュームとしてマウントでき、フラットファイル構造のディレクトリーとして表示されます。Red Hat Single Sign-On は、各シークレットをファイルとして、ファイル名をシークレット名として、ファイルの内容をシークレット値として表します。
このディレクトリー内のファイルには、レルム名とアンダースコアの接頭辞が付けられたシークレット名として名前を指定する必要があります。シークレット名またはレルム名内のすべてのアンダースコアをファイル名で 2 倍にします。たとえば、sso_realm
という名前のレルム内のフィールドの場合には、secret-name
という名前のシークレットへの参照は ${vault.secret-name}
として記述され、ファイル名は sso__realm_secret-name
になります。レルム名でアンダースコアが 2 倍になっていることに注意してください。
このタイプのシークレットストアを使用するには、standalone.xml ファイルで files-plaintext
vault プロバイダーを宣言し、マウントされたボリュームが含まれるディレクトリーにそのパラメーターを設定する必要があります。以下の例は、Red Hat Single Sign-On ベースディレクトリーとの関連で、vault ファイルが standalone/configuration/vault
に設定されたディレクトリーを含む files-plaintext
プロバイダーを示しています。
<spi name="vault"> <default-provider>files-plaintext</default-provider> <provider name="files-plaintext" enabled="true"> <properties> <property name="dir" value="${jboss.home.dir}/standalone/configuration/vault/" /> </properties> </provider> </spi>
以下は、CLI コマンドを使用して同等の設定です。
/subsystem=keycloak-server/spi=vault/:add /subsystem=keycloak-server/spi=vault/provider=files-plaintext/:add(enabled=true,properties={dir => "${jboss.home.dir}/standalone/configuration/vault"})