CloudFrontのビューワーポリシーがHTTPを許可している

クライアントとCloudFrontの間でHTTPSを使用してください。

説明

CloudFrontのviewer_protocol_policyがallow-allの場合、クライアントは平文のHTTPでコンテンツを取得できます。

想定される影響

HTTPのリクエストとレスポンスは通信経路で盗聴・改ざんされる可能性があり、機密データが漏えいするおそれがあります。

対処方法

デフォルトと追加のキャッシュビヘイビアにhttps-onlyまたはredirect-to-httpsを設定してください。リダイレクト前の最初のHTTPリクエストは暗号化されないため、クライアントも最初からHTTPSを使用する必要があります。

例

以下はHTTPリクエストを拒否するhttps-onlyの例です。バケットのドメイン変数には実際のS3リージョンドメインを指定し、オリジンへのHTTPS接続は別途設定してください。

変更前

hcl
resource "aws_cloudfront_distribution" "example" {
  origin {
    domain_name = var.bucket_regional_domain_name
    origin_id   = "myS3Origin"

    s3_origin_config {
      origin_access_identity = "origin-access-identity/cloudfront/ABCDEFG1234567"
    }
  }

  enabled = true

  default_cache_behavior {
    allowed_methods        = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
    cached_methods         = ["GET", "HEAD"]
    target_origin_id       = "myS3Origin"
    viewer_protocol_policy = "allow-all"

    forwarded_values {
      query_string = false

      cookies {
        forward = "none"
      }
    }
  }
}

変更後

hcl
resource "aws_cloudfront_distribution" "example" {
  origin {
    domain_name = var.bucket_regional_domain_name
    origin_id   = "myS3Origin"

    s3_origin_config {
      origin_access_identity = "origin-access-identity/cloudfront/ABCDEFG1234567"
    }
  }

  enabled = true

  default_cache_behavior {
    allowed_methods        = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
    cached_methods         = ["GET", "HEAD"]
    target_origin_id       = "myS3Origin"
    viewer_protocol_policy = "https-only"

    forwarded_values {
      query_string = false

      cookies {
        forward = "none"
      }
    }
  }
}

参考資料