文档

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

此过程提供了配置为使用 KES 并启用服务器端加密的 MinIO 部署指南。有关运行 KES 的说明,请参阅KES 文档

在此过程中,您将

  1. 创建一个新的用于与SSE一起使用的EK

  2. 创建或修改支持使用KESSSE的 MinIO 部署。有关生产就绪型 MinIO 部署的指南,请参考部署分布式 MinIO教程。

  3. 配置自动存储桶默认SSE-KMS

重要

在 MinIO 部署上启用SSE会自动使用默认加密密钥加密该部署的后端数据。

MinIO需要访问 KES 和外部 KMS 才能解密后端并正常启动。KMS必须维护并提供对MINIO_KMS_KES_KEY_NAME的访问权限。您以后无法禁用 KES 或在以后的某个时间点“撤消”SSE配置。

先决条件

确保 KES 访问受支持的 KMS 目标

此过程假设已安装 KES 并连接到受支持的KMS安装,两者均可从本地主机访问。请参阅您的受支持的 KMS 目标的安装说明,以部署 KES 并将其连接到 KMS 解决方案。

KES 操作需要未密封的目标

一些受支持的KMS目标允许您密封或解除密封保管库实例。如果配置的KMS服务已密封,则 KES 会返回错误。

如果重新启动或以其他方式密封保管库实例,则 KES 无法对保管库执行任何加密操作。您必须解除密封保管库以确保正常操作。

有关是否可能需要解除密封的更多信息,请参阅您选择的KMS解决方案的文档。

请参阅您选择的受支持KMSKES 文档中的配置说明

部署或确保访问 MinIO 部署

此过程提供了修改 MinIO 部署的启动环境变量以通过 KES 和 KMS 目标启用SSE的说明。

有关新的生产部署的说明,请参阅多节点多驱动器(分布式)教程。有关新的本地或评估部署的说明,请参阅单节点单驱动器教程。

在创建部署的环境文件时,请暂停并切换回本教程,以包含支持SSE的必要环境变量。

对于现有的 MinIO 部署,您可以修改现有的环境文件并按照本过程中指示的那样重新启动部署。

流程

本流程提供有关在生产环境中配置和启用使用您选择的受支持的 KMS 解决方案的服务器端加密的说明。具体来说,此流程假设以下条件

  • 现有的生产级 KMS 目标

  • 一个或多个连接到 KMS 目标的 KES 服务器

  • 一个或多个用于新的或现有的 MinIO 部署的主机

先决条件

根据您选择的受支持的 KMS 目标配置,您可能需要将kes-server.cert作为受信任的证书颁发机构 (CA) 传递。有关信任第三方 CA 的说明,请参阅客户端文档。

1) 为 MinIO 生成 KES API 密钥

从 KES 版本2023-02-15T14-54-37Z开始,您可以生成一个 API 密钥用于对 KES 服务器进行身份验证。

使用kes identity new命令为 MinIO 服务器生成一个新的 API 密钥

kes identity new

输出包括用于 MinIO 的 API 密钥和用于KES 策略配置的身份哈希。

2) 创建 MinIO 配置

配置 MinIO 环境文件

为目标部署中的所有主机创建或修改 MinIO 服务器环境文件,以包含以下环境变量

在每个 MinIO 主机上的 MinIO 环境文件中添加以下行。有关基本 MinIO 环境文件的更详细说明,请参阅部署 MinIO:单节点单驱动器部署 MinIO:单节点多驱动器部署 MinIO:多节点多驱动器中的教程。

# Add these environment variables to the existing environment file

MINIO_KMS_KES_ENDPOINT=https://HOSTNAME:7373
MINIO_KMS_KES_API_KEY="kes:v1:ACTpAsNoaGf2Ow9o5gU8OmcaG6Af/VcZ1Mt7ysuKoBjv"

# Allows validation of the KES Server Certificate (Self-Signed or Third-Party CA)
# Change this path to the location of the KES CA Path
MINIO_KMS_KES_CAPATH=/opt/kes/certs/kes-server.cert

# Sets the default KMS key for the backend and SSE-KMS/SSE-S3 Operations)
MINIO_KMS_KES_KEY_NAME=minio-backend-default-key

HOSTNAME替换为 KES 服务器的 IP 地址或主机名。如果 MinIO 服务器主机无法解析或访问指定的HOSTNAME,则部署可能会返回错误或无法启动。

  • 如果使用单个 KES 服务器主机,请指定该主机的 IP 或主机名

  • 如果使用多个 KES 服务器主机,请指定每个主机的 IP 或主机名的逗号分隔列表

MinIO 使用MINIO_KMS_KES_KEY_NAME密钥执行以下加密操作

  • 加密 MinIO 后端(IAM、配置等)。

  • 如果请求未包含特定的EK,则使用SSE-KMS加密对象。

  • 使用SSE-S3加密对象。

MinIO 默认情况下期望此文件位于/etc/default/minio。如果您修改了部署以使用环境文件的其他位置,请修改该位置的文件。

3) 启动 MinIO

KES 操作需要未密封的保管库

根据您选择的 KMS 解决方案,您可能需要取消密封密钥实例以允许正常的加密操作,包括密钥创建或检索。KES 需要未密封的密钥目标才能执行其操作。

有关操作是否需要密封和取消密封实例的信息,请参阅您选择的 KMS 解决方案的文档

您必须在启动 MinIO *之前* 启动 KES。MinIO 部署需要在启动过程中访问 KES。

此步骤使用systemd启动和管理 MinIO 服务器进程

启动 MinIO 服务器

对于新的 MinIO 部署,请在每个 MinIO 主机上运行以下命令以启动服务

systemctl start minio

对于现有的 MinIO 部署,请在每个 MinIO 主机上运行以下命令以重新启动服务

systemctl reload minio
systemctl restart minio

4) 生成新的加密密钥

MinIO 要求EK在使用该密钥执行SSE操作*之前*存在于 KMS 上。使用kes key create*或*mc admin kms key create添加一个新的EK以用于SSE

以下命令使用mc admin kms key create命令添加一个新的外部密钥 (EK),该密钥存储在 KMS 服务器上,用于加密 MinIO 后端。

mc admin kms key create ALIAS KEYNAME

5) 为 Bucket 启用 SSE-KMS

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

通过在您首选的浏览器中导航到http://127.0.0.1:9001并使用指定给 MinIO 服务器的根凭据登录来打开 MinIO 控制台。如果您使用不同的控制台侦听端口部署了 MinIO,请将9001替换为该端口值。

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

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

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

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

以下命令

  • 为 MinIO 部署创建一个新的别名

  • 创建一个用于存储加密数据的新的 Bucket

  • 在该 Bucket 上启用 SSE-KMS 加密

mc alias set local http://127.0.0.1:9000 ROOTUSER ROOTPASSWORD

mc mb local/encryptedbucket
mc encrypt set SSE-KMS encrypted-bucket-key ALIAS/encryptedbucket

使用mc cp或任何具有PutObject功能的与 S3 兼容的 SDK 将文件写入 Bucket。然后,您可以对文件运行mc stat以确认关联的加密元数据。