使用 KES 进行服务器端对象加密
此过程假设您拥有对具有活动 MinIO 运算符安装的 Kubernetes 集群的访问权限。有关运行 KES 的说明,请参阅KES 文档。
在此过程中,您将
使用 MinIO 运算符控制台创建或管理 MinIO 租户。
访问该租户的加密设置,并使用受支持的密钥管理系统配置SSE。
创建一个新的EK,用于与SSE一起使用。
配置自动存储桶默认SSE-KMS。
对于生产裸机环境,请参阅Linux 上的 MinIO 文档,了解有关使用 KES 和您的KMS配置 MinIO 的教程。
重要
在 MinIO 部署上启用SSE会自动使用默认加密密钥加密该部署的后端数据。
MinIO *需要* 访问 KES 和外部 KMS 才能解密后端并正常启动。KMS **必须**维护并提供对MINIO_KMS_KES_KEY_NAME
的访问权限。您不能在以后禁用 KES 或“撤消”以后的SSE配置。
先决条件
MinIO Kubernetes 运算符
确保您的目标 Kubernetes 集群具有 MinIO Kubernetes 运算符的有效且正常运行的安装。此文档假设使用最新的稳定运算符,版本 6.0.4。
请参阅部署 MinIO 运算符,以获取有关部署 MinIO 运算符的完整文档。
确保 KES 能够访问受支持的 KMS 目标
此过程假设已存在一个可从 Kubernetes 集群访问的受支持的 KMS 安装。
对于在与 MinIO Tenant 相同的 Kubernetes 集群内的部署,您可以使用 Kubernetes 服务名称,以允许 MinIO Tenant 建立与目标 KMS 服务的连接。
对于 Kubernetes 集群外部的部署,您必须确保集群支持 Kubernetes 服务和 Pod 与外部网络之间的路由通信。这可能需要配置或部署额外的 Kubernetes 网络组件和/或启用对公共互联网的访问。
请参阅您选择的 KMS 解决方案的文档,以获取有关部署和配置的指导。
请参阅KES 文档中的配置说明,以获取您选择的受支持KMS。
使用服务器端加密部署 MinIO Tenant
1) 访问 Operator 控制台
临时转发本地主机与 MinIO Operator 控制台之间的流量,并检索 Operator 部署的 JWT 令牌。有关说明,请参阅配置对 Operator 控制台服务的访问。
在浏览器中打开临时 URL,并将 JWT 令牌输入登录页面。您应该会看到租户页面。
单击+ 创建租户以开始创建 MinIO Tenant。
2) 完成加密部分
参考部署 MinIO Tenant过程以获取其他 Tenant 设置的完整文档。
要在租户部署期间使用受支持的 KMS 目标启用SSE,请选择加密部分并将开关切换到已启用。然后,您可以选择所选 KMS 提供程序的单选按钮以显示该提供程序的配置设置。
星号*
表示必填字段。
请参阅教程中您选择的受支持的 KMS 目标的配置参考部分,以获取有关 KMS 配置选项的更多信息。
完成配置后,您可以完成租户部署的任何剩余部分。
3) 生成新的加密密钥
在创建密钥之前解封 Vault
如果您的所选提供商需要,则必须在创建新的加密密钥之前解封后端 Vault 实例。有关更多信息,请参阅您选择的 KMS 解决方案的文档。
MinIO 要求给定存储桶或对象的EK在使用该密钥执行SSE操作之前存在于根 KMS 上。您可以对 MinIO Tenant 使用mc admin kms key create
命令。
在使用mc
管理 Tenant 之前,您必须确保本地主机可以访问 MinIO Tenant Pod 和服务。对于 Kubernetes 集群内部的主机,您可以使用服务 DNS 名称。对于 Kubernetes 集群外部的主机,请指定 Ingress、负载均衡器或类似 Kubernetes 网络控制组件公开的服务的主机名。
在单独的终端或 Shell 中运行此命令。
# Replace '-n minio' with the namespace of the MinIO deployment
# If you deployed the Tenant without TLS you may need to change the port range
# You can validate the ports in use by running
# kubectl get svc/minio -n minio
kubectl port forward svc/minio 443:443 -n minio
在新的终端或 Shell 窗口中执行以下命令。
将本地
mc
客户端连接到 Tenant。创建加密密钥。
有关在本地主机上安装mc
的说明,请参阅快速入门。
# Replace USERNAME and PASSWORD with a user on the tenant with administrative permissions
# such as the root user
mc alias add k8s http://127.0.0.1:443 ROOTUSER ROOTPASSWORD
# Replace my-new-key with the name of the key you want to use for SSE-KMS
mc admin kms key create k8s encrypted-bucket-key
4) 为存储桶启用 SSE-KMS
您可以使用 MinIO Tenant 控制台或 MinIO mc
CLI 使用生成的密钥启用存储桶默认 SSE-KMS。
连接到MinIO Tenant 控制台服务并登录。对于 Kubernetes 集群内部的客户端,您可以指定服务 DNS 名称。对于 Kubernetes 集群外部的客户端,请指定 Ingress、负载均衡器或类似 Kubernetes 网络控制组件公开的服务的主机名。
登录后,创建一个新的存储桶并将其命名为您喜欢的名称。选择齿轮图标以打开管理视图。
选择铅笔图标,在加密字段旁边,以打开配置存储桶默认 SSE 方案的模态。
选择SSE-KMS,然后输入上一步中创建的密钥的名称。
保存更改后,尝试将文件上传到存储桶。在对象浏览器中查看该文件时,请注意,在侧边栏中,元数据包含 SSE 加密方案和有关用于加密该对象密钥的信息。这表示对象已成功加密。
使用MinIO API 服务为 MinIO 部署创建新的别名。然后,您可以使用mc encrypt set
命令为存储桶启用 SSE-KMS 加密。
mc alias set k8s https://minio.minio-tenant-1.svc.cluster-domain.example:443 ROOTUSER ROOTPASSWORD
mc mb k8s/encryptedbucket
mc encrypt set SSE-KMS encrypted-bucket-key k8s/encryptedbucket
对于 Kubernetes 集群外部的客户端,请指定 Ingress、负载均衡器或类似 Kubernetes 网络控制组件公开的服务的主机名。
使用mc cp
或任何具有PutObject
功能的与 S3 兼容的 SDK 将文件写入存储桶。然后,您可以对文件运行mc stat
以确认关联的加密元数据。