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"
  }
}

参考資料