跳至内容

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

2 分钟阅读
0

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

解决方案

注意:Amazon S3 需要使用 TLS 1.2 或更高版本,这是 S3 API 端点的默认设置。要强制使用更高的加密协议版本(例如 TLS 1.3 或更高版本),仍然可以参考本文中的示例。

使用附加到存储桶的基于资源的策略,强制对与 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

由于 Amazon S3 检测到您的请求未使用 TLS 1.2 或更高版本,因此 curl 命令将返回 Access Denied(拒绝访问)。

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

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