使用 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 目标
此过程假设存在一个受支持的 KMS 安装,并且 Kubernetes 集群可以访问该安装。
对于与 MinIO 租户位于同一 Kubernetes 集群中的部署,您可以使用 Kubernetes 服务名称来允许 MinIO 租户建立与目标 KMS 服务的连接。
对于 Kubernetes 集群外部的部署,您必须确保集群支持在 Kubernetes 服务和 Pod 与外部网络之间路由通信。这可能需要配置或部署其他 Kubernetes 网络组件和/或启用对公共互联网的访问。
请参阅您选择的 KMS 解决方案的文档,以获取有关部署和配置的指南。
请参阅KES 文档中针对您选择的受支持KMS的配置说明
部署具有服务器端加密功能的 MinIO 租户
1) 访问运算符控制台
临时转发本地主机和 MinIO 运算符控制台之间的流量,并检索运算符部署的 JWT 令牌。有关说明,请参阅配置对运算符控制台服务的访问。
在浏览器中打开临时 URL,并将 JWT 令牌输入登录页面。您应该会看到租户页面
点击+ 创建租户以开始创建 MinIO 租户。
2) 完成加密部分
请参考部署 MinIO 租户过程,获取其他租户设置的完整文档。
要在租户部署期间使用受支持的 KMS 目标启用SSE,请选择加密部分并将开关切换到已启用。然后,您可以选择所选 KMS 提供程序的单选按钮以显示该提供程序的配置设置。
星号*
表示必填字段。
有关您选择的受支持的 KMS 目标的配置选项的更多信息,请参阅教程的“配置参考”部分。
完成配置后,您可以完成租户部署的任何剩余部分。
3) 生成新的加密密钥
在创建密钥之前解除密封 Vault
如果您的所选提供程序需要,则必须在创建新的加密密钥之前解除密封后端 Vault 实例。有关更多信息,请参阅您选择的 KMS 解决方案的文档。
MinIO 要求在使用该密钥执行SSE操作之前,给定存储桶或对象的EK必须存在于根 KMS 上。您可以对 MinIO 租户使用mc admin kms key create
命令。
在使用mc
管理租户之前,您必须确保本地主机可以访问 MinIO 租户 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
客户端连接到租户。创建加密密钥。
有关在本地主机上安装mc
的说明,请参阅快速入门。
# Replace USERNAME and PASSWORD with a user on the tenant with administrative permissions
# such as the root user
mc alias add k8s https://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 租户控制台或 MinIO mc
CLI 使用生成的密钥启用存储桶默认 SSE-KMS。
连接到MinIO 租户控制台服务并登录。对于 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
以确认关联的加密元数据。