使用具有客户提供的密钥的服务器端加密(SSE-C)
服务器端加密是为了保护静态数据。服务器端加密仅加密对象数据而非加密对象元数据。您可以在通用存储桶中使用具有客户提供密钥的服务器端加密(SSE-C),通过自己的加密密钥来加密数据。使用您作为请求的一部分提供的加密密钥,Amazon S3 在其写入磁盘时管理数据加密,并在您访问对象时管理数据解密。因此,您不需要维护任何代码来执行数据加密和解密。您只需管理您提供的加密密钥。
Amazon S3 中的大多数现代化使用案例不再使用 SSE-C,因为相比具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)或具有 AWS KMS 密钥的服务器端加密(SSE-KMS),这种方法欠缺灵活性。SSE-C 要求您在每次与 SSE-C 加密数据交互时提供加密密钥,因此您无法通过与其他用户、角色或 AWS 服务共享 SSE-C 密钥来允许对方从您的 S3 存储桶读取数据以便操作数据。由于 AWS 广泛支持 SSE-KMS,大多数现代化工作负载都不使用 SSE-C 加密,因为此方法欠缺 SSE-KMS 的灵活性。要了解有关 SSE-KMS 的更多信息,请参阅使用具有 AWS KMS 密钥的服务器端加密(SSE-KMS)。
如果您想阻止对写入存储桶的对象使用 SSE-C 加密,则可以在更改存储桶的默认加密配置时阻止 SSE-C 加密。为通用存储桶阻止了 SSE-C 之后,任何指定 SSE-C 加密的 PutObject、CopyObject、PostObject、分段上传或复制请求都将被拒绝,并返回 HTTP 403 AccessDenied 错误。要了解有关阻止 SSE-C 的更多信息,请参阅对通用存储桶阻止或取消阻止 SSE-C。
使用 SSE-C 没有额外费用。但是,配置和使用 SSE-C 的请求会产生标准的 Amazon S3 请求费用。有关定价的信息,请参阅 Amazon S3 定价
重要
从 2026 年 4 月开始,AWS 将对所有新存储桶禁用具有客户提供密钥的服务器端加密(SSE-C)。此外,对于 AWS 账户中没有任何 SSE-C 加密数据的所有现有存储桶,都将禁用 SSE-C 加密。通过这些更改,少数需要 SSE-C 加密的应用程序必须在创建存储桶后,专门通过 PutBucketEncryption API 启用 SSE-C。在这些情况下,您可能需要更新自动化脚本、CloudFormation 模板或其他基础设施配置工具来配置这些设置。有关更多信息,请参阅 AWS Storage 博客文章
使用 SSE-C 之前的注意事项
-
当您使用 SSE-C 时,S3 从不存储加密密钥。每次您要让任何人从 S3 下载您的 SSE-C 加密数据时,都必须提供加密密钥。
-
您管理哪个加密密钥用于加密哪个对象的映射。您负责跟踪为哪个对象提供了哪个加密密钥。这还意味着,如果您丢失加密密钥,则会失去该对象。
-
因为您在客户端管理加密密钥,所以也要在客户端管理所有额外的保护措施,例如密钥轮换。
-
这种设计使您难以与其他用户、角色或 AWS 服务共享 SSE-C 密钥来操作您的数据。由于 AWS 广泛支持 SSE-KMS,大多数现代化工作负载都不使用 SSE-C,因为此方法欠缺 SSE-KMS 的灵活性。要了解有关 SSE-KMS 的更多信息,请参阅使用具有 AWS KMS 密钥的服务器端加密(SSE-KMS)。
-
这意味着 AWS 托管服务无法对使用 SSE-C 加密的对象进行本地解密。
-
-
在请求中指定 SSE-C 标头时,必须使用 HTTPS。
-
在使用 SSE-C 时,Amazon S3 会拒绝通过 HTTP 发出的所有请求。出于安全原因,我们建议您考虑您错误地通过 HTTP 发送的任何密钥都会遭泄露。丢弃该密钥,并根据需要轮换密钥。
-
-
如果您的存储桶启用了版本控制,则您上传的每个对象版本可能都具有自己的加密密钥。您负责跟踪哪个加密密钥用于哪个对象版本。
-
Amazon S3 控制台中不支持 SSE-C。您不能使用 Amazon S3 控制台上传对象和指定 SSE-C 加密。也不能使用控制台来更新使用 SSE-C 存储的现有对象(例如,更改存储类别或添加元数据)。