bin/kc.[sh|bat] build --vault=file
Keycloak 提供了两种开箱即用的 Vault SPI 实现:基于纯文本文件的 Vault 和基于 Java KeyStore 的 Vault。
基于文件的 Vault 实现对于 Kubernetes/OpenShift 密钥特别有用。您可以将 Kubernetes 密钥挂载到 Keycloak 容器中,并且数据字段将以平面文件结构在挂载的文件夹中可用。
基于 Java KeyStore 的 Vault 实现对于在裸机安装中存储密钥非常有用。您可以使用 KeyStore Vault,它使用密码加密。
存储在 Vault 中的密钥可以在管理控制台的以下位置使用
获取 SMTP 邮件服务器密码
使用基于 LDAP 的用户联合时获取 LDAP 绑定凭据
集成外部身份提供者时获取 OIDC 身份提供者客户端密钥
要启用基于文件的 Vault,您需要先使用以下构建选项构建 Keycloak
bin/kc.[sh|bat] build --vault=file
类似地,对于基于 Java KeyStore 的 Vault,您需要指定以下构建选项
bin/kc.[sh|bat] build --vault=keystore
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,您需要先创建一个 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}`。
一个名为 `secrettest` 的域
绑定凭据的目标名称 `ldapBc`
生成的文件名:`secrettest_ldapBc`
然后,您可以在管理控制台中使用此密钥,方法是将 `${vault.ldapBc}` 作为配置 LDAP 用户联合时 `绑定凭据` 的值。
值 | |
---|---|
|
|
|
|
|
|
|
|
|
(默认) |