ACM 证书跨账户 DNS 验证
ACM certificates cross account DNS validation
我有 2 个 AWS 账户:dev
和 prod
。
在 prod
帐户中,我设置了一个 DNS 域 (example.com
),以及 2 个 public 托管区域:example.com
和 prod.example.com
. 2 ACM 证书也为这些域 internal.prod.example.com
和 eks.prod.example.com
颁发。这些证书已由 DNS 正确验证。
在 dev
帐户中,我创建了 2 个 public 托管区域:dev.example.com
和 example.com
。我为 internal.dev.example.com
和 eks.dev.example.com
颁发了 2 个 ACM 证书,据我所知,这些证书需要使用 prod
帐户中的 DNS 进行验证。
这些证书处于待定状态。
我如何验证它们?
到目前为止我做了什么:
我在 example.com
托管区域的 prod
帐户中添加了一个名为 dev.example.com
的 NS 记录。 NS 记录的值是在 dev
帐户中创建的 dev.example.com
托管区域的值。这是为了委派 prod
中 R53 托管区的所有权。参见 here。
在 dev
帐户中,ACM 请求域的 CNAME
已添加到 dev.example.com
托管区域中以进行验证。
以下代码是如何在生产帐户上完成(和工作)的。
注意 - 这是我接手的代码,所以我不知道是否采取了任何手动步骤。
data "aws_route53_zone" "dns-zone" {
name = "${var.environment}.${var.zone_name}"
}
resource "aws_acm_certificate" "cert" {
domain_name = "*.${var.environment}.${var.zone_name}"
validation_method = "DNS"
subject_alternative_names = list("*.internal.${var.environment}.${var.zone_name}", "*.eks.${var.environment}.${var.zone_name}")
lifecycle {
create_before_destroy = true
prevent_destroy = true
}
}
resource "aws_route53_record" "cert_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
zone_id = data.aws_route53_zone.dns-zone.zone_id
}
}
allow_overwrite = true
name = each.value.name
records = [each.value.record]
ttl = 60
type = each.value.type
zone_id = each.value.zone_id
}
resource "aws_acm_certificate_validation" "cert" {
certificate_arn = aws_acm_certificate.cert.arn
validation_record_fqdns = [for record in aws_route53_record.cert_validation : record.fqdn]
}
Ps - 如果您需要更多说明,请告诉我。
您有 example.com
的开发和生产帐户?只有1个可以正常使用。 registrar 用于 example.com 的地方...该 registrar 只能使用 name servers 来自其中 1 个托管区域。
您提到您有 2 个用于 internal.dev.example.com 和 eks.dev.example.com 的 ACM 证书...如果它们的域是在 DEV 帐户中创建的,则应在 DEV 帐户中对其进行验证.
此外,我建议您只在 ACM 中为 *.dev.example.com
创建 1 个通配符证书并在 DEV 帐户中验证该 1。任何子域,例如 eks.dev.example.com 都可以使用它。
我有 2 个 AWS 账户:dev
和 prod
。
在 prod
帐户中,我设置了一个 DNS 域 (example.com
),以及 2 个 public 托管区域:example.com
和 prod.example.com
. 2 ACM 证书也为这些域 internal.prod.example.com
和 eks.prod.example.com
颁发。这些证书已由 DNS 正确验证。
在 dev
帐户中,我创建了 2 个 public 托管区域:dev.example.com
和 example.com
。我为 internal.dev.example.com
和 eks.dev.example.com
颁发了 2 个 ACM 证书,据我所知,这些证书需要使用 prod
帐户中的 DNS 进行验证。
这些证书处于待定状态。
我如何验证它们?
到目前为止我做了什么:
我在
example.com
托管区域的prod
帐户中添加了一个名为dev.example.com
的 NS 记录。 NS 记录的值是在dev
帐户中创建的dev.example.com
托管区域的值。这是为了委派prod
中 R53 托管区的所有权。参见 here。在
dev
帐户中,ACM 请求域的CNAME
已添加到dev.example.com
托管区域中以进行验证。
以下代码是如何在生产帐户上完成(和工作)的。
注意 - 这是我接手的代码,所以我不知道是否采取了任何手动步骤。
data "aws_route53_zone" "dns-zone" {
name = "${var.environment}.${var.zone_name}"
}
resource "aws_acm_certificate" "cert" {
domain_name = "*.${var.environment}.${var.zone_name}"
validation_method = "DNS"
subject_alternative_names = list("*.internal.${var.environment}.${var.zone_name}", "*.eks.${var.environment}.${var.zone_name}")
lifecycle {
create_before_destroy = true
prevent_destroy = true
}
}
resource "aws_route53_record" "cert_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
zone_id = data.aws_route53_zone.dns-zone.zone_id
}
}
allow_overwrite = true
name = each.value.name
records = [each.value.record]
ttl = 60
type = each.value.type
zone_id = each.value.zone_id
}
resource "aws_acm_certificate_validation" "cert" {
certificate_arn = aws_acm_certificate.cert.arn
validation_record_fqdns = [for record in aws_route53_record.cert_validation : record.fqdn]
}
Ps - 如果您需要更多说明,请告诉我。
您有 example.com
的开发和生产帐户?只有1个可以正常使用。 registrar 用于 example.com 的地方...该 registrar 只能使用 name servers 来自其中 1 个托管区域。
您提到您有 2 个用于 internal.dev.example.com 和 eks.dev.example.com 的 ACM 证书...如果它们的域是在 DEV 帐户中创建的,则应在 DEV 帐户中对其进行验证.
此外,我建议您只在 ACM 中为 *.dev.example.com
创建 1 个通配符证书并在 DEV 帐户中验证该 1。任何子域,例如 eks.dev.example.com 都可以使用它。