

# 为 Amazon S3 存储桶设置默认服务器端加密行为
<a name="bucket-encryption"></a>

**重要**  
Amazon S3 现在将具有 Amazon S3 托管密钥的服务器端加密（SSE-S3）作为 Amazon S3 中每个存储桶的基本加密级别。从 2023 年 1 月 5 日起，上传到 Amazon S3 的所有新对象都将自动加密，不会产生额外费用，也不会影响性能。S3 存储桶默认加密配置和上传的新对象的自动加密状态可在 CloudTrail 日志、S3 清单、S3 Storage Lens 存储统计管理工具和 Amazon S3 控制台中查看，并可用作 Amazon CLI 和 Amazon SDK 中的附加 Amazon S3 API 响应标头。有关更多信息，请参阅[默认加密常见问题解答](https://docs.amazonaws.cn/AmazonS3/latest/userguide/default-encryption-faq.html)。

默认情况下，所有 Amazon S3 存储桶都配置了加密，并且通过具有 Amazon S3 托管密钥的服务器端加密（SSE-S3）来自动加密对象。此加密设置适用于 Amazon S3 存储桶中的所有对象。

如果您需要对密钥进行更多控制，例如管理密钥轮换和访问策略授予，则可以选择使用具有 Amazon Key Management Service（Amazon KMS）密钥的服务器端加密（SSE-KMS），或具有 Amazon KMS 密钥的双层服务器端加密（DSSE-KMS）。有关编辑 KMS 密钥的更多信息，请参阅《Amazon Key Management Service 开发人员指南》**中的[编辑密钥](https://docs.amazonaws.cn/kms/latest/developerguide/editing-keys.html)。

**注意**  
我们已更改存储桶，以自动加密新上传的对象。如果您之前创建的存储桶没有默认加密，则 Amazon S3 在默认情况下将使用 SSE-S3 为存储桶启用加密。对于已配置 SSE-S3 或 SSE-KMS 的现有存储桶的默认加密配置，不会进行任何更改。如果您想使用 SSE-KMS 加密您的对象，则必须在存储桶设置中更改加密类型。有关更多信息，请参阅 [使用具有 Amazon KMS 密钥的服务器端加密（SSE-KMS）](UsingKMSEncryption.md)。

当您将存储桶配置为使用 SSE-KMS 的默认加密时，您还可以启用 S3 存储桶密钥，以减少从 Amazon S3 到 Amazon KMS 的请求流量并降低加密成本。有关更多信息，请参阅 [使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本](bucket-key.md)。

要识别已启用 SSE-KMS 进行默认加密的存储桶，您可以使用 Amazon S3 Storage Lens 存储统计管理工具指标。S3 Storage Lens 存储统计管理工具是一项云存储分析功能，您可以使用它在整个组织范围内了解对象存储的使用情况和活动。有关更多信息，请参阅[使用 S3 Storage Lens 存储统计管理工具保护您的数据](https://docs.amazonaws.cn/AmazonS3/latest/userguide/storage-lens-data-protection.html?icmpid=docs_s3_user_guide_bucket-encryption.html)。

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

有关默认加密所需的权限的更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutBucketEncryption.html)。

您可以使用 Amazon S3 控制台、Amazon SDK、Amazon S3 REST API 和 Amazon 命令行界面（Amazon CLI）为 S3 存储桶配置 Amazon S3 默认加密行为。

**加密现有对象**  
要加密现有未加密的 Amazon S3 对象，可以使用 Amazon S3 批量操作。您为 S3 批量操作提供了要操作的对象列表，而批量操作调用相应的 API 来执行指定的操作。您可以使用[批量操作复制操作](https://docs.amazonaws.cn/AmazonS3/latest/userguide/batch-ops-copy-object.html)复制现有的未加密对象，并将其作为加密对象写回同一存储桶。单个批量操作作业可对数十亿个对象执行指定操作。有关更多信息，请参阅 [使用批量操作批量执行对象操作](batch-ops.md) 和 *Amazon 存储博客*的博客文章：[使用 Amazon S3 批量操作加密对象](https://www.amazonaws.cn/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/)。

也可以使用 `CopyObject` API 操作或 `copy-object` Amazon CLI 命令加密现有对象。有关更多信息，请参阅 *Amazon 存储博客*的博客文章：[使用 Amazon CLI 加密现有 Amazon S3 对象](https://www.amazonaws.cn/blogs/storage/encrypting-existing-amazon-s3-objects-with-the-aws-cli/)。

**注意**  
将默认存储桶加密设置为 SSE-KMS 的 Amazon S3 存储桶不能用作 [使用服务器访问日志记录来记录请求](ServerLogs.md) 的目标存储桶。对于服务器访问日志目标存储桶，仅支持 SSE-S3 默认加密。

## 使用 SSE-KMS 加密进行跨账户操作
<a name="bucket-encryption-update-bucket-policy"></a>

在对跨账户操作使用加密时，请注意以下事项：
+ 如果未在请求时提供 Amazon KMS key Amazon 资源名称（ARN）或别名，也未通过存储桶的默认加密配置提供它们时，则使用 Amazon 托管式密钥（`aws/s3`）。
+ 如果您使用您的 KMS 密钥所在的相同 Amazon Web Services 账户中的 Amazon Identity and Access Management（IAM）主体上传或访问 S3 对象，则可以使用 Amazon 托管式密钥（`aws/s3`）。
+ 如果您希望授予对 S3 对象的跨账户访问权限，请使用客户自主管理型密钥。您可以配置客户托管式密钥的策略，以便允许从其他账户进行访问。
+ 如果您指定客户托管式 KMS 密钥，我们建议您使用完全限定的 KMS 密钥 ARN。如果您改为使用 KMS 密钥别名，Amazon KMS 将解析请求者账户中的密钥。这一行为可能导致使用属于请求者而不是存储桶拥有者的 KMS 密钥来加密数据。
+ 您必须指定您（请求者）已被授予 `Encrypt` 权限的密钥。有关更多信息，请参阅《Amazon Key Management Service 开发人员指南》**中的[允许密钥用户使用 KMS 密钥进行加密操作](https://docs.amazonaws.cn/kms/latest/developerguide/key-policies.html#key-policy-users-crypto)。

有关何时使用客户自主管理型密钥和 Amazon KMS 托管密钥的更多信息，请参阅[我是应使用 Amazon 托管式密钥 还是使用客户自主管理型密钥来加密 Amazon S3 中的对象？](https://www.amazonaws.cn/premiumsupport/knowledge-center/s3-object-encryption-keys/)

## 将默认加密用于复制
<a name="bucket-encryption-replication"></a>

在为复制目标存储桶启用默认加密后，将应用以下加密行为：
+ 如果未对源存储桶中的对象进行加密，则将使用目标存储桶的默认加密设置对目标存储桶中的副本对象进行加密。因此，源对象的实体标签（ETag）与副本对象的 ETag 不同。如果您有使用 ETag 的应用程序，则必须更新这些应用程序以弥补这种差异。
+ 如果使用具有 Amazon S3 托管密钥的服务器端加密（SSE-S3）、具有 Amazon Key Management Service（Amazon KMS）密钥的服务器端加密（SSE-KMS）或具有 Amazon KMS 密钥的双层服务器端加密（DSSE-KMS）来加密源存储桶中的对象，则目标存储桶中的副本对象使用与源对象相同类型的加密。不会使用目标存储桶的默认加密设置。

有关使用 SSE-KMS 进行默认加密的更多信息，请参阅[复制加密对象](replication-config-for-kms-objects.md)。

## 将 Amazon S3 存储桶密钥用于默认加密
<a name="bucket-key-default-encryption"></a>

当将存储桶配置为使用 SSE-KMS 作为新对象的默认加密行为时，还可以配置 S3 存储桶密钥。S3 存储桶密钥可减少从 Amazon S3 到 Amazon KMS 的事务数量，从而降低 SSE-KMS 的成本。

当您将存储桶配置为使用 S3 存储桶密钥对新对象进行 SSE-KMS 加密时，Amazon KMS 会生成存储桶级别密钥，该密钥用于为存储桶中的对象创建唯一的[数据密钥](https://docs.amazonaws.cn/kms/latest/developerguide/concepts.html#data-keys)。此 S3 存储桶密钥在 Amazon S3 内限时使用，从而减少了 Amazon S3 向 Amazon KMS 发出请求，以完成加密操作的需求。

有关使用 S3 存储桶密钥的更多信息，请参阅 [使用 Amazon S3 存储桶密钥](bucket-key.md)。