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

S3 存储桶的 Amazon S3 默认加密

Amazon S3 默认加密提供了一种方法来设置 S3 存储桶的默认加密行为。您可以对存储桶设置默认加密,以便在存储桶中存储所有对象时对这些对象进行加密。这些对象使用 Amazon S3 托管密钥 (SSE-S3) 或 AWS KMS 托管密钥 (SSE-KMS) 通过服务器端加密进行加密。

在使用服务器端加密时,Amazon S3 在将对象保存到其数据中心的磁盘上之前对其进行加密,并在下载对象时对其进行解密。有关使用服务器端加密和加密密钥管理来保护数据的更多信息,请参阅使用加密保护数据

默认加密适用于所有现有的和新的 S3 存储桶。如果没有默认加密,要对存储在存储桶中的所有对象进行加密,您必须包括加密信息与每个对象存储请求。您还必须设置 S3 存储桶策略以拒绝不包含加密信息的存储请求。

对 S3 存储桶使用默认加密不会产生新的费用。请求配置默认加密功能会产生标准 Amazon S3 请求费用。有关定价的信息,请参阅 Amazon S3 定价。对于 SSE-KMS 加密密钥存储,将会产生 AWS Key Management Service 费用,这些费用在 AWS KMS 定价中列出。

如何为 S3 存储桶设置 Amazon S3 默认加密?

此部分介绍如何设置 Amazon S3 默认加密。您可以使用 AWS 开发工具包、Amazon S3 REST API、AWS Command Line Interface (AWS CLI) 或 Amazon S3 控制台启用默认加密。为 S3 存储桶设置默认加密的最简单方式是使用 AWS 管理控制台。

您可以使用以下任一方法来对存储桶设置默认加密:

在为存储桶启用默认加密后,将会应用以下加密行为:

  • 在启用默认加密之前,存储桶中已存在的对象的加密没有变化。

  • 在启用默认加密后上传对象时:

    • 如果您的 PUT 请求标头不包含加密信息,则 Amazon S3 将使用存储桶的默认加密设置来加密对象。

    • 如果您的 PUT 请求标头包含加密信息,则 Amazon S3 将使用 PUT 请求中的加密信息加密对象,然后再将对象存储在 Amazon S3 中。如果 PUT 成功,则响应为 HTTP/1.1 200 OK,并且响应标头中包含加密信息。有关更多信息,请参阅 PUT Object

  • 如果您将 SSE-KMS 选项用于默认加密配置,则您将受到 AWS KMS 的 RPS (每秒请求数) 限制。有关 AWS KMS 限制以及如何请求提高限制的更多信息,请参阅 AWS KMS 限制

从使用存储桶策略执行加密转至默认加密

如果您当前使用存储桶策略拒绝不带加密标头的 PUT 请求来对 S3 存储桶实施对象加密,建议您使用以下过程以开始使用默认加密。

从使用存储桶策略拒绝不带加密标头的 PUT 请求变为使用默认加密

  1. 如果您计划指定使用 SSE-KMS 的默认加密,请确保使用签名版本 4 对所有 PUTGET 对象请求进行签名并通过 SSL 连接发送给 Amazon S3。有关使用 AWS KMS 的信息,请参阅 使用具有 AWS KMS 托管密钥的服务器端加密 (SSE-KMS) 保护数据

    注意

    默认情况下,对于 Amazon S3 控制台、AWS CLI 版本 1.11.108 及更高版本以及 2016 年 5 月之后发布的所有 AWS 开发工具包,将使用通过 SSL 连接发送给 Amazon S3 的由签名版本 4 签名的请求。

  2. 删除拒绝不带加密标头的 PUT 请求的存储桶策略声明。(建议您保存要替换的存储桶策略的备份副本。)

  3. 要确保将加密行为设置为所需行为,可测试多个 PUT 请求以准确模拟实际工作负载。

  4. 如果您将默认加密用于 SSE-KMS,则监视您的客户端是否有在您更改前未失败但现在失败的 PUTGET 请求。最可能的情况是,有一些您未按照步骤 1 更新的请求。将失败的 PUTGET 请求更改为使用 AWS 签名版本 4 进行签名并通过 SSL 发送。

在为 S3 存储桶启用默认加密后,对于通过任何不带加密标头的 PUT 请求存储在 Amazon S3 中的对象,将使用存储桶级别的默认加密设置进行加密。

将默认加密用于跨区域复制

在为跨区域复制目标存储桶启用默认加密后,将应用以下加密行为:

  • 如果未对源存储桶中的对象进行加密,则将使用目标存储桶的默认加密设置对目标存储桶中的副本对象进行加密。这将导致源对象的 ETag 与副本对象的 ETag 不同。您必须更新使用 ETag 的应用程序以应对这种差异。

  • 如果使用 SSE-S3 或 SSE-KMS 对源存储桶中的对象进行加密,则目标存储桶中的副本对象将使用与源对象加密相同的加密。不会使用目标存储桶的默认加密设置。

使用 CloudTrail 和 CloudWatch 监控默认加密

您可以通过 AWS CloudTrail 事件跟踪默认加密配置请求。CloudTrail 日志中使用的 API 事件名称为 PutBucketEncryptionGetBucketEncryptionDeleteBucketEncryption。您也可以使用 S3 存储桶级别操作作为事件类型来创建 Amazon CloudWatch Events。有关 CloudTrail 事件的更多信息,请参阅如何使用 CloudWatch 数据事件为 S3 存储桶启用对象级别日志记录?

您可以为对象级别的 Amazon S3 操作使用 CloudTrail 日志,来跟踪向 Amazon S3 发出的 PUTPOST 请求,以验证在传入 PUT 请求不包含加密标头时是否使用默认加密来加密对象。

在 Amazon S3 使用默认加密设置来加密对象时,日志将包含以下字段作为名称/值对:"SSEApplied":"Default_SSE_S3" or "SSEApplied":"Default_SSE_KMS"

在 Amazon S3 使用 PUT 加密标头来加密对象时,日志将包含以下字段作为名称/值对:"SSEApplied":"SSE_S3", "SSEApplied":"SSE_KMS"SSEApplied":"SSE_C"。对于分段上传,该信息包含在 InitiateMultipartUpload API 请求中。有关使用 CloudTrail 和 CloudWatch 的更多信息,请参阅监控 Amazon S3