如何强制对我的 Amazon S3 桶使用 TLS 1.2 或更高版本?

2 分钟阅读
0

我的客户使用较早版本的 TLS。我想在他们访问我的 Amazon Simple Storage Service(Amazon S3)桶中的内容时,强制使用最新版本的 TLS。

简述

对传输中数据使用现代加密协议是最佳实践。若要使用 TLS 1.2 或更高版本连接 Amazon S3,请更新桶的安全政策。

**注意:**客户必须使用 TLS 1.2 或更高版本才能访问存储在您的 S3 桶中的内容。

有关弃用 AWS 的 TLS 版本的详细信息,请参阅 TLS 1.2 to become the minimum TLS protocol level for all AWS API endpoints

解决方法

使用附加到桶的基于资源的策略,强制对与 S3 桶的所有连接使用 TLS 1.2 或更高版本。

若要附加需要 TLS 1.2 或更高版本的桶策略,请完成下列步骤:

  1. 打开 Amazon S3 控制台

  2. 从列表中选择桶。

  3. 选择权限选项卡。

  4. 在“桶策略”下,选择编辑

  5. 添加策略以拒绝对您要阻止的加密协议的访问。例如,使用以下策略来拒绝使用低于 1.2 的 TLS 版本的所有 HTTPS 请求:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "EnforceTLSv12orHigher",
          "Principal": {
            "AWS": "*"
          },
          "Action": [
            "s3:*"
          ],
          "Effect": "Deny",
          "Resource": [
            "arn:aws:s3:::DOC_EXAMPLE_BUCKET/*",
            "arn:aws:s3:::DOC_EXAMPLE_BUCKET"
          ],
          "Condition": {
            "NumericLessThan": {
              "s3:TlsVersion": 1.2
            }
          }
        }
      ]
    }

    该策略强制使用 HTTPS 来提高传输中数据的安全性。

    如果您的工作负载需要通往 Amazon S3 的 HTTP 流量,请使用以下策略。此策略允许使用 HTTP 流量并阻止来自 TLS 1.2 较早版本的 HTTPS 流量:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "UpdateTLSv12",
          "Effect": "Deny",
          "Principal": {
            "AWS": "*"
          },
          "Action": "s3:*",
          "Resource": "arn:aws:s3:::DOC_EXAMPLE_BUCKET/*",
          "Condition": {
            "Bool": {
              "aws:SecureTransport": "true"
            },
            "NumericLessThan": {
              "s3:TlsVersion": "1.2"
            }
          }
        }
      ]
    }

确认您在 S3 中使用的是现代加密协议

若要测试您的新策略,请使用以下示例 curl 命令发出使用特定传统协议的 HTTPS 请求:

curl https://${BUCKET\_NAME}.s3.us-east-1.amazonaws.com/image.png -v --tlsv1.0 --tls-max 1.0

示例 curl 命令返回 Access Denied,因为 Amazon S3 检测到您的请求未使用 TLS 1.2 或更高版本。

注意: 在默认情况下,curl 会发送匿名请求。如果您的桶是私有的,则无论使用何种 TLS 版本,您都会收到 403 Access Denied 错误。使用 curl 进行测试时,生成 Amazon S3 预签名 URL 以授予访问您的私有对象的权限。

最佳实践是使用 AWS CloudTrail Lake 来识别与 AWS 服务端点相连的早期版本 TLS 连接。您可以配置 CloudTrail Lake 事件数据存储来捕获管理事件或者数据事件。

AWS 官方
AWS 官方已更新 7 个月前