KES on a MinIO Deployment
本教程展示如何设置 KES 服务器并配置MinIO 部署作为对象加密的KES客户端。
本教程重点介绍简单的KES服务器设置。 我们使用本地文件系统作为密钥存储,并省略KMS集成。
对于生产环境使用,请选择任何符合您要求的受支持 KMS 实现方案。
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现有密钥与证书如果你已经有 TLS 私钥和证书,例如来自 WebPKI 或内部证书颁发机构的证书,你可以直接使用它们。 请记得调整tls配置部分。 -
生成 MinIO 凭据
MinIO 需要凭据才能访问 KES 服务器。 以下命令根据提供的 TLS 私钥/公钥对生成哈希身份:
$ kes identity new --key=client.key --cert=client.crt MinIO Private key: client.key Certificate: client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b身份
02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b是公钥的唯一指纹client.crt使用此 API 密钥身份验证 MinIO 客户端到 KES 服务器的连接。您可以随时从同一证书重新计算身份:
$ kes identity of client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b -
配置 KES 服务器
此流程提供了一套基准步骤,可能需要大幅修改以适应您的目标。 有关为特定密钥管理系统提供商配置KES服务器的详细说明,请参阅集成页面:支持的目标.
创建 KES 服务器配置文件:
config.yml确保身份在policysection 与您的匹配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/minio-* - /v1/key/generate/minio-* - /v1/key/decrypt/minio-* identities: - 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b # Use the identity of your client.crt keystore: fs: path: ./keys # Choose a directory for the secret keys -
启动 KES 服务器
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
MinIO Server Setup
下面步骤2-6中定义的环境变量可以作为MinIO Server的一部分进行定义环境变量文件.
-
安装 MinIO
您可以选择下载一个静态二进制或遵循MinIO 快速入门指南.
有关在其他拓扑结构(例如多驱动器或多节点)上设置 MinIO 服务器的更详细说明,请参阅安装文档.
选择您操作系统的标签页,查看针对特定操作系统的快速入门指南。
-
Set
MINIO_KMS_KES_ENDPOINT此环境变量告诉 MinIO 要访问哪个 KES 服务器:
export MINIO_KMS_KES_ENDPOINT=https://127.0.0.1:7373 -
设置 MinIO 客户端凭据
这些环境变量设置 MinIO 用于访问 KES 服务器的访问凭据:
export MINIO_KMS_KES_CERT_FILE=client.crtexport MINIO_KMS_KES_KEY_FILE=client.key -
设置 MinIO 默认密钥
此环境变量设置 MinIO 的默认密钥,当 S3 客户端未指定加密密钥时使用。
export MINIO_KMS_KES_KEY_NAME=minio-default-key如果该密钥不存在,MinIO 会自动创建它。 -
信任 KES 服务器证书
如果 KES 服务器使用的是受信任证书颁发机构颁发的证书,此步骤为可选操作。
当使用自签名证书时,MinIO 无法验证 KES 服务器证书。 此环境变量用于手动建立信任关系。
export MINIO_KMS_KES_CAPATH=public.crt在这种情况下,
public.crt这是 KES 服务器的公共证书。 -
设置 MinIO root 凭据:
export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=minio123 -
启动 MinIO 服务器
KES服务器必须正在运行之前您启动 MinIO 服务器。 MinIO 服务器在启动过程中需要访问 KES 服务器。minio server /data
加密存储桶
在特定存储桶上启用服务器端加密,使用PutBucketEncryptionS3 API.
这可以通过MinIO Client.
-
创建密钥
如需完整参考,请参阅
mc admin kms keydocumentation.mc admin kms key create <alias> minio-key-name替换
minio-key-name使用您要为密钥指定的名称。 -
配置存储桶
为您的存储桶添加服务器端加密配置
mc encrypt set.例如:
mc encrypt set sse-kms minio-key-name <alias>/my-bucket替换
minio-key-name使用您在上一步中创建的密钥名称。