AWS ACM証明書が「検証保留中」から進まない理由(とその解決策)

intermediate☁️ AWS2026-06-23| AWS Management Console、AWS CLI、Route 53、または Cloudflare、GoDaddy、Namecheap などの外部 DNS プロバイダー。

Error Message

Validation timed out. The status of this certificate request is Pending validation.
#aws-acm#route53#ssl証明書#dns検証#devops

問題の概要

AWS Certificate Manager(ACM)で新しいSSL/TLS証明書をリクエストしました。メール認証よりも通常早いため、DNS検証を選択しましたが、何時間経っても証明書のステータスが検証待ちのままです。最終的に、次のエラーが表示されます。

Validation timed out. The status of this certificate request is Pending validation.

ACMはDNSレコードを正しく設定するための72時間のウィンドウを提供します。その期間内にAWSが特定のCNAMEレコードを見つけられない場合、リクエストは失敗します。ほとんどの場合、修正はDNS設定のちょっとした調整で済みます。

よくある原因

  • **幽霊レコード:**CNAMEレコードを誤ったDNSプロバイダーに追加してしまっています。これはドメインをGoDaddyで登録しているが、ネームサーバー(NS)がRoute 53を指している場合によく発生します。
  • **サブドメインの罠:**多くのDNSプロバイダーは自動的にドメイン名を末尾に追加します。「ホスト」フィールドに_x.example.comと入力すると、_x.example.com.example.comとして解決されてしまい、ACMはそれを認識できません。
  • **CAAによるブロック:**DNSにCertificate Authority Authorization(CAA)レコードが存在しているが、Amazonが認可された発行者として記載されていません。
  • Cloudflareのプロキシ:「オレンジ色のクラウド」が検証レコードに対して有効になっており、ACMが確認する必要があるCNAMEターゲットが隠されています。

解決策1:Route 53での「2クリック」修正

Route 53でDNSを管理している場合は、手動で入力する必要はありません。AWSが自動的に設定を行ってくれます。これはコピー&ペーストのミスを排除できるため、最も信頼性の高い方法です。

  • ACMコンソールに移動し、検証待ちの証明書を開きます。
  • ドメインセクションを見つけ、Route 53でレコードを作成をクリックします。
  • ホストゾーンを確認し、レコードを作成をクリックします。

AWSはすぐにゾーンへ_x.yourdomain.comのCNAMEを挿入します。通常、5〜15分以内に検証ステータスが「発行済み」に変わります。

解決策2:外部プロバイダーへの対応(GoDaddy、Cloudflareなど)

外部のDNSマネージャーを使用する場合は、正確に設定する必要があります。多くのプロバイダーはCNAME名のサブドメイン部分のみを要求します。

  • **「ホスト」フィールド:**ACMが_a1b2c3d4.example.comを提供している場合、プロバイダーの「名前」または「ホスト」ボックスに_a1b2c3d4のみを入力してみてください。
  • Cloudflareの設定:レコードがDNSのみ(グレーのクラウド)に設定されていることを確認してください。CloudflareがHTTPSプロキシを通じて検証トラフィックを処理しようとすると、ACMの検証は失敗します。
  • **TTL:**設定中はTTLを300秒(5分)に設定してください。これにより、間違えた場合でもキャッシュがクリアされるまで1時間待つ必要がなくなります。

解決策3:CAAレコードの競合を解消する

CAAレコードはドメインのセキュリティガードとして機能し、どの認証局(CA)が証明書を発行できるかを示します。CAAレコードが存在しているがAmazonが含まれていない場合、ACMは証明書を発行できません。digツールを使用してレコードを確認します。

dig example.com CAA

Let's EncryptやDigiCertのレコードはあるがAmazonのものがない場合は、追加する必要があります。DNSゾーンに次のレコードを挿入してください。

example.com. IN CAA 0 issue "amazon.com"

解決策4:待つ前に「dig」で確認する

72時間待って結果を確認する必要はありません。ターミナルから今すぐレコードが有効になっているか確認できます。以下の値をACMから提供されたCNAME名に置き換えてください。

dig CNAME _xxxxxxxxxxxx.yourdomain.com +short

コマンドが.acm-validations.aws.で終わる値を返した場合は成功です。何も返ってこない場合は、DNSがまだ更新されていないか、レコード名のスペルが間違っています。

確認方法

レコードが有効になり、CAAレコードの問題がなければ、ACMは自動的に変更を検出します。リクエストを更新または再送信する必要はありません。CLIでステータスを確認するには、次のコマンドを実行します。

aws acm describe-certificate --certificate-arn your_cert_arn --query 'Certificate.Status'

シンプルな1単語の出力が表示されれば成功です。

"ISSUED"

プロヒント:Terraformで自動化する

コンソールでボタンを手動でクリックする方法はミスが発生しやすいです。Infrastructure as Codeを使用してACMとRoute 53を連携させましょう。このTerraformスニペットは、証明書の作成、DNSレコードの設定、そしてリソースを完了とマークする前に検証が完了するまで待機する処理をすべて自動化します。

resource "aws_acm_certificate" "cert" {
  domain_name       = "example.com"
  validation_method = "DNS"
}

resource "aws_route53_record" "validation" {
  for_each = {
    for dvo in aws_acm_certificate.cert.domain_validation_options : dvo.domain_name => {
      name   = dvo.resource_record_name
      record = dvo.resource_record_value
      type   = dvo.resource_record_type
    }
  }

  allow_overwrite = true
  name            = each.value.name
  records         = [each.value.record]
  ttl             = 60
  type            = each.value.type
  zone_id         = data.aws_route53_zone.main.zone_id
}

Related Error Notes