使用 KES 进行服务器端对象加密
此过程假设您已访问具有活动 MinIO 运算符安装的 Kubernetes 集群。有关运行 KES 的说明,请参阅KES 文档。
在此过程中,您将
使用 MinIO 运算符控制台创建或管理 MinIO 租户。
访问该租户的加密设置,并使用受支持的密钥管理系统配置SSE。
创建一个新的EK,用于与SSE一起使用。
配置自动存储桶默认SSE-KMS。
对于生产裸机环境,请参阅MinIO on Linux 文档,了解有关使用 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 租户位于同一 Kubernetes 集群内的部署,您可以使用 Kubernetes 服务名称,以允许 MinIO 租户建立与目标 KMS 服务的连接。
对于 Kubernetes 集群外部的部署,您必须确保集群支持 Kubernetes 服务和 Pod 与外部网络之间的路由通信。这可能需要配置或部署额外的 Kubernetes 网络组件和/或启用对公共互联网的访问。
请参阅您选择的 KMS 解决方案的文档以获取有关部署和配置的指南。
请参阅 KES 文档 中的配置说明,了解您选择的受支持的 KMS
使用服务器端加密部署 MinIO 租户
1) 访问 Operator 控制台
在本地主机和 MinIO Operator 控制台之间临时转发流量,并检索 Operator 部署的 JWT 令牌。有关说明,请参阅 配置对 Operator 控制台服务的访问。
在浏览器中打开临时 URL,并将 JWT 令牌输入登录页面。您应该会看到 租户 页面。
点击 + 创建租户 开始创建 MinIO 租户。
2) 完成 加密 部分
请参阅 部署 MinIO 租户 过程,了解其他租户设置的完整文档。
要在租户部署期间使用 受支持的 KMS 目标 启用 SSE,请选择 加密 部分并将开关切换到 已启用。然后,您可以选择所选 KMS 提供商的单选按钮以显示该提供商的配置设置。
星号 *
表示必填字段。
请参阅教程中您选择的 受支持的 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 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 租户控制台或 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
以确认关联的加密元数据。