服务器端加密与客户端管理密钥(SSE-C)
MinIO服务器端加密(SSE)作为写操作的一部分保护对象,使客户端能够利用服务器处理能力在存储层对对象进行安全保护(加密在静止状态)。 SSE还为合规性要求和安全锁定和删除提供了关键功能。
本页上的程序配置并启用了服务器端加密 客户端管理密钥(SSE-C)。 MinIO 的 SSE-C 支持在将 对象写入驱动器 之前 由客户端驱动的对象加密。 客户端必须指定正确的密钥以解密读取操作中的对象。
MinIO SSE-C 在功能上与 Amazon S3 兼容 Server-Side Encryption with Customer-Provided Keys.
安全 Erasure 和锁定
SSE-C 使用客户端在写操作中指定的 EK 来 保护对象。 假设客户端密钥管理支持禁用或 删除这些密钥:
- 禁用 EK 会使使用该 EK 加密的所有对象暂时锁定,
导致它们无法读取。 之后,您可以启用 EK 以 恢复对那些对象的正常读取操作。
- 删除 EK 会使得所有使用该 EK 加密的对象
永久性 地无法读取。 如果客户端密钥管理服务(KMS)不支持 EK 的备份,这个过程将是 不可逆的。
单个 EK 的作用域取决于在请求 SSE-C 加密时 指定该 EK 的写操作数量。
考虑因素
具有复制功能的 SSE-C
在 Server 版本发生变更: 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
Installation Quickstart。
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="
将
ALIAS
替换为 MinIO部署的alias
, 您希望在此部署上写入 SSE-C加密的对象。将
BUCKET
替换为要写入 SSE-C加密对象的完整桶路径或桶前缀。
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加密对象的完整存储桶 或存储桶前缀 路径。