为什么我的 AWS ACM 证书未通过验证?
Why isn't my AWS ACM certificate validating?
我使用 ACM 证书在 AWS Route53 中注册了一个域名。我现在正尝试将该域名和证书移动到一个新帐户,并使用 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 代码死了。
事实证明,我转移的域是通过一组名称服务器转移的,但是,Route53 托管区域中的名称服务器都是不同的。当这些通过控制台一起创建时,它会做正确的事情。我不确定如何使用 Terraform 在这里做正确的事情,我现在要 post 另一个问题。但目前,解决方案是更改托管区域或注册域上的名称服务器以相互匹配。
对我有用
######################
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"
}
}
我使用 ACM 证书在 AWS Route53 中注册了一个域名。我现在正尝试将该域名和证书移动到一个新帐户,并使用 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 代码死了。
事实证明,我转移的域是通过一组名称服务器转移的,但是,Route53 托管区域中的名称服务器都是不同的。当这些通过控制台一起创建时,它会做正确的事情。我不确定如何使用 Terraform 在这里做正确的事情,我现在要 post 另一个问题。但目前,解决方案是更改托管区域或注册域上的名称服务器以相互匹配。
对我有用
######################
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"
}
}