Azure Key Vault
本教程介绍如何设置 KES 服务器Azure Key Vault作为持久密钥存储:
Azure Key Vault
Azure Key Vault 是一种托管式 KMS 服务,它提供了一个可供 KES 使用的密钥存储库。
作为外部应用程序,您必须注册 KESAzure Active Directory并拥有客户端凭据,用于在 Azure Key Vault 中存储和访问机密。
-
Active Directory 服务
-
Navigate toAzure Active Directory并选择应用注册.


-
选择新注册
-
-
注册 KES 应用
给应用程序命名,例如
KES-Demo,并注册它。 完成后,Azure 将显示有关新注册应用程序的一些详细信息。
请记下以下字段以备后用:
- 应用程序(客户端)ID
- 目录(租户)ID
这些字段包含通用唯一标识符(UUID),类似于
c3b7badf-cd2b-4297-bece-4de5f2e575f6. -
创建客户端密钥
- 选择添加证书或密钥
- 指定一个名称,例如
KES-Demo - 选择过期时间
Azure 使用选定的描述和过期时间创建一个新的密钥。 KES 需要使用此密钥向 Azure Key Vault 进行身份验证。
请务必复制该密钥值。 它可能不会再次显示。
-
应用摘要
导航回应用程序概览,并检查 Azure 是否显示该应用程序有一个密钥。

您应具备以下信息:
-
应用程序(客户端)ID
在我们的示例图像中,
c3b7badf-cd2b-4297-bece-4de5f2e575f6. -
目录(租户)ID
在我们的示例图像中,
41a37d4e-b3c4-49f4-b330-1114fb0271c8. -
新创建的密钥的值
在我们的示例图像中,
-.j4XP6Sa7E39.KWn-SL~Dgbz~H-H-TPxT.
-
-
添加 Key Vault 策略
导航到 Key Vault访问策略选项卡和选择添加访问策略Create Key Vault policies.

定义 KES 服务器可以执行的 Key Vault 操作。 选择以下五个
Secret permissions:- 获取
- 列表
- Set
- 删除
- 清除

-
为主体分配策略
选择一个主体或已授权的应用程序。
如果应用程序本身是主体,则无需授权应用程序。 或者,选择用户或组作为主体,并选择新注册的KES Azure应用程序作为授权应用程序。
对于本教程,我们将主体设置为我们添加的密钥。 搜索应用程序的名称(
KES-Demo) 或添加应用程序 ID。
-
策略摘要
Azure 显示与我们的已注册 KES 应用程序关联的新访问策略。
确保你保存在导航到其他位置之前。
KES Server Setup
-
生成 KES 服务器私钥和证书
KES服务器需要TLS私钥和证书。 KES服务器是一个默认安全并且只能通过 TLS 运行。 本教程为简化起见使用自签名证书。
以下命令生成一个新的 TLS 私钥(
private.key) 和一个自签名的 X.509 证书 (public.crt) 为该 IP 地址签发127.0.0.1和 DNS 名称localhost:$ kes identity new --ip "127.0.0.1" localhost Private key: private.key Certificate: public.crt Identity: 2e897f99a779cf5dd147e58de0fe55a494f546f4dcae8bc9e5426d2b5cd35680如果你已经有来自 WebPKI 或内部 CA 的 TLS 私钥和证书,你可以使用它们代替。 记得调整tls配置部分。 -
生成客户端凭据
使用以下命令为客户端应用程序生成新的 TLS 私钥/公钥对,用于访问 KES 服务器:
$ kes identity new --key=client.key --cert=client.crt MyApp Private key: client.key Certificate: client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b身份
02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b是公钥的唯一指纹client.crt您可以随时重新计算指纹:$ kes identity of client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b -
配置 KES 服务器
创建 KES服务器配置文件:
config.yml确保策略部分中的身份信息与您的相符client.crt身份。address: 0.0.0.0:7373 # Listen on all network interfaces on port 7373 admin: identity: disabled # We disable the admin identity since we don't need it in this guide tls: key: private.key # The KES server TLS private key cert: public.crt # The KES server TLS certificate policy: my-app: allow: - /v1/key/create/my-key* - /v1/key/generate/my-key* - /v1/key/decrypt/my-key* identities: - 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b # Use the identity of your client.crt keystore: azure: keyvault: endpoint: "https://kes-test-1.vault.azure.net" # Use your KeyVault instance endpoint. credentials: tenant_id: "" # The ID of the tenant the client belongs to - e.g: "41a37d4e-b3c4-49f4-b330-1114fb0271c8". client_id: "" # The ID of the client - e.g: "c3b7badf-cd2b-4297-bece-4de5f2e575f6". client_secret: "" # The value of the client secret - e.g: "-.j4XP6Sa7E39.KWn-SL~Dgbz~H-H-TPxT". -
启动 KES 服务器
Linux
kes server --config config.yml --auth offLinux Swap Protection在 Linux 环境中,KES 可以使用
mlocksyscall 防止操作系统将内存中的数据写入磁盘(交换)。 这可以防止敏感数据泄露。使用以下命令允许 KES 使用
mlock未以运行权限进行的系统调用rootprivileges:sudo setcap cap_ipc_lock=+ep $(readlink -f $(which kes))启动一个具有内存保护功能的 KES 服务器实例:
kes server --config config.yml --auth off --mlock容器
以下说明使用Podmanto manage the containers. 你也可以使用 Docker。
根据您的部署需求修改地址和文件路径。
sudo podman pod create \ -p 9000:9000 -p 9001:9001 -p 7373:7373 \ -v ~/minio-kes-azure/certs:/certs \ -v ~/minio-kes-azure/minio:/mnt/minio \ -v ~/minio-kes-azure/config:/etc/default/ \ -n minio-kes-azure sudo podman run -dt \ --cap-add IPC_LOCK \ --name kes-server \ --pod "minio-kes-azure" \ -e KES_SERVER=https://127.0.0.1:7373 \ -e KES_CLIENT_KEY=/certs/kes-server.key \ -e KES_CLIENT_CERT=/certs/kes-server.cert \ quay.io/minio/kes:2024-01-11T13-09-29Z server \ --auth \ --config=/etc/default/kes-config.yaml \ sudo podman run -dt \ --name minio-server \ --pod "minio-kes-azure" \ -e "MINIO_CONFIG_ENV_FILE=/etc/default/minio" \ quay.io/minio/minio:RELEASE.2024-01-31T20-20-33Z server \ --console-address ":9001"您可以使用以下命令验证容器的状态。 该命令应显示三个 Pod,一个用于 Pod,一个用于 KES,一个用于 MinIO。
sudo podman container list
KES CLI 访问
-
Set
KES_SERVER端点以下环境变量指定了 KES CLI 应连接的服务器:
export KES_SERVER=https://127.0.0.1:7373 -
定义客户端凭据
以下环境变量设置客户端与 KES 服务器通信时使用的访问凭证:
export KES_CLIENT_CERT=client.crtexport KES_CLIENT_KEY=client.key -
测试配置
执行我们上面分配的策略允许的任何 API 操作。
例如,创建一个密钥:
kes key create my-key-1使用密钥生成新的数据加密密钥:
kes key dek my-key-1结果类似于以下内容:
{ plaintext : UGgcVBgyQYwxKzve7UJNV5x8aTiPJFoR+s828reNjh0= ciphertext: eyJhZWFkIjoiQUVTLTI1Ni1HQ00tSE1BQy1TSEEtMjU2IiwiaWQiOiIxMTc1ZjJjNDMyMjNjNjNmNjY1MDk5ZDExNmU3Yzc4NCIsIml2IjoiVHBtbHpWTDh5a2t4VVREV1RSTU5Tdz09Iiwibm9uY2UiOiJkeGl0R3A3bFB6S21rTE5HIiwiYnl0ZXMiOiJaaWdobEZrTUFuVVBWSG0wZDhSYUNBY3pnRWRsQzJqWFhCK1YxaWl2MXdnYjhBRytuTWx0Y3BGK0RtV1VoNkZaIn0= }
使用 KES 与 MinIO 服务器
MinIO Server 需要 KES 来启用服务器端数据加密。
查看MinIO KES 操作指南有关将新的 KES 服务器与 MinIO 服务器配合使用所需的额外步骤。
配置参考
以下部分介绍了使用 Azure Key Vault 作为根 KMS 存储外部密钥的 Key Encryption Service (KES) 配置设置,例如用于 MinIO 服务器端加密的密钥。