使用 KES 的服务器端对象加密
.
.
对于生产环境的编排,请使用 MinIO Kubernetes Operator 来部署一个启用了 SSE 并配置为与您的 KMS 一起使用的租户。
对于生产裸机环境,请参阅 MinIO on Linux文档,了解如何配置 MinIO 与 KES 和您的 KMS 一起使用的教程。
本程序假设您有权访问一个已安装 MinIO Operator 的活跃 Kubernetes 集群。 有关运行 KES 的说明,请参阅 KES 文档。
作为此过程的一部分,您将:
使用 MinIO Operator 控制台创建或管理 MinIO 租户。
访问该租户的 加密 设置,并使用一个 支持的关键管理系统 来配置 SSE。
创建一个新的 EK 以用于 SSE。
配置自动桶默认的 SSE-KMS。
.
对于生产环境的裸机系统,请参阅 MinIO on Linux documentation,了解如何使用 KES 和您的 KMS 配置 MinIO 的教程。
重要
在 MinIO 部署中启用 SSE 将会自动使用默认加密密钥加密该部署的后端数据。
MinIO 需要 访问 KES 和外部 KMS 以解密后端并正常启动。
KMS 必须 维护并提供对 MINIO_KMS_KES_KEY_NAME
的访问。
先决条件
MinIO Kubernetes Operator
确保您的目标 Kubernetes 集群具有有效且可正常运行的 MinIO Kubernetes Operator 安装. 本文档假定 Operator 为最新稳定版本 7.1.1.
有关部署 MinIO Operator 的完整文档,请参阅 deploy-operator-kubernetes。
确保 KES 访问支持的 KMS 目标
本程序假设存在一个可以从 Kubernetes 集群访问的 支持的 KMS 安装。
在 MinIO 租户所在的同一 Kubernetes 集群中部署时,您可以使用 Kubernetes 服务名称来允许 MinIO 租户与目标 KMS 服务建立连接。
对于部署在 Kubernetes 集群外部的场景,您必须确保集群支持在 Kubernetes 服务和 pod 以及外部网络之间路由通信。 这可能需要配置或部署其他Kubernetes网络组件和/或启用对公共互联网的访问。
请参考您选择的 KMS 解决方案的文档,以获取关于部署和配置的指导。
请参考您选择的受支持 KMS 的 KES 文档 中的配置说明。
部署带有服务器端加密的 MinIO 租户
1) 访问Operator控制台
临时转发本地主机和 MinIO 操作员控制台之间的流量并检索操作员部署的 JWT 令牌。 For instructions, see Configure access to the Operator Console service。
打开浏览器访问临时 URL,然后将 JWT Token 输入登录页面。 您应该能看到 Tenants 页面:

单击 + Create Tenant 开始创建 MinIO 租户。
2) 完成 Encryption 部分
有关其他租户设置的完整文档,请参考 部署 MinIO 租户 手册。
要在部署租户时使用 支持的 KMS 目标 启用 SSE,请选择 Encryption 部分,并切换开关到 Enabled。 然后,您可以选择所选 KMS 提供商的单选按钮以显示该提供商的配置设置。

*
标记必填字段。
请参阅您选择的 支持的KMS目标 教程中的配置参考部分,以获取有关您的KMS的配置选项的更多信息。
完成配置后,您可以完成 Tenant Deployment 部分的剩余部分。
3) 生成一个新的加密密钥
Unseal Vault Before Creating Key
如果您的提供商要求,您必须在创建新加密密钥之前解封后端保险库实例。 请参阅您选择的 KMS 解决方案的文档以获取更多信息。
在使用该密钥执行 SSE 操作之前,MinIO 要求给定存储桶或对象的 EK 存在于根 KMS 上。
您可以使用 mc admin kms key create
命令针对 MinIO 租户执行该操作。
在使用 mc
管理租户之前,您必须确保本地主机可以访问 MinIO 租户的 Pod 和服务。
对于 Kubernetes 集群内部的主机,您可以使用 service 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 窗口中运行以下命令:
C将本地的
mc
客户端连接到租户。创建加密密钥。
请参阅 mc-install 以获取在本地主机上安装 mc
的说明。
# Replace USERNAME and PASSWORD with a user on the tenant with administrative permissions
# such as the root user
mc alias add k8s https://localhost: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来使用生成的密钥启用Bucket默认SSE-KMS:
连接到 MinIO租户控制台服务 并登录。 对于Kubernetes集群内部的客户端,您可以指定 服务DNS名称。 对于Kubernetes集群外部的客户端,请指定由Ingress、负载均衡器或类似的Kubernetes网络控制组件公开的服务的主机名。
登录后,创建一个新的Bucket并按照您的喜好命名。 选择齿轮 图标以打开管理视图。
选择 Encryption 字段旁边的铅笔 图标,以打开用于配置Bucket默认SSE方案的模态窗口。
选择 SSE-KMS,然后输入在上一步中创建的密钥名称。
保存更改后,请尝试将文件上传到Bucket。 在对象浏览器中查看该文件时,请注意侧边栏中的元数据,其中包括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
或任何支持 S3 的 SDK 中的 PutObject
函数将文件写入存储桶。
然后,您可以运行 mc stat
命令查看文件的加密元数据以确认。