CloudFront 사용자 지정 도메인의 인증서 설정 점검

사용자 지정 도메인에 맞는 CloudFront 인증서를 설정하세요.

설명

CloudFront의 기본 인증서는 기본 CloudFront 도메인용입니다. 사용자 지정 도메인으로 HTTPS를 제공하려면 해당 이름을 포함하는 사용자 지정 인증서가 필요합니다.

잠재적 영향

인증서가 서비스 도메인과 일치하지 않으면 배포 설정이나 클라이언트의 HTTPS 연결이 실패할 수 있습니다.

해결 방법

사용자 지정 도메인을 인증서에 포함하고 viewer_certificate에 인증서, ssl_support_method, minimum_protocol_version을 설정하세요. 인증서는 콘텐츠 접근 권한을 제한하지 않으므로 비공개 콘텐츠에는 별도 접근 제어가 필요합니다.

예시

예시는 사용자 지정 도메인과 ACM 인증서를 연결합니다. ACM 인증서는 us-east-1에 있어야 합니다. HTTPS 전용 접속은 별도의 뷰어 프로토콜 정책으로 설정하세요.

변경 전

hcl
resource "aws_s3_bucket" "example" {
  # configs
}

resource "aws_cloudfront_distribution" "example" {
  origin {
    domain_name = aws_s3_bucket.example.bucket_regional_domain_name
    origin_id   = local.s3_origin_id

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

  aliases             = [var.site_domain]
  enabled             = true
  is_ipv6_enabled     = true
  comment             = "Some comment"
  default_root_object = "index.html"

  default_cache_behavior {
    allowed_methods  = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
    cached_methods   = ["GET", "HEAD"]
    target_origin_id = local.s3_origin_id

    forwarded_values {
      query_string = false

      cookies {
        forward = "none"
      }
    }

    viewer_protocol_policy = "allow-all"
    min_ttl                = 0
    default_ttl            = 3600
    max_ttl                = 86400
  }

  restrictions {
    geo_restriction {
      restriction_type = "whitelist"
      locations        = ["US", "CA", "GB", "DE"]
    }
  }
}

변경 후

hcl
resource "aws_s3_bucket" "example" {
  # configs
}

resource "aws_cloudfront_distribution" "example" {
  origin {
    domain_name = aws_s3_bucket.example.bucket_regional_domain_name
    origin_id   = local.s3_origin_id

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

  aliases             = [var.site_domain]
  enabled             = true
  is_ipv6_enabled     = true
  comment             = "Some comment"
  default_root_object = "index.html"

  default_cache_behavior {
    allowed_methods  = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
    cached_methods   = ["GET", "HEAD"]
    target_origin_id = local.s3_origin_id

    forwarded_values {
      query_string = false

      cookies {
        forward = "none"
      }
    }

    viewer_protocol_policy = "allow-all"
    min_ttl                = 0
    default_ttl            = 3600
    max_ttl                = 86400
  }

  restrictions {
    geo_restriction {
      restriction_type = "whitelist"
      locations        = ["US", "CA", "GB", "DE"]
    }
  }

  viewer_certificate {
    acm_certificate_arn      = aws_acm_certificate_validation.cert.certificate_arn
    ssl_support_method       = "sni-only"
    minimum_protocol_version = "TLSv1.2_2018"
  }
}

참조