

# 利用加密来保护传输中数据
<a name="UsingEncryptionInTransit"></a>

Amazon S3 的数据传输支持 HTTP 和 HTTPS 两种协议。HTTP 以纯文本格式传输数据，而 HTTPS 则通过使用传输层安全性协议（TLS）加密数据增加了一层安全保护。TLS 可防止侦听、数据篡改和中间人攻击。虽然可以接受 HTTP 流量，但大多数实施都使用 HTTPS 和 TLS 进行传输中加密，来保护在客户端和 Amazon S3 之间传输的数据。

## TLS 1.2 和 TLS 1.3 支持
<a name="UsingEncryptionInTransit.TLS-support"></a>

对于所有 Amazon Web Services 区域的所有 API 端点，Amazon S3 支持 HTTPS 连接的 TLS 1.2 和 TLS 1.3。S3 会自动协商您的客户端软件和所访问 S3 端点支持的最强 TLS 保护。当前 Amazon 工具（2014 年及以后）包括 Amazon SDK，Amazon CLI 自动默认使用 TLS 1.3，无需您采取任何操作。如果需要向后兼容 TLS 1.2，您可以通过客户端配置设置指定特定的 TLS 版本，来覆盖此自动协商。使用 TLS 1.3 时，您可以选择配置混合后量子密钥交换（ML-KEM），向 Amazon S3 发出抗量子请求。有关更多信息，请参阅 [为客户端配置混合后量子 TLS](pqtls-how-to.md)。

**注意**  
除了适用于 Amazon S3 的 Amazon PrivateLink 和多区域接入点之外，所有 S3 端点均支持 TLS 1.3。

## 监控 TLS 使用情况
<a name="UsingEncryptionInTransit.monitoring"></a>

您可以使用 Amazon S3 服务器访问日志或 Amazon CloudTrail 来监控对 Amazon S3 存储桶的请求。两个日志记录选项都记录每个请求中使用的 TLS 版本和密码套件。
+ **Amazon S3 服务器访问日志**：服务器访问日志记录提供对存储桶发出的请求的详细报告。例如，访问日志信息可能在安全和访问权限审核方面很有用。有关更多信息，请参阅 [Amazon S3 服务器访问日志格式](LogFormat.md)。
+ **Amazon CloudTrail**：[Amazon CloudTrail](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 是提供用户、角色或 Amazon 服务所执行操作的记录的服务。CloudTrail 将 Amazon S3 的所有 API 调用作为事件捕获。有关更多信息，请参阅 [Amazon S3 CloudTrail 事件](cloudtrail-logging-s3-info.md)。

## 在传输过程中强制加密
<a name="UsingEncryptionInTransit.enforcement"></a>

在向 Amazon S3 传输数据时，执行传输中数据加密是一种最佳安全实践。您可以通过各种策略机制来实施仅限 HTTPS 的通信或使用特定的 TLS 版本。这些机制包括适用于 S3 存储桶的基于 IAM 资源的策略（[存储桶策略](bucket-policies.md)）、[服务控制策略](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_scps.html)（SCP）、[资源控制策略](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_rcps.html)（RCP）和 [VPC 端点策略](https://docs.amazonaws.cn/vpc/latest/privatelink/vpc-endpoints-access.html)。

### 用于强制实施传输中加密的存储桶策略示例
<a name="UsingEncryptionInTransit.bucket-policy-example"></a>

您可以使用 [S3 条件键](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys) `s3:TlsVersion`，根据客户端使用的 TLS 版本限制对 Amazon S3 存储桶的访问权限。有关更多信息，请参阅 [示例 6：要求最低 TLS 版本](amazon-s3-policy-keys.md#example-object-tls-version)。

**Example 使用 `S3:TlsVersion` 条件键强制实施 TLS 1.3 的存储桶策略**  

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyInsecureConnections",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
        "arn:aws:s3:::amzn-s3-demo-bucket1/*"
      ],
      "Condition": {
        "NumericLessThan": {
          "s3:TlsVersion": "1.3"
        }
      }
    }
  ]
}
```

您可以在 S3 存储桶策略中使用 `aws:SecureTransport` [全局条件键](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html)来检查请求是否通过 HTTPS（TLS）发送。与前一示例不同，此条件不检查是否使用了特定 TLS 版本。有关更多信息，请参阅 [仅限 HTTPS 请求访问](example-bucket-policies.md#example-bucket-policies-use-case-HTTP-HTTPS-1)。

**Example 使用 `aws:SecureTransport` 全局条件键强制实施 HTTPS 的存储桶策略**  

```
{
    "Version":"2012-10-17",		 	 	 		 	 	 
    "Statement": [
     {
        "Sid": "RestrictToTLSRequestsOnly",		 	 	 
        "Action": "s3:*",
        "Effect": "Deny",
        "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket1",
            "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        ],
        "Condition": {
            "Bool": {
                "aws:SecureTransport": "false"
            }
        },
        "Principal": "*"
    }
  ]
}
```

**基于这两种键的策略示例和更多示例**  
您可以在一个策略中使用前面示例中演示的两种条件键。有关更多信息和其他强制实施方法，请参阅 Amazon Storage 博客文章 [Enforcing encryption in transit with TLS1.2 or higher with Amazon S3](https://www.amazonaws.cn/blogs/storage/enforcing-encryption-in-transit-with-tls1-2-or-higher-with-amazon-s3/)。