第17章 Vault を使用したシークレットの取得
管理サポートの複数のフィールドは、外部 vault からシークレットの値を取得します。
直接入力せずに vault からシークレットを取得するには、特別に作成された文字列を適切なフィールドに入力します。${vault.key}
。key
は vault が認識されているシークレット名で置き換えます。
レルム間でシークレットのリークを防ぐために、実装は vault 式から取得した key
とレルム名を組み合わせる場合があります。つまり、key
は vault のエントリーに直接マップせず、レルム名と組み合わせるために使用されるアルゴリズムに従って最終的なエントリー名を作成するために使用されます。
現時点で、シークレットは以下のフィールドで vault から取得できます。
- SMTP パスワード
- レルム SMTP 設定
- LDAP バインド認証情報
- LDAP ベースのユーザーフェデレーションの LDAP 設定
- OIDC アイデンティティープロバイダーシークレット
- アイデンティティープロバイダーの OpenID Connect Config 内のクライアントシークレット
vault を使用するには、Red Hat Single Sign-On 内に vault プロバイダーを登録する必要があります。以下で説明されているビルトインプロバイダーを使用するか、または独自のプロバイダーを実装することができます。詳細は、『サーバー開発者ガイド』を参照してください。
Red Hat Single Sign-On インスタンスごとに最大 1 つの vault プロバイダーが指定され、クラスター内の各インスタンスの vault プロバイダーを一貫して設定する必要があります。
17.1. Kubernetes / OpenShift Files Plaintext Vault Provider
Red Hat Single Sign-On は、Kubernetes シークレット の vault 実装をサポートします。これらのシークレットはデータボリュームとしてマウントでき、フラットなファイル構造を持つディレクトリーとして表示され、各シークレットはシークレット名の付いたファイルで表され、そのファイルの内容はシークレットの値になります。
このディレクトリー内のファイルは、レルム名とアンダースコアがついたシークレット名として指定する必要があります。シークレット名またはレルム名内のすべてのアンダースコアは、ファイル名で 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"})