使用具有客户提供的密钥的服务器端加密(SSE-C)
服务器端加密是为了保护静态数据。服务器端加密仅加密对象数据而非加密对象元数据。您可以在通用存储桶中使用具有客户提供密钥的服务器端加密(SSE-C),通过自己的加密密钥来加密数据。使用您作为请求的一部分提供的加密密钥,Amazon S3 在其写入磁盘时管理数据加密,并在您访问对象时管理数据解密。因此,您不需要维护任何代码来执行数据加密和解密。您只需管理您提供的加密密钥。
从 2026 年 4 月起,默认情况下,对所有新的通用存储桶和没有 SSE-C 加密对象的账户中的现有存储桶禁用 SSE-C。大多数现代工作负载使用具有 Amazon S3 托管式密钥(SSE-S3)或 AWS KMS 密钥(SSE-KMS)的服务器端加密,因为 SSE-C 要求您为每个请求提供加密密钥,这使得与其他对数据进行操作的用户、角色或 AWS 服务共享访问权限变为不切实际。要了解有关 SSE-KMS 的更多信息,请参阅使用具有 AWS KMS 密钥的服务器端加密(SSE-KMS)。
如果您的工作负载需要 SSE-C,则必须使用 PutBucketEncryption API 在存储桶的默认加密配置中将 BlockedEncryptionTypes 设置为 NONE,从而显式启用它。阻止 SSE-C 之后,任何指定 SSE-C 加密的 PutObject、CopyObject、PostObject、分段上传或复制请求都会遭到拒绝,并显示 HTTP 403 AccessDenied 错误。要了解更多信息,请参阅对通用存储桶阻止或取消阻止 SSE-C。
使用 SSE-C 没有额外费用。但是,配置和使用 SSE-C 的请求会产生标准的 Amazon S3 请求费用。有关定价的信息,请参阅 Amazon S3 定价
重要
Amazon Simple Storage Service 现在应用新的默认存储桶安全设置,该设置将对所有新的通用存储桶自动禁用具有客户提供密钥的服务器端加密(SSE-C)。2026 年 4 月,Amazon S3 部署了更新,因此,所有新的通用存储桶都将对所有新的写入请求禁用 SSE-C 加密。对于 AWS 账户中没有 SSE-C 加密对象的现有存储桶,Amazon S3 还对所有新的写入请求禁用了 SSE-C。通过这一更改,需要 SSE-C 加密的应用程序必须在创建新的存储桶后,专门使用 PutBucketEncryption API 操作启用 SSE-C。有关此更改的更多信息,请参阅新存储桶的默认 SSE-C 设置常见问题解答。
使用 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 存储的现有对象(例如,更改存储类别或添加元数据)。
-
默认情况下,对新存储桶阻止 SSE-C。在上传采用 SSE-C 加密的对象之前,必须使用
PutBucketEncryptionAPI 显式启用 SSE-C。有关更多信息,请参阅 对通用存储桶阻止或取消阻止 SSE-C。