文档

使用 KES 进行服务器端对象加密

此过程假设您可以访问具有活动 MinIO 运算符安装的 Kubernetes 集群。有关运行 KES 的说明,请参阅KES 文档

在此过程中,您将

  1. 使用 MinIO 运算符控制台创建或管理 MinIO 租户。

  2. 访问该租户的加密设置,并使用受支持的密钥管理系统配置SSE

  3. 创建一个新的EK,用于与SSE一起使用。

  4. 配置自动存储桶默认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 租户相同的 Kubernetes 集群中的部署,您可以使用 Kubernetes 服务名称来允许 MinIO 租户建立与目标 KMS 服务的连接。

  • 对于 Kubernetes 集群外部的部署,您必须确保集群支持 Kubernetes 服务和 Pod 与外部网络之间的路由通信。这可能需要配置或部署其他 Kubernetes 网络组件和/或启用对公共互联网的访问。

请参考您选择的 KMS 解决方案的文档,以获取有关部署和配置的指导。

请参阅KES 文档中有关您选择的受支持KMS的配置说明

部署具有服务器端加密功能的 MinIO 租户

1) 访问操作员控制台

临时转发本地主机和 MinIO 操作员控制台之间的流量,并检索 Operator 部署的 JWT 令牌。有关说明,请参阅 配置对 Operator 控制台服务的访问

在浏览器中打开临时 URL,并在登录页面中输入 JWT 令牌。您应该会看到 租户 页面。

MinIO Operator Console

点击 + 创建租户 开始创建 MinIO 租户。

2) 完成 加密 部分

参考 部署 MinIO 租户 过程以获取其他租户设置的完整文档。

要在租户部署期间使用 支持的 KMS 目标 启用 SSE,请选择 加密 部分并将开关切换到 已启用。然后,您可以选择所选 KMS 提供商的单选按钮以显示该提供商的配置设置。

MinIO Operator Console - Create a Tenant - Encryption Section

星号 * 表示必填字段。

有关您选择的 支持的 KMS 目标 的配置选项的更多信息,请参阅教程的“配置参考”部分。

完成配置后,您可以完成 租户部署 的任何剩余部分。

3) 生成新的加密密钥

创建密钥前解除 Vault 密封

如果您的所选提供商需要,则必须在创建新的加密密钥之前解除支持 Vault 实例的密封。有关更多信息,请参阅您选择的 KMS 解决方案的文档。

MinIO 要求在使用该密钥执行 SSE 操作之前,给定 Bucket 或对象的 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) 为 Bucket 启用 SSE-KMS

您可以使用 MinIO 租户控制台或 MinIO mc CLI 使用生成的密钥启用 Bucket 默认的 SSE-KMS。

连接到 MinIO 租户控制台服务 并登录。对于 Kubernetes 集群内部的客户端,您可以指定 服务 DNS 名称。对于 Kubernetes 集群外部的客户端,请指定由 Ingress、负载均衡器或类似 Kubernetes 网络控制组件公开的服务的主机名。

登录后,创建一个新的 Bucket 并根据您的喜好命名。选择齿轮图标以打开管理视图。

选择铅笔图标,位于 加密 字段旁边,以打开配置 Bucket 默认 SSE 方案的模态窗口。

选择 SSE-KMS,然后输入上一步中创建的密钥的名称。

保存更改后,尝试将文件上传到 Bucket。在对象浏览器中查看该文件时,请注意,侧边栏中的元数据包含 SSE 加密方案和用于加密该对象密钥的信息。这表示对象已成功加密。

使用 MinIO API 服务 为 MinIO 部署创建新的 别名。然后,您可以使用 mc encrypt set 命令为 Bucket 启用 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 将文件写入 Bucket。然后,您可以对文件运行 mc stat 以确认关联的加密元数据。