SJ blog
security
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

ACM証明書 — DNS検証・Email検証・自動更新・使用制限

AWS Certificate Manager(ACM)の証明書発行、DNS検証とEmail検証の違い、ALB/CloudFrontでの使用方法、自動更新の仕組み、プライベート証明書、インポート証明書の管理を解説。

一言結論

ACM証明書はAWSサービス(ALB・CloudFront等)で使う限り無料で自動更新されるが、EC2インスタンスやオンプレミスサーバーには使えないため、用途に応じてインポート証明書やプライベートCAと使い分ける必要がある。

ACM の概要

AWS Certificate Manager(ACM)は、TLS/SSL証明書の発行・管理・更新を自動化するサービスだ。AWSサービスで使用する証明書は無料で発行できる。

ACM 証明書の特徴:
  料金: AWSサービスで使用するACM証明書は無料
  自動更新: 有効期限が近づくと自動で更新
  対応: ELB(ALB/NLB), CloudFront, API Gateway, AppSync等

ACM 証明書が使えない場所:
  → EC2インスタンス(証明書をダウンロードできない)
  → オンプレミスサーバー
  ※ これらにはACMプライベートCAまたはインポート証明書を使う

証明書の発行(DNS検証)

DNS検証はRoute53を使う場合に特に有効で、自動化できる。

# 証明書のリクエスト(DNS検証)
aws acm request-certificate \
  --domain-name example.com \
  --validation-method DNS \
  --subject-alternative-names "*.example.com" "www.example.com" \
  --idempotency-token "cert-request-001"

# 証明書の詳細確認(DNS検証用CNAMEレコードを確認)
aws acm describe-certificate \
  --certificate-arn arn:aws:acm:ap-northeast-1:123456789012:certificate/xxx
DNS検証の手順:
  1. ACMがCNAMEレコードを生成
     例: _xxx.example.com → _yyy.acm-validations.aws.
  2. Route53(またはDNSプロバイダー)にCNAMEを追加
  3. ACMがDNSを確認 → 証明書発行(数分〜数十分)
  4. 自動更新時も同じCNAMEを使って自動検証
  
Route53の場合: コンソールから1クリックでCNAMEを自動追加できる

Email検証

Email検証の手順:
  1. ドメインのWHOIS登録メールアドレスへ確認メールを送信
  2. admin@, administrator@, hostmaster@, webmaster@, postmaster@ にも送信
  3. メール内のリンクをクリックして承認
  
制限:
  → 自動更新ができない(期限前に手動で再承認が必要)
  → DNS検証が可能なら DNS検証を使うべき

CloudFront で使用する証明書

CloudFrontに使用するACM証明書は us-east-1 リージョンで発行する必要がある。

# CloudFront用証明書は us-east-1 で発行
aws acm request-certificate \
  --region us-east-1 \
  --domain-name cdn.example.com \
  --validation-method DNS

# CloudFrontディストリビューションに証明書を設定
aws cloudfront update-distribution \
  --id DISTRIBUTION_ID \
  --distribution-config '{
    "ViewerCertificate": {
      "ACMCertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/xxx",
      "SSLSupportMethod": "sni-only",
      "MinimumProtocolVersion": "TLSv1.2_2021"
    }
  }'
SSL対応方式:
  SNI(Server Name Indication): 推奨・無料
    → クライアントがTLSハンドシェイク時にホスト名を送信
    → 最新ブラウザはほぼ全対応
    
  Dedicated IP: 月$600
    → 古いクライアント(IE on XP等)向け
    → 現在はほぼ不要

インポート証明書

既存の証明書や自己署名証明書をACMにインポートできる。

# 証明書のインポート
aws acm import-certificate \
  --certificate fileb://certificate.pem \
  --private-key fileb://private-key.pem \
  --certificate-chain fileb://chain.pem

# インポート証明書は自動更新されない
# → 期限前に手動でインポートし直す必要がある

ACM プライベート CA

内部サービス用のプライベート証明書を発行する。

# プライベートCAの作成
aws acm-pca create-certificate-authority \
  --certificate-authority-configuration '{
    "KeyAlgorithm": "RSA_2048",
    "SigningAlgorithm": "SHA256WITHRSA",
    "Subject": {
      "Country": "JP",
      "Organization": "My Company",
      "CommonName": "My Internal CA"
    }
  }' \
  --certificate-authority-type "SUBORDINATE"
プライベートCA の用途:
  → EC2インスタンス間のmTLS通信
  → 内部APIの証明書
  → VPN証明書
  
料金: プライベートCA: $400/月、証明書: $0.75/証明書

試験頻出ポイント

シナリオ回答
CloudFront用ACM証明書のリージョンus-east-1(バージニア北部)必須
ALB用ACM証明書のリージョンALBと同じリージョン
証明書の自動更新DNS検証のみ自動更新対応
EC2に直接TLS証明書をインストールACM不可→インポートまたはLet’s Encrypt等
内部サービス間mTLSACM プライベートCA

まとめ

ACMはAWSサービスで使うTLS証明書を無料で発行・自動更新するサービスだ。DNS検証(特にRoute53と組み合わせ)が推奨で自動更新に対応する。CloudFront用証明書はus-east-1リージョンで発行する制約がある。