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

欢迎使用新的 Amazon S3 用户指南! Amazon S3 用户指南结合了以下三个已停用的指南中的信息和说明:Amazon S3 开发人员指南Amazon S3 控制台用户指南Amazon S3 入门指南

通过使用客户提供的加密密钥的服务器端加密 (SSE-C) 保护数据

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

在您上传对象时,Amazon S3 将使用您提供的加密密钥对您的数据应用 AES-256 加密并从内存中移除加密密钥。在检索对象时,必须提供相同的加密密钥作为您请求的一部分。Amazon S3 在将对象数据返回给您之前,会首先验证您提供的加密密钥是否匹配,然后再解密对象。

将服务器端加密与客户提供的加密密钥 (SSE-C) 结合使用不会产生新的费用。但是,配置和使用 SSE-C 的请求会产生标准的 Amazon S3 请求费用。有关定价的信息,请参阅 Amazon S3 定价

重要

Amazon S3 不存储您提供的加密密钥,而是存储加密密钥添加了随机数据的 HMAC 值来验证未来的请求。无法使用添加了随机数据的 HMAC 值来推导出加密密钥的值或解密加密对象的内容。这意味着,如果您丢失加密密钥,则会失去该对象。

SSE-C 概览

本部分提供 SSE-C 的概述:

  • 您必须使用 HTTPS。

    重要

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

  • 响应中的 ETag 不是对象数据的 MD5。

  • 您管理哪个加密密钥用于加密哪个对象的映射。Amazon S3 不存储加密密钥。您负责跟踪为哪个对象提供了哪个加密密钥。

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

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

    警告

    如果您丢失加密密钥,则针对某个对象的没有其加密密钥的任何 GET 请求都会失败,并且您将失去该对象。