Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用具有 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 保护数据

服务器端加密可保护静态数据。使用 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 采用了多因素强加密。Amazon S3 使用唯一的密钥来加密每个对象。作为额外的保护,它将使用定期轮换的主密钥对密钥本身进行加密。Amazon S3 服务器端加密使用可用的最强数据块密码之一 (即 256 位高级加密标准 (AES-256)) 来加密您的数据。

如果需要对存储在存储桶中的所有对象执行服务器端加密,请使用存储桶策略。例如,以下存储桶策略拒绝上传对象的权限,除非请求包含用于请求服务器端加密的 x-amz-server-side-encryption 标头:

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [ { "Sid": "DenyIncorrectEncryptionHeader", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws-cn:s3:::YourBucket/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" } } }, { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws-cn:s3:::YourBucket/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption": "true" } } } ] }

服务器端加密仅加密对象数据而不是对象元数据。

服务器端加密的 API 支持

要使用对象创建 REST API 请求服务器端加密,请提供 x-amz-server-side-encryption 请求标头。有关 REST API 的信息,请参阅使用 REST API 指定服务器端加密

以下 Amazon S3 API 支持此标头:

  • PUT 操作 - 在使用 PUT API 上传数据时指定请求标头。有关更多信息,请参阅 PUT Object

  • 启动分段上传 - 当使用分段上传 API 上传大型对象时,在启动请求中指定标头。有关更多信息,请参阅启动分段上传

  • COPY 操作 - 在复制对象时,您同时具有源对象和目标对象。有关更多信息,请参阅 PUT 对象 - Copy

注意

当使用 POST 操作上传对象时,请在表单字段中提供相同的信息,而不是提供请求标头。有关更多信息,请参阅 POST Object

AWS 开发工具包还提供了一个可用于请求服务器端加密的包装程序 API。您还可以使用 AWS 管理控制台来上传对象并请求服务器端加密。

注意

对于使用预签名 URL 上传的对象,无法强制执行 SSE-S3 加密。只能使用 AWS 管理控制台或 HTTP 请求标头指定服务器端加密。有关更多信息,请参阅 在策略中指定条件