Terraform创建的AWS ACM证书无法验证,域名NS异常
解决方案:ACM证书Pending Validation及DNS配置错误修复
核心问题定位
你的问题根源是域名的DNS权威服务器配置错误:在线nslookup返回公司另一域名的NS记录,说明当前域名(或子域)的NS记录未指向AWS Route53托管区的权威服务器,导致ACM的CNAME验证记录无法被公网DNS解析,证书始终无法完成验证。
第一步:修复NS记录配置
- 登录AWS Route53控制台,找到目标域名对应的托管区,记录下托管区提供的4条NS服务器地址(格式如
ns-xxx.awsdns-xx.org)。 - 更新域名的权威NS记录:
- 若域名在AWS注册:直接在Route53的「域名注册」页面,将该域名的NS记录替换为托管区的4条地址。
- 若域名在第三方注册商:登录注册商平台,找到域名的DNS设置,将权威NS记录更新为Route53托管区的地址。
- 注意:如果是子域名(如
dev.your-domain.com),需在父域名(your-domain.com)的DNS托管区中添加该子域的NS记录,指向Route53托管区的服务器,而非修改顶级域的NS。
- 验证NS记录生效:
- 执行命令:
nslookup -type=NS your-domain.com - 确认返回的NS地址与Route53托管区的地址完全一致,等待DNS全局生效(通常1-24小时,可通过
dig +trace your-domain.com跟踪解析路径)。
- 执行命令:
第二步:重新触发ACM证书验证
当NS记录配置正确且生效后,按以下方式重新触发验证:
方式1:通过Terraform重新触发
- 销毁当前处于Pending状态的ACM证书资源:
(将terraform destroy -target=aws_acm_certificate.your-cert-resource-nameyour-cert-resource-name替换为你Terraform代码中证书资源的名称) - 重新执行
terraform apply:- 若代码配置了自动添加Route53验证记录,Terraform会自动创建新的CNAME记录;
- 若为手动配置,需复制新生成的CNAME验证记录到Route53托管区。
方式2:通过AWS控制台重新触发
- 登录eu-north-1区域的AWS ACM控制台,找到状态为
PENDING_VALIDATION的证书。 - 查看证书详情中的CNAME验证记录:
- 若记录已存在但未生效,删除现有记录后重新添加新生成的验证记录;
- 点击验证状态旁的刷新按钮,手动触发ACM的DNS检查。
第三步:验证后续资源部署
- 等待10-30分钟,确认ACM证书状态变为
ISSUED。 - 重新执行
terraform apply,此时ELBv2监听器可正常创建。
额外排查点
- 确认Terraform代码中ACM证书资源的
validation_method设置为"DNS",且正确关联了Route53托管区(自动验证示例代码):resource "aws_acm_certificate" "dev_cert" { domain_name = "dev.your-domain.com" validation_method = "DNS" tags = { Environment = "dev" } } resource "aws_route53_record" "dev_cert_validation" { zone_id = aws_route53_zone.dev_zone.zone_id name = aws_acm_certificate.dev_cert.domain_validation_options.0.resource_record_name type = aws_acm_certificate.dev_cert.domain_validation_options.0.resource_record_type records = [aws_acm_certificate.dev_cert.domain_validation_options.0.resource_record_value] ttl = 60 } resource "aws_acm_certificate_validation" "dev_cert" { certificate_arn = aws_acm_certificate.dev_cert.arn validation_record_fqdns = [aws_route53_record.dev_cert_validation.fqdn] } - 确认Route53托管区的域名与ACM证书的域名完全匹配(例如证书为
dev.your-domain.com,托管区应为dev.your-domain.com或其父域your-domain.com)。
内容的提问来源于stack exchange,提问作者chenny
相关产品推荐
相关产品推荐

