使用具有客户提供的密钥的服务器端加密(SSE-C) - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用具有客户提供的密钥的服务器端加密(SSE-C)

服务器端加密是为了保护静态数据。服务器端加密仅加密对象数据而非加密对象元数据。您可以在通用存储桶中使用具有客户提供密钥的服务器端加密(SSE-C),通过自己的加密密钥来加密数据。使用您作为请求的一部分提供的加密密钥,Amazon S3 在其写入磁盘时管理数据加密,并在您访问对象时管理数据解密。因此,您不需要维护任何代码来执行数据加密和解密。您只需管理您提供的加密密钥。

Amazon S3 中的大多数现代化使用案例不再使用 SSE-C,因为相比具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)或具有 Amazon KMS 密钥的服务器端加密(SSE-KMS),这种方法欠缺灵活性。SSE-C 要求您在每次与 SSE-C 加密数据交互时提供加密密钥,因此您无法通过与其他用户、角色或 Amazon 服务共享 SSE-C 密钥来允许对方从您的 S3 存储桶读取数据以便操作数据。由于 Amazon 广泛支持 SSE-KMS,大多数现代化工作负载都不使用 SSE-C 加密,因为此方法欠缺 SSE-KMS 的灵活性。要了解有关 SSE-KMS 的更多信息,请参阅使用具有 Amazon KMS 密钥的服务器端加密(SSE-KMS)

如果您想阻止对写入存储桶的对象使用 SSE-C 加密,则可以在更改存储桶的默认加密配置时阻止 SSE-C 加密。为通用存储桶阻止了 SSE-C 之后,任何指定 SSE-C 加密的 PutObjectCopyObjectPostObject、分段上传或复制请求都将被拒绝,并返回 HTTP 403 AccessDenied 错误。要了解有关阻止 SSE-C 的更多信息,请参阅对通用存储桶阻止或取消阻止 SSE-C

使用 SSE-C 没有额外费用。但是,配置和使用 SSE-C 的请求会产生标准的 Amazon S3 请求费用。有关定价的信息,请参阅 Amazon S3 定价

重要

从 2026 年 4 月开始,Amazon 将对所有新存储桶禁用具有客户提供密钥的服务器端加密(SSE-C)。此外,对于 Amazon Web Services 账户中没有任何 SSE-C 加密数据的所有现有存储桶,都将禁用 SSE-C 加密。通过这些更改,少数需要 SSE-C 加密的应用程序必须在创建存储桶后,专门通过 PutBucketEncryption API 启用 SSE-C。在这些情况下,您可能需要更新自动化脚本、Amazon CloudFormation 模板或其他基础设施配置工具来配置这些设置。有关更多信息,请参阅 Amazon Storage 博客文章

使用 SSE-C 之前的注意事项

  • 当您使用 SSE-C 时,S3 从不存储加密密钥。每次您要让任何人从 S3 下载您的 SSE-C 加密数据时,都必须提供加密密钥。

    • 您管理哪个加密密钥用于加密哪个对象的映射。您负责跟踪为哪个对象提供了哪个加密密钥。这还意味着,如果您丢失加密密钥,则会失去该对象。

    • 因为您在客户端管理加密密钥,所以也要在客户端管理所有额外的保护措施,例如密钥轮换。

    • 这种设计使您难以与其他用户、角色或 Amazon 服务共享 SSE-C 密钥来操作您的数据。由于 Amazon 广泛支持 SSE-KMS,大多数现代化工作负载都不使用 SSE-C,因为此方法欠缺 SSE-KMS 的灵活性。要了解有关 SSE-KMS 的更多信息,请参阅使用具有 Amazon KMS 密钥的服务器端加密(SSE-KMS)

    • 这意味着 Amazon 托管服务无法对使用 SSE-C 加密的对象进行本地解密。

  • 在请求中指定 SSE-C 标头时,必须使用 HTTPS。

    • 在使用 SSE-C 时,Amazon S3 会拒绝通过 HTTP 发出的所有请求。出于安全原因,我们建议您考虑您错误地通过 HTTP 发送的任何密钥都会遭泄露。丢弃该密钥,并根据需要轮换密钥。

  • 如果您的存储桶启用了版本控制,则您上传的每个对象版本可能都具有自己的加密密钥。您负责跟踪哪个加密密钥用于哪个对象版本。

  • Amazon S3 控制台中不支持 SSE-C。您不能使用 Amazon S3 控制台上传对象和指定 SSE-C 加密。也不能使用控制台来更新使用 SSE-C 存储的现有对象(例如,更改存储类别或添加元数据)。