MinIO 部署中的 KES
本教程演示了如何设置 KES 服务器,然后将 MinIO 部署 配置为 KES 客户端以进行对象加密。
本教程重点介绍简单的 KES 服务器设置。我们使用本地文件系统作为密钥库,并省略了 KMS 集成。
对于生产用途,请选择满足您需求的任何受支持的 KMS 实现。
KES 服务器设置
-
生成 KES 服务器私钥和证书
为 KES 服务器生成 TLS 私钥和证书。此密钥用于服务器地址的域名验证。
KES 服务器 默认情况下是安全的,并且只能在使用 TLS 的情况下运行。在本指南中,为简单起见,我们使用自签名证书。
以下命令生成新的 TLS 私钥 (
private.key
) 和自签名 X.509 证书 (public.crt
),该证书为 IP127.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
。确保policy
部分中的标识符与您的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 off
Linux 交换空间保护在 Linux 环境中,KES 可以使用
mlock
系统调用来防止操作系统将内存数据写入磁盘(交换)。这可以防止敏感数据泄露。使用以下命令允许 KES 使用
mlock
系统调用,而无需以root
权限运行sudo setcap cap_ipc_lock=+ep $(readlink -f $(which kes))
启动具有内存保护的 KES 服务器实例
kes server --config config.yml --auth off --mlock
MinIO 服务器设置
下面步骤 2-6 中定义的环境变量可以作为 MinIO 服务器 环境变量文件 的一部分来定义。
-
安装 MinIO
您可以下载 静态二进制文件 或按照 MinIO 快速入门指南 进行操作。
有关在其他拓扑结构(例如,使用多个驱动器或多个节点)上设置 MinIO 服务器的更详细说明,请参阅 安装文档。
选择与您的操作系统相对应的选项卡以获取特定于操作系统的快速入门指南。
-
设置
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.crt
export 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 根凭据
export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=minio123
-
启动 MinIO 服务器
KES 服务器**必须**在您启动 MinIO 服务器**之前**运行。MinIO 服务器需要在启动过程中访问 KES 服务器。minio server /data
加密存储桶
使用 PutBucketEncryption
S3 API 在特定存储桶上启用服务器端加密。这可以通过 MinIO 客户端 完成。
-
创建密钥
有关完整参考,请参阅
mc admin kms key
文档。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
替换为您在上一步中创建的密钥的名称。