使用 KES 进行服务器端对象加密
此过程提供了配置为使用 KES 并启用服务器端加密的 MinIO 部署指南。有关运行 KES 的说明,请参阅KES 文档。
在此过程中,您将
创建一个新的用于与SSE一起使用的EK。
创建或修改支持使用KES的SSE的 MinIO 部署。有关生产就绪型 MinIO 部署的指南,请参考部署分布式 MinIO教程。
配置自动存储桶默认SSE-KMS
重要
在 MinIO 部署上启用SSE会自动使用默认加密密钥加密该部署的后端数据。
MinIO需要访问 KES 和外部 KMS 才能解密后端并正常启动。KMS必须维护并提供对MINIO_KMS_KES_KEY_NAME
的访问权限。您以后无法禁用 KES 或在以后的某个时间点“撤消”SSE配置。
先决条件
确保 KES 访问受支持的 KMS 目标
此过程假设已安装 KES 并连接到受支持的KMS安装,两者均可从本地主机访问。请参阅您的受支持的 KMS 目标的安装说明,以部署 KES 并将其连接到 KMS 解决方案。
KES 操作需要未密封的目标
一些受支持的KMS目标允许您密封或解除密封保管库实例。如果配置的KMS服务已密封,则 KES 会返回错误。
如果重新启动或以其他方式密封保管库实例,则 KES 无法对保管库执行任何加密操作。您必须解除密封保管库以确保正常操作。
有关是否可能需要解除密封的更多信息,请参阅您选择的KMS解决方案的文档。
请参阅您选择的受支持KMS的KES 文档中的配置说明
部署或确保访问 MinIO 部署
此过程提供了修改 MinIO 部署的启动环境变量以通过 KES 和 KMS 目标启用SSE的说明。
有关新的生产部署的说明,请参阅多节点多驱动器(分布式)教程。有关新的本地或评估部署的说明,请参阅单节点单驱动器教程。
在创建部署的环境文件时,请暂停并切换回本教程,以包含支持SSE的必要环境变量。
对于现有的 MinIO 部署,您可以修改现有的环境文件并按照本过程中指示的那样重新启动部署。
流程
本流程提供有关在生产环境中配置和启用使用您选择的受支持的 KMS 解决方案的服务器端加密的说明。具体来说,此流程假设以下条件
现有的生产级 KMS 目标
一个或多个连接到 KMS 目标的 KES 服务器
一个或多个用于新的或现有的 MinIO 部署的主机
先决条件
根据您选择的受支持的 KMS 目标配置,您可能需要将kes-server.cert
作为受信任的证书颁发机构 (CA) 传递。有关信任第三方 CA 的说明,请参阅客户端文档。
1) 为 MinIO 生成 KES API 密钥
从 KES 版本2023-02-15T14-54-37Z开始,您可以生成一个 API 密钥用于对 KES 服务器进行身份验证。
使用kes identity new命令为 MinIO 服务器生成一个新的 API 密钥
kes identity new
输出包括用于 MinIO 的 API 密钥和用于KES 策略配置的身份哈希。
2) 创建 MinIO 配置
配置 MinIO 环境文件
为目标部署中的所有主机创建或修改 MinIO 服务器环境文件,以包含以下环境变量
在每个 MinIO 主机上的 MinIO 环境文件中添加以下行。有关基本 MinIO 环境文件的更详细说明,请参阅部署 MinIO:单节点单驱动器、部署 MinIO:单节点多驱动器或部署 MinIO:多节点多驱动器中的教程。
# Add these environment variables to the existing environment file
MINIO_KMS_KES_ENDPOINT=https://HOSTNAME:7373
MINIO_KMS_KES_API_KEY="kes:v1:ACTpAsNoaGf2Ow9o5gU8OmcaG6Af/VcZ1Mt7ysuKoBjv"
# Allows validation of the KES Server Certificate (Self-Signed or Third-Party CA)
# Change this path to the location of the KES CA Path
MINIO_KMS_KES_CAPATH=/opt/kes/certs/kes-server.cert
# Sets the default KMS key for the backend and SSE-KMS/SSE-S3 Operations)
MINIO_KMS_KES_KEY_NAME=minio-backend-default-key
将HOSTNAME
替换为 KES 服务器的 IP 地址或主机名。如果 MinIO 服务器主机无法解析或访问指定的HOSTNAME
,则部署可能会返回错误或无法启动。
如果使用单个 KES 服务器主机,请指定该主机的 IP 或主机名
如果使用多个 KES 服务器主机,请指定每个主机的 IP 或主机名的逗号分隔列表
MinIO 使用MINIO_KMS_KES_KEY_NAME
密钥执行以下加密操作
MinIO 默认情况下期望此文件位于/etc/default/minio
。如果您修改了部署以使用环境文件的其他位置,请修改该位置的文件。
3) 启动 MinIO
KES 操作需要未密封的保管库
根据您选择的 KMS 解决方案,您可能需要取消密封密钥实例以允许正常的加密操作,包括密钥创建或检索。KES 需要未密封的密钥目标才能执行其操作。
有关操作是否需要密封和取消密封实例的信息,请参阅您选择的 KMS 解决方案的文档。
您必须在启动 MinIO *之前* 启动 KES。MinIO 部署需要在启动过程中访问 KES。
此步骤使用systemd
启动和管理 MinIO 服务器进程
启动 MinIO 服务器
对于新的 MinIO 部署,请在每个 MinIO 主机上运行以下命令以启动服务
systemctl start minio
对于现有的 MinIO 部署,请在每个 MinIO 主机上运行以下命令以重新启动服务
systemctl reload minio
systemctl restart minio
4) 生成新的加密密钥
MinIO 要求EK在使用该密钥执行SSE操作*之前*存在于 KMS 上。使用kes key create
*或*mc admin kms key create
添加一个新的EK以用于SSE。
以下命令使用mc admin kms key create
命令添加一个新的外部密钥 (EK),该密钥存储在 KMS 服务器上,用于加密 MinIO 后端。
mc admin kms key create ALIAS KEYNAME
5) 为 Bucket 启用 SSE-KMS
您可以使用 MinIO 控制台或 MinIO mc
CLI 使用生成的密钥启用 Bucket 默认 SSE-KMS
通过在您首选的浏览器中导航到http://127.0.0.1:9001并使用指定给 MinIO 服务器的根凭据登录来打开 MinIO 控制台。如果您使用不同的控制台侦听端口部署了 MinIO,请将9001
替换为该端口值。
登录后,创建一个新的 Bucket 并根据您的喜好命名。选择齿轮图标以打开管理视图。
选择铅笔图标,位于加密字段旁边,以打开配置 Bucket 默认 SSE 方案的模态。
选择SSE-KMS,然后输入上一步中创建的密钥的名称。
保存更改后,尝试将文件上传到 Bucket。在对象浏览器中查看该文件时,请注意侧边栏元数据包含 SSE 加密方案和有关用于加密该对象密钥的信息。这表示该对象的加密状态成功。
以下命令
为 MinIO 部署创建一个新的别名
创建一个用于存储加密数据的新的 Bucket
在该 Bucket 上启用 SSE-KMS 加密
mc alias set local http://127.0.0.1:9000 ROOTUSER ROOTPASSWORD
mc mb local/encryptedbucket
mc encrypt set SSE-KMS encrypted-bucket-key ALIAS/encryptedbucket
使用mc cp
或任何具有PutObject
功能的与 S3 兼容的 SDK 将文件写入 Bucket。然后,您可以对文件运行mc stat
以确认关联的加密元数据。