S3 存储桶的 Amazon S3 默认加密 - Amazon Simple Storage Service

S3 存储桶的 Amazon S3 默认加密

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

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

有关默认加密所需的权限的更多信息,请参阅 Amazon Simple Storage Service API Reference 中的 PutBucketEncryption

如何为 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 中。

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

要通过单个请求加密现有 Amazon S3 对象,可以使用 Amazon S3 批处理操作。您为 S3 批量操作提供要操作的对象的列表,批量操作调用相应的 API 来执行指定的操作。您可以使用复制操作复制现有的未加密对象,并将新的加密对象写入同一存储桶。单个批量操作作业可对数十亿个包含 EB 级数据的对象执行指定操作。有关更多信息,请参阅执行 S3 批量操作

还可以使用复制对象 API 对现有对象进行加密。有关更多信息,请参阅使用 AWS CLI 加密现有 Amazon S3 对象

注意

使用 SSE-KMS 进行默认存储桶加密的 Amazon S3 存储桶不能用作 Amazon S3 服务器访问日志记录 的目标存储桶。对于服务器访问日志目标存储桶,仅支持 SSE-S3 默认加密。

使用加密进行跨账户操作

在对跨账户操作使用加密时,请注意以下事项:

  • 当未在请求时提供 CMK ARN 或别名,也未通过存储桶的默认加密配置提供它们时,使用 AWS 托管 CMK (aws/s3)。

  • 如果您使用您的 CMK 所在的相同 AWS 账户中的 AWS Identity and Access Management (IAM) 委托人上传或访问 S3 对象,则可以使用 AWS 托管 CMK (aws/s3)。

  • 如果您希望授予对 S3 对象的跨账户访问权限,请使用客户托管 CMK。您可以配置客户托管 CMK 的策略,以便允许从其他账户进行访问。

  • 如果指定您自己的 CMK,则应使用完全限定的 CMK 密钥 ARN。使用 CMK 别名时,请注意 KMS 将解析请求者账户中的密钥。这可能导致使用属于请求者而不是存储桶管理员的 CMK 来加密数据。

  • 您必须指定您(请求者)已被授予 Encrypt 权限的密钥。有关详细信息,请参阅允许密钥用户使用 CMK 进行加密操作

有关何时使用客户托管 CMK 和 AWS 托管 CMK 的更多信息,请参阅使用 AWS AWS KMS 托管密钥或自定义 AWS AWS KMS 密钥加密 Amazon S3 上的对象

将默认加密用于复制

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

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

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

有关使用 SSE-KMS 进行默认加密的更多信息,请参阅复制加密对象

使用 CloudTrail 和 CloudWatch 监控默认加密

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