使用客户端管理密钥的服务器端加密 (SSE-C)
MinIO 服务器端加密 (SSE) 在写入操作的一部分中保护对象,允许客户端利用服务器处理能力在存储层(静态加密)保护对象。SSE 还为围绕安全锁定和擦除的监管和合规性要求提供关键功能。
此页面上的过程配置并启用使用客户端管理密钥的服务器端加密 (SSE-C)。MinIO SSE-C 支持在写入对象到驱动器之前,由客户端驱动的对象加密。客户端必须指定正确的密钥才能解密读取操作的对象。
MinIO SSE-C 在功能上与 Amazon 使用客户提供的密钥的服务器端加密 兼容。
安全擦除和锁定
SSE-C 使用客户端作为写入操作的一部分指定的EK来保护对象。假设客户端密钥管理支持禁用或删除这些密钥
- 禁用EK会暂时锁定使用该密钥加密的任何对象
EK,使其无法读取。您可以稍后启用EK以恢复对这些对象的正常读取操作。
- 删除EK会使所有使用该EK加密的对象
永久无法读取。如果客户端 KMS 不支持EK的备份,则此过程是不可逆的。
单个EK的范围取决于请求 SSE-C 加密时指定该EK的写入操作数量。
注意事项
带复制的 SSE-C
版本变更于服务器: RELEASE.2024-03-30T09-41-56Z
使用 SSE-C 加密的对象可以通过站点复制或存储桶复制进行复制。以前的 MinIO 对象存储版本不复制 SSE-C 加密的对象。
已压缩的 SSE-C 加密对象与 MinIO 存储桶复制 或 站点复制 不兼容。使用 SSE-KMS 或 SSE-S3 以确保加密对象与复制兼容。
SSE-C 覆盖 SSE-S3 和 SSE-KMS
快速入门
MinIO SSE-C 要求客户端执行所有密钥创建和存储操作。
此过程使用 mc
对源 MinIO 部署执行操作。在具有网络访问源部署的机器上安装 mc
。有关下载和安装 mc
的说明,请参阅 mc
安装快速入门。
SSE-C 密钥**必须**是 256 位原始编码字符串或十六进制编码字符串。客户端应用程序负责生成和存储加密密钥。MinIO**不**存储 SSE-C 加密密钥,并且无法在没有客户端管理的密钥的情况下解密 SSE-C 加密的对象。
注意
对十六进制编码密钥的支持已添加到 MinIO 客户端 RELEASE.2024-06-20T14-50-54Z
中。
1) 生成加密密钥
生成 256 位 base64 原始编码字符串或十六进制编码字符串以用作加密密钥。
以下示例生成满足加密密钥要求的字符串。生成的字符串适用于非生产环境
cat /dev/urandom | head -c 32 | base64 -
遵循您组织生成密码学安全的加密密钥的要求。
复制加密密钥以在下一步中使用。
2) 使用 SSE-C 加密对象
MinIO 支持以下 AWS S3 标头以指定 SSE-C 加密
X-Amz-Server-Side-Encryption-Customer-Algorithm
设置为AES256
。X-Amz-Server-Side-Encryption-Customer-Key
设置为加密密钥值。X-Amz-Server-Side-Encryption-Customer-Key-MD5
设置为加密密钥的 128 位 MD5 摘要。
MinIO mc
命令行工具和 S3 兼容 SDK 包括设置标头的特定语法。某些 mc
命令(如 mc cp
)包括启用 SSE-S3 加密的特定参数
mc cp ~/data/mydata.json ALIAS/BUCKET/mydata.json \
--encrypt-key "ALIAS/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo="
3) 复制 SSE-C 加密对象
MinIO 支持以下 AWS S3 标头以将 SSE-C 加密对象复制到另一个 S3 兼容服务
X-Amz-Copy-Source-Server-Side-Encryption-Algorithm
设置为AES256
X-Amz-Copy-Source-Server-Side-Encryption-Key
设置为加密密钥值。如果指定的密钥与用于 SSE-C 加密对象的密钥不匹配,则复制操作将失败。X-Amz-Copy-Source-Server-Side-Encryption-Key-MD5
设置为加密密钥的 128 位 MD5 摘要。
MinIO mc
命令行工具和 S3 兼容 SDK 包括设置标头的特定语法。某些 mc
命令(如 mc cp
)包括启用 SSE-S3 加密的特定参数
mc cp SOURCE/BUCKET/mydata.json TARGET/BUCKET/mydata.json \
--encrypt-key "SOURCE/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo=,TARGET/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo="
将
SOURCE/BUCKET
替换为您正在从中读取加密对象的 MinIO 部署的别名
以及您要从中读取 SSE-C 加密对象的存储桶或存储桶前缀的完整路径。将
TARGET/BUCKET
替换为您正在向其写入加密对象的 MinIO 部署的别名
以及您要向其写入 SSE-C 加密对象的存储桶或存储桶前缀的完整路径。