文档

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

此过程假定一台本地主机运行 MinIO 和 KES 进程。有关运行 KES 的说明,请参阅 KES 文档

注意

对于生产环境的编排环境,请使用 MinIO Kubernetes 运算符部署启用 SSE 且配置为与您的 KMS 一起使用的租户。

对于生产环境的裸机环境,请参阅 MinIO on Linux 文档,了解有关使用 KES 和您的 KMS 配置 MinIO 的教程。

作为此过程的一部分,您将

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

  2. 单节点单驱动器模式 下部署 MinIO 服务器,配置为使用 KES 容器来支持 SSE

  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 解决方案的文档。

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

部署或确保能够访问 MinIO 部署

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

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

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

对于现有的 MinIO 部署,您可以修改现有的环境文件并按照此过程中的说明重新启动部署。

使用服务器端加密部署 MinIO 和 KES

在开始这些步骤之前,请创建以下文件夹

New-Item -Path "C:\minio-kes-vault\certs" -ItemType "directory"
New-Item -Path "C:\minio-kes-vault\config" -ItemType "directory"
New-Item -Path "C:\minio-kes-vault\minio" -ItemType "directory"

先决条件

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

1) 创建 MinIO 配置

创建 MinIO 环境文件

使用您喜欢的文本编辑器创建环境文件。以下示例使用 Windows 记事本程序

notepad C:\minio-kes-vault\config\minio

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

此命令假设minio-kes.certminio-kes.keykes-server.cert证书可在指定位置访问

# Add these environment variables to the existing environment file

MINIO_KMS_KES_ENDPOINT=https://127.0.0.1:7373
MINIO_KMS_KES_API_KEY=<API-key-identity-string-from-KES>
MINIO_KMS_KES_CAPATH=C:\minio-kes-vault\certs\kes-server.cert
MINIO_KMS_KES_KEY_NAME=minio-backend-default-key

注意

  • API 密钥是与 KES 服务器进行身份验证的首选方式,因为它为 KES 服务器提供了简化且安全的身份验证流程。

  • 或者,指定MINIO_KMS_KES_KEY_FILEMINIO_KMS_KES_CERT_FILE,而不是MINIO_KMS_KES_API_KEY.

    API 密钥与基于证书的身份验证互斥。指定API 密钥变量密钥文件和证书文件变量中的一个

  • 本网站上的文档使用 API 密钥。

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

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

  • 使用SSE-KMS加密对象(如果请求不包含特定EK)。

  • 使用SSE-S3加密对象。

minio-kes证书仅在 MinIO 部署和 KES 服务器之间启用 mTLS。它们不会以其他方式为其他客户端连接到 MinIO 启用 TLS。

2) 启动 MinIO 服务器

注意

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

启动 MinIO 服务器

在终端或 shell 中运行以下命令,将 MinIO 服务器作为前台进程启动。

export MINIO_CONFIG_ENV_FILE=C:\minio-kes-vault\config\config\minio
C:\minio.exe server --console-address :9001

3) 生成新的加密密钥

MinIO 要求在执行使用该密钥的SSE操作之前EK 存在于根 KMS 上。使用kes key createmc admin kms key create创建新的EK,以用于SSE

以下命令使用kes key create命令在根 KMS 服务器上创建一个新的外部密钥 (EK),用于加密 MinIO 后端。

export KES_SERVER=https://127.0.0.1:7373
export KES_CLIENT_KEY=C:\minio-kes-vault\certs\minio-kes.key
export KES_CLIENT_CERT=C:\minio-kes-vault\certs\minio-kes.cert

C:\kes.exe key create -k encrypted-bucket-key

4) 为存储桶启用 SSE-KMS

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

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

登录后,创建一个新的存储桶并将其命名为您喜欢的方式。选择齿轮图标打开管理视图。

选择铅笔图标在加密字段旁边打开用于配置存储桶默认 SSE 方案的模态。

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

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

以下命令

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

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

  • 在该存储桶上启用 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 将文件写入存储桶。然后,您可以对该文件运行mc stat以确认关联的加密元数据。