使用 Vault

了解如何在 Keycloak 中使用和配置 Vault

Keycloak 提供了两种开箱即用的 Vault SPI 实现:基于纯文本文件的 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>}

在名称中使用下划线

为了正确处理密钥,您需要将``或``中的所有下划线都加倍,并用一个下划线隔开。

示例
  • 域名称:sso_realm

  • 目标名称:ldap_credential

  • 生成的文件名

sso__realm_ldap__credential

注意 `sso` 和 `realm` 之间以及 `ldap` 和 `credential` 之间加倍的下划线。

配置基于 Java KeyStore 的 Vault

要使用基于 Java KeyStore 的 Vault,您需要先创建一个 KeyStore 文件。您可以使用以下命令来完成此操作

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

然后输入您要存储在 Vault 中的值。请注意,`-alias` 参数的格式取决于使用的密钥解析器。默认的密钥解析器是 `REALM_UNDERSCORE_KEY`。

这默认情况下会导致将值以通用 PBEKey(基于密码的加密)的形式存储在 SecretKeyEntry 中。

然后,您可以使用以下运行时选项启动 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}`。

示例:在管理控制台中使用 LDAP 绑定凭据密钥

示例设置
  • 一个名为 `secrettest` 的域

  • 绑定凭据的目标名称 `ldapBc`

  • 生成的文件名:`secrettest_ldapBc`

在管理控制台中使用

然后,您可以在管理控制台中使用此密钥,方法是将 `${vault.ldapBc}` 作为配置 LDAP 用户联合时 `绑定凭据` 的值。

相关选项

vault

启用 Vault 提供者。

CLI: --vault
环境: KC_VAULT

file, keystore

vault-dir

如果设置,可以通过读取给定目录中文件的內容来获取密钥。

CLI: --vault-dir
环境: KC_VAULT_DIR

vault-file

指向 Keystore 文件的路径。

CLI: --vault-file
环境: KC_VAULT_FILE

vault-pass

Vault Keystore 的密码。

CLI: --vault-pass
环境: KC_VAULT_PASS

vault-type

指定 Keystore 文件的类型。

CLI: --vault-type
环境: KC_VAULT_TYPE

PKCS12 (默认)

在本页上