为什么我的AWS ACM证书未通过验证?

时间:2020-07-08 23:30:04

标签: terraform amazon-route53 aws-certificate-manager

我在AWS Route53中注册了一个带有ACM证书的域名。我现在正尝试将域名和证书移至新帐户,以及使用Terraform管理资源。我使用AWS CLI将域名移动到新帐户,并且看起来工作正常。然后,我尝试运行此Terraform代码为该域创建新的证书和托管区域。

resource "aws_acm_certificate" "default" {
  domain_name       = "mydomain.io"
  validation_method = "DNS"
}

resource "aws_route53_zone" "external" {
  name = "mydomain.io"
}

resource "aws_route53_record" "validation" {
  name    = aws_acm_certificate.default.domain_validation_options.0.resource_record_name
  type    = aws_acm_certificate.default.domain_validation_options.0.resource_record_type
  zone_id = aws_route53_zone.external.zone_id
  records = [aws_acm_certificate.default.domain_validation_options.0.resource_record_value]
  ttl     = "60"
}

resource "aws_acm_certificate_validation" "default" {
  certificate_arn = aws_acm_certificate.default.arn
  validation_record_fqdns = [
    aws_route53_record.validation.fqdn,
  ]
}

有两件事对此很奇怪。首先,证书已创建,但验证从未完成。它仍处于待验证状态。失败后,我在某处阅读到您无法自动验证,需要手动创建CNAME记录。因此,我进入控制台并单击“将cname添加到路由53”按钮。这会将CNAME记录适当地添加到Terraform创建的新Route53记录中。但是它已经待了好几个小时了。我多次单击相同的按钮,仅创建了一个CNAME,随后的单击无效。

另一个奇怪之处,也许是一个线索,是我的网站仍在正常工作。我认为这应该会破坏网站,因为该域现在由一个新帐户拥有,并路由到该新帐户上的其他托管区域,并且具有仍在等待处理的证书。但是,一切仍然正常。因此,我认为旧证书和托管区域可能会影响这一点。他们是否需要释放域,我是否需要删除该证书?听起来不需要删除旧帐户上的证书。我不应该再被放弃了。

我尚未将证书与我打算做的Cloudfront或ALB相关联。但是,由于未经验证,我用于创建Cloudfront实例的Terrform代码消失了。

2 个答案:

答案 0 :(得分:2)

事实证明,我的转移域是随一组名称服务器一起转移的,但是,Route53托管区域中的名称服务器都不同。通过控制台一起创建这些文件时,它将做正确的事情。我不确定如何使用Terraform在这里做正确的事,此刻我将发布另一个问题。但是目前,解决方案是更改托管区域或注册域上的名称服务器以使其彼此匹配。

答案 1 :(得分:-1)

对我有用

######################

data "aws_route53_zone" "main" {
  name         = var.domain
  private_zone = false
}

locals {
  final_domain = var.wildcard_enable == true ? *.var.domain : var.domain
  # final_domain = "${var.wildcard_enable == true ? "*.${var.domain}" : var.domain}"
}

resource "aws_acm_certificate" "cert" {
  domain_name       = local.final_domain
  validation_method = "DNS"

  tags = {
    "Name" = var.domain
  }

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_route53_record" "cert_validation" {
  depends_on      = [aws_acm_certificate.cert]
  zone_id         = data.aws_route53_zone.main.id
  name            = sort(aws_acm_certificate.cert.domain_validation_options[*].resource_record_name)[0]
  type            = "CNAME"
  ttl             = "300"
  records         = [sort(aws_acm_certificate.cert.domain_validation_options[*].resource_record_value)[0]]
  allow_overwrite = true
}

resource "aws_acm_certificate_validation" "cert" {
  certificate_arn = aws_acm_certificate.cert.arn
  validation_record_fqdns = [
    aws_route53_record.cert_validation.fqdn
  ]
  timeouts {
    create = "60m"
  }
}