使用密鑰儲存庫

了解如何在 Keycloak 中使用和設定密鑰儲存庫

Keycloak 提供了兩種開箱即用的 Vault SPI 實作:基於純文字檔案的密鑰儲存庫和基於 Java KeyStore 的密鑰儲存庫。

基於檔案的密鑰儲存庫實作對於 Kubernetes/OpenShift 密鑰特別有用。您可以將 Kubernetes 密鑰掛載到 Keycloak 容器中,然後這些資料欄位將會以平面檔案結構的形式在掛載的資料夾中提供。

基於 Java KeyStore 的密鑰儲存庫實作適用於在裸機安裝中儲存密鑰。您可以使用 KeyStore 密鑰儲存庫,該密鑰儲存庫會使用密碼加密。

可用的整合

儲存在密鑰儲存庫中的密鑰可以在管理控制台的以下位置使用

  • 取得 SMTP 郵件伺服器密碼

  • 在使用基於 LDAP 的使用者聯合時取得 LDAP 繫結憑證

  • 在整合外部身分提供者時取得 OIDC 身分提供者的用戶端密鑰

啟用密鑰儲存庫

為了啟用基於檔案的密鑰儲存庫,您需要先使用以下建置選項來建置 Keycloak

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

類似地,對於基於 Java KeyStore 的密鑰儲存庫,您需要指定以下建置選項

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

設定基於檔案的密鑰儲存庫

設定查找密鑰的基本目錄

Kubernetes/OpenShift 密鑰基本上是掛載的檔案。若要設定應該掛載這些檔案的目錄,請輸入此命令

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

特定於領域的密鑰檔案

Kubernetes/OpenShift 密鑰在 Keycloak 中是依據每個領域使用的,這需要檔案有一個命名慣例。

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

在名稱中使用底線

為了正確處理密鑰,您需要將 <realmname> 或 <secretname> 中的所有底線都加倍,並用單一底線分隔。

範例
  • 領域名稱:sso_realm

  • 期望的名稱:ldap_credential

  • 產生的檔案名稱

sso__realm_ldap__credential

請注意 *sso* 和 *realm* 之間以及 *ldap* 和 *credential* 之間都有加倍的底線。

設定基於 Java KeyStore 的密鑰儲存庫

為了使用基於 Java KeyStore 的密鑰儲存庫,您需要先建立 KeyStore 檔案。您可以使用以下命令來執行此操作

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

然後輸入您想要儲存在密鑰儲存庫中的值。請注意,-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

然後,可以使用以下佔位符 (假設使用 REALM_UNDERSCORE_KEY 金鑰解析器) 在領域中存取儲存在密鑰儲存庫中的密鑰:${vault.realm-name_alias}

範例:在管理控制台中使用 LDAP 繫結憑證密鑰

範例設定
  • 一個名為 secrettest 的領域

  • 一個用於繫結憑證的期望名稱 ldapBc

  • 產生的檔案名稱:secrettest_ldapBc

在管理控制台中的用法

然後,您可以在管理控制台中使用此密鑰,方法是在設定 LDAP 使用者聯合時將 ${vault.ldapBc} 作為 繫結憑證 的值。

相關選項

vault

啟用密鑰儲存庫提供者。

CLI: --vault
Env: KC_VAULT

filekeystore

vault-dir

如果設定,則可以透過讀取給定目錄中檔案的內容來取得密鑰。

CLI: --vault-dir
Env: KC_VAULT_DIR

vault-file

金鑰儲存庫檔案的路徑。

CLI: --vault-file
Env: KC_VAULT_FILE

vault-pass

密鑰儲存庫的金鑰儲存庫密碼。

CLI: --vault-pass
Env: KC_VAULT_PASS

vault-type

指定金鑰儲存庫檔案的類型。

CLI: --vault-type
Env: KC_VAULT_TYPE

PKCS12 (預設)

在本頁