文档

使用 KES 的服务器端对象加密

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

在此过程的一部分中,您将

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

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

  3. 创建新的 EK 以用于 SSE

  4. 配置自动存储桶默认 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) 访问运算符控制台

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

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

MinIO Operator Console

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

2) 完成 加密 部分

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

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

MinIO Operator Console - Create a Tenant - Encryption Section

星号 * 标记必填字段。

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

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

3) 生成新的加密密钥

在创建密钥之前解封 Vault

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

MinIO 要求 EK 在执行 SSE 使用该密钥的操作之前,给定存储桶或对象的必须存在于根 KMS 上。您可以使用 mc admin kms key create 命令针对 MinIO 租户。

您必须确保您的本地主机可以访问 MinIO 租户的 Pod 和服务,然后才能使用 mc 来管理租户。对于 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 在该文件上确认关联的加密元数据。