

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 亚马逊 S3 的加密最佳实践
<a name="s3"></a>

[Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

对于 Amazon S3 的服务器端加密，有三个选项：
+ [使用 Amazon S3 托管加密密钥（SSE-S3）进行服务器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)
+ [使用 AWS Key Management Service (SSE-KMS) 进行服务器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)
+ [使用客户提供的加密密钥（SSE-C）进行服务器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html)

Amazon S3 应用服务器端加密，将亚马逊 S3 托管密钥 (SSE-S3) 作为亚马逊 S3 中每个存储桶的基本加密级别。从 2023 年 1 月 5 日起，上传到 Amazon S3 的所有新对象都将自动加密，不会产生额外费用，也不会影响性能。S3 存储桶默认加密配置和新对象上传的自动加密状态可在 AWS CloudTrail 日志、S3 清单、S3 存储镜头、Amazon S3 控制台中找到，并在 AWS Command Line Interface (AWS CLI) 和 AWS SDKs中作为其他 Amazon S3 API 响应标头提供。有关更多信息，请参阅[默认加密常见问题解答](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html)。

如果在上传时使用服务器端加密来加密对象，请将 `x-amz-server-side-encryption` 标头添加到请求中，以通知 Amazon S3 使用 SSE-S3、SSE-KMS 或 SSE-C 加密对象。以下是 `x-amz-server-side-encryption` 标头的可能值：
+ `AES256`，通知 Amazon S3 使用 Amazon S3 托管的密钥。
+ `aws:kms`，它告诉 Amazon S3 使用 AWS KMS 托管密钥。
+ 对于 SSE-C，将值设置为 `True` 或 `False`

有关更多信息，请参阅 “[如何使用存储桶策略和申请 Defense-in-Depth帮助保护您的 Amazon S3 数据”（AWS 博客文章）中的Defense-in-depth 要求 1：静态数据和传输期间必须对数据](https://aws.amazon.com/blogs/security/how-to-use-bucket-policies-and-apply-defense-in-depth-to-help-secure-your-amazon-s3-data/)*进行加密*。

对于 Amazon S3 中的[客户端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)，有两个选项：
+ 密钥存储在 AWS KMS
+ 存储在应用程序中的密钥

考虑下面针对该服务的加密最佳实践：
+ 在中 AWS Config，实施[bucket-server-side-encryption启用 s3](https://docs.aws.amazon.com/config/latest/developerguide/s3-bucket-server-side-encryption-enabled.html) 的 AWS 托管规则来验证和实施 S3 存储桶加密。
+ 部署 Amazon S3 存储桶策略，验证所有上传的对象是否都已使用 `s3:x-amz-server-side-encryption` 条件进行加密。有关更多信息，请参阅 [Protecting data using SSE-S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) 中的示例存储桶策略以及 [Adding a bucket policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html) 中的说明。
+ 使用 S3 存储桶策略中的 `aws:SecureTransport` 条件仅允许通过 HTTPS（TLS）的加密连接。有关更多信息，请参阅[我应该使用哪个 S3 存储桶策略来遵守 AWS Config 规则 s3-bucket-ssl-requests-only？](https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-policy-for-config-rule/)
+ 在中 AWS Config，实现 [s3 bucket-ssl-requests-only](https://docs.aws.amazon.com/config/latest/developerguide/s3-bucket-ssl-requests-only.html) AWS 托管规则，要求请求使用 SSL。
+ 如果您需要授予对 Amazon S3 对象的跨账户访问权限，请使用客户管理的密钥。配置密钥政策以允许来自另一个 AWS 账户的访问。