中文文档

服务器端加密与客户端管理密钥(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-KMSSSE-S3 来确保加密的对象与复制兼容。

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

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

快速开始

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加密对象的完整存储桶 或存储桶前缀 路径。

Join Slack 商业支持购买咨询