使用客户端管理密钥的服务器端加密 (SSE-C)
MinIO 服务端加密(SSE)在写入操作过程中保护对象,使客户端能够利用服务器处理能力在存储层保护对象(静态加密)。SSE 还为安全锁定和擦除方面的法规与合规要求提供关键功能。
本页面的步骤配置并启用了客户端托管密钥的服务器端加密(SSE-C)。MinIO SSE-C 支持客户端驱动的对象加密之前将对象写入驱动器。客户端必须指定正确的密钥来解密对象以进行读取操作。
MinIO SSE-C 在功能上与 Amazon 兼容使用客户提供密钥的服务器端加密.
安全擦除与锁定
SSE-C 使用加密密钥来保护对象EK由客户端指定,作为写入操作的一部分。假设客户端密钥管理支持禁用或删除这些密钥:
- 禁用EK暂时锁定使用该密钥加密的任何对象
EK通过使它们无法读取。您稍后可以启用EK恢复对这些对象的正常读取操作。
- 删除EK渲染所有由该对象加密的对象EK
永久地unreadable. 如果客户端 KMS 不支持 备份EK这个过程是不可逆的.
单个的范围EK取决于指定的写入操作数量EK当请求 SSE-C 加密时。
注意事项
SSE-C with Replication
在 Server 版本中的变更:RELEASE.2024-03-30T09-41-56Z
使用 SSE-C 加密的对象可以通过站点复制或存储桶复制进行同步。 早期版本的 MinIO 对象存储不支持复制 SSE-C 加密对象。
使用 SSE-C 加密的压缩对象与 MinIO 不兼容。存储桶复制 or 站点复制使用SSE-KMS or SSE-S3确保加密对象与复制功能兼容。
SSE-C 覆盖 SSE-S3 和 SSE-KMS
快速入门
MinIO SSE-C 要求客户端执行所有密钥创建和存储操作。
此过程使用mc对源 MinIO 部署执行操作。
安装mc在可以访问源部署网络的机器上。
请参阅mc 安装快速入门有关下载和安装的说明mc.
SSE-C 密钥必须是一个 256 位原始编码字符串或十六进制编码字符串。 客户端应用程序负责生成和存储加密密钥。 MinIO 不不存储 SSE-C 加密密钥,并且在没有客户端管理的密钥时无法解密 SSE-C 加密的对象。
Note
MinIO Client 已添加对十六进制编码密钥的支持RELEASE.2024-06-20T14-50-54Z.
1) 生成加密密钥
生成256位base64原始编码字符串或十六进制编码字符串,用作加密密钥。
以下示例生成一个符合加密密钥要求的字符串。 生成的字符串适用于非生产环境:
cat /dev/urandom | head -c 32 | base64 -
请根据您所在组织的要求生成加密安全的加密密钥。
复制加密密钥以供下一步使用。
2) 使用 SSE-C 加密对象
MinIO 支持以下用于指定 SSE-C 加密的 AWS S3 标头:
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摘要。
MinIOmc命令行工具 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设置为AES256X-Amz-Copy-Source-Server-Side-Encryption-Key设置为加密密钥值。如果指定的密钥与用于SSE-C加密对象的密钥不匹配,复制操作将失败。X-Amz-Copy-Source-Server-Side-Encryption-Key-MD5设置为加密密钥的128位MD5摘要。
MinIOmc命令行工具 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随着alias您正在读取加密对象的 MinIO 部署的端点地址,以及要读取 SSE-C 加密对象的存储桶或存储桶前缀的完整路径。替换
TARGET/BUCKET随着aliasMinIO 部署的存储桶或存储桶前缀的完整路径,您将向其中写入 SSE-C 加密对象。