文档

使用客户管理密钥的服务器端加密 (SSE-C)

MinIO 服务器端加密 (SSE) 在写入操作中保护对象,允许客户端利用服务器处理能力在存储层 (静态加密) 加密对象。SSE 还为围绕安全锁定和擦除的监管和合规性要求提供关键功能。

本页上的过程配置并启用使用客户管理密钥的服务器端加密 (SSE-C)。MinIO SSE-C 支持在将对象写入驱动器之前对对象进行客户端驱动加密。客户端必须指定正确的密钥才能对对象进行读取操作解密。

MinIO SSE-C 在功能上与 Amazon 使用客户提供密钥的服务器端加密 兼容。

安全擦除和锁定

SSE-C 使用客户端在写入操作中指定的 EK 来保护对象。假设客户端密钥管理支持禁用或删除这些密钥

  • 禁用 EK 会暂时锁定使用该密钥加密的所有对象

    EK 使其不可读。您以后可以启用 EK 以恢复对这些对象的正常读取操作。

  • 删除 EK 会使该密钥加密的所有对象

    永久不可读。如果客户端 KMS 不支持 EK 的备份,则此过程是不可逆转的

单个 EK 的范围取决于指定该 EK 的写入操作数,以请求 SSE-C 加密。

注意事项

SSE-C 与复制

版本更改: RELEASE.2024-03-30T09-41-56Z

使用 SSE-C 加密的对象可以通过站点复制或存储桶复制进行复制。以前的 MinIO 对象存储版本没有复制 SSE-C 加密的对象。

压缩的 SSE-C 加密对象与 MinIO 存储桶复制站点复制 不兼容。使用 SSE-KMSSSE-S3 确保加密对象与复制兼容。

SSE-C 覆盖 SSE-S3 和 SSE-KMS

使用 SSE-C 加密对象会阻止 MinIO 对该对象应用 SSE-KMSSSE-S3 加密。

快速入门

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="
  • ALIAS 替换您想要写入 SSE-C 加密对象的 MinIO 部署的 alias

  • 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 部署的 alias,以及您想要从中读取 SSE-C 加密对象的存储桶或存储桶前缀的完整路径。

  • TARGET/BUCKET 替换您正在写入加密对象的 MinIO 部署的 alias,以及您想要写入 SSE-C 加密对象的存储桶或存储桶前缀的完整路径。