You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS Terraform实现跨账号自动验证ACM证书?

跨AWS账号自动完成ACM证书DNS验证

场景:在Dev个人账号创建ACM证书,但域名的Route53托管在Prod根账号下,需要实现terraform apply时自动在Prod账号添加DNS验证记录,完成证书从"Pending Validation"到"Issued"状态的自动切换。

解决方案步骤

1. 配置双AWS Provider

在Terraform配置中添加两个AWS Provider实例,分别指向Dev账号(默认)和Prod账号(别名prod),推荐用IAM角色切换的方式实现安全的跨账号权限访问:

provider "aws" {
  region = var.region
  # Dev账号凭证可通过环境变量、AWS凭证文件或工作区配置传入
}

provider "aws" {
  alias  = "prod"
  region = var.region
  assume_role {
    role_arn = "arn:aws:iam::PROD_ACCOUNT_ID:role/terraform-route53-access"
    # 替换为Prod账号中允许Dev账号操作Route53的角色ARN
  }
}

2. 新增必要变量

添加变量用于接收Prod账号中目标域名的Route53托管区ID:

variable "prod_zone_id" {
  type        = string
  description = "Prod根账号中目标域名的Route53托管区ID"
}

variable "region" {
  type        = string
  description = "AWS区域(CloudFront关联证书需用us-east-1)"
  default     = "us-east-1"
}

3. 修改原public_dns.tf代码

调整资源归属逻辑,让ACM证书在Dev账号创建,DNS验证记录自动写入Prod账号的Route53:

# 移除原Dev账号下的Route53 Zone资源(域名托管在Prod账号)
# resource "aws_route53_zone" "public" {
#   name = var.domain
# }

# 在Dev账号创建ACM证书
resource "aws_acm_certificate" "elb_cert" {
  domain_name                = var.domain
  subject_alternative_names  = ["*.${var.domain}"]
  validation_method          = "DNS"
}

# 在Prod账号的Route53中自动添加验证记录
resource "aws_route53_record" "cert_validation" {
  for_each = {
    for dvo in aws_acm_certificate.elb_cert.domain_validation_options : dvo.domain_name => {
      name   = dvo.resource_record_name
      record = dvo.resource_record_value
      type   = dvo.resource_record_type
    }
  }

  provider        = aws.prod
  allow_overwrite = true
  name            = each.value.name
  records         = [each.value.record]
  ttl             = 60
  type            = each.value.type
  zone_id         = var.prod_zone_id
}

# 在Dev账号等待DNS验证完成,自动签发证书
resource "aws_acm_certificate_validation" "elb_cert" {
  count                 = var.certify_domain ? 1 : 0
  certificate_arn       = aws_acm_certificate.elb_cert.arn
  validation_record_fqdns = [for record in aws_route53_record.cert_validation : record.fqdn]
}

关键注意事项

  • 权限配置:确保Prod账号的IAM角色具备route53:ChangeResourceRecordSets、route53:GetHostedZone等权限,同时Dev账号的Terraform执行角色有权限Assume该Prod角色。
  • 凭证安全:禁止硬编码账号凭证,优先使用环境变量、AWS CLI配置或IAM角色切换机制。
  • 区域适配:若证书用于CloudFront服务,必须在us-east-1区域创建ACM证书。

内容的提问来源于stack exchange,提问作者Marc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:10:30