ACM — TLS 証明書

概要

AWS Certificate Manager (ACM) は AWS が無料で発行・自動更新する TLS 証明書サービス。 Public 証明書(インターネット向け)と Private 証明書(社内向け)の両方を扱えます。 ACM 経由で発行された証明書は CloudFront / ALB / API Gateway / NLB / App Runner 等に直接アタッチして使えます。

ポイントは「無料 + 自動更新 + 自前で鍵を管理しなくて良い」。Let's Encrypt のように 90 日ごとの更新を心配する必要がありません。

主な機能

重要な制約: us-east-1 必須のケース

CloudFront に使う ACM 証明書は us-east-1 (バージニア北部) で発行する必要があります。 他のリージョンで発行した証明書は CloudFront に紐付けできません。

Terraform では provider alias で us-east-1 を別途宣言する必要がある(よく忘れる)。

使うべきパターン

使わない方が良いパターン

Terraform 最小サンプル(DNS 検証 + ワイルドカード)

# CloudFront 用なので us-east-1 で発行
provider "aws" {
  alias  = "us_east_1"
  region = "us-east-1"
}

resource "aws_acm_certificate" "wildcard" {
  provider          = aws.us_east_1
  domain_name       = "iigtn.com"
  subject_alternative_names = ["*.iigtn.com"]
  validation_method = "DNS"

  lifecycle { create_before_destroy = true }
}

# Route 53 で DNS 検証 CNAME を作成
resource "aws_route53_record" "validation" {
  for_each = {
    for dvo in aws_acm_certificate.wildcard.domain_validation_options :
    dvo.domain_name => {
      name   = dvo.resource_record_name
      record = dvo.resource_record_value
      type   = dvo.resource_record_type
    }
  }
  zone_id = aws_route53_zone.main.zone_id
  name    = each.value.name
  type    = each.value.type
  ttl     = 60
  records = [each.value.record]
}

# 検証完了を待つ (apply が完了するまで)
resource "aws_acm_certificate_validation" "wildcard" {
  provider                = aws.us_east_1
  certificate_arn         = aws_acm_certificate.wildcard.arn
  validation_record_fqdns = [for r in aws_route53_record.validation : r.fqdn]
}

# CloudFront にアタッチ
resource "aws_cloudfront_distribution" "site" {
  # ...
  viewer_certificate {
    acm_certificate_arn      = aws_acm_certificate_validation.wildcard.certificate_arn
    ssl_support_method       = "sni-only"
    minimum_protocol_version = "TLSv1.2_2021"
  }
}

用語集

ACM (AWS Certificate Manager)
AWS マネージドの TLS 証明書サービス。Public 証明書は無料 + 自動更新。
DNS 検証 / Email 検証
ドメイン所有確認の方法。DNS 検証は Route 53 に CNAME 追加で自動化可、Email 検証は admin@... へメール。
SAN (Subject Alternative Name)
1 つの証明書で複数ドメインをカバーする仕組み。*.iigtn.com のワイルドカードも SAN。
us-east-1 制約
CloudFront に使う ACM 証明書は us-east-1 で発行必須。他 region 発行の証明書はアタッチ不可。
Private CA (PCA)
AWS マネージドの Private CA。自社 CA を AWS 上で運用、社内 mTLS 等に使う。有料。
DV / OV / EV
証明書の検証レベル。Domain Validation (DV) / Organization (OV) / Extended (EV)。ACM は DV のみ。
aws_acm_certificate_validation
Terraform で「証明書検証完了を待つ」リソース。これを使わないと apply タイミングで証明書未検証エラー。