HTTP를 허용하는 CloudFront 뷰어 정책

클라이언트와 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"
      }
    }
  }
}

참조