Terraform报错:关联ACM PCA证书与证书权威失败
问题描述
我是Terraform新手,配置代码时遇到阻碍。尝试通过ACM PCA签发可续期证书,创建带certificate_authority_arn参数的aws_acm_certificate资源,目标是用ACMPCA创建根CA、安装CA证书并使用ACM请求私有CA证书。ACM资源部署后处于失败状态,出现验证错误,且结合aws_acmpca_certificate与aws_acm_certificate时遇到循环依赖错误。
代码
provider "aws" { region = "us-east-1" } # 创建根CA resource "aws_acmpca_certificate_authority" "pca_cert" { type = "ROOT" certificate_authority_configuration { key_algorithm = "RSA_2048" signing_algorithm = "SHA256WITHRSA" subject { common_name = "cf-demo.com" } } permanent_deletion_time_in_days = 7 } # 安装根CA证书 resource "aws_acmpca_certificate_authority_certificate" "cert_authority_certificate" { certificate_authority_arn = aws_acmpca_certificate_authority.pca_cert.arn certificate = aws_acm_certificate.demo_acm_cert.arn } # 通过ACM请求证书 resource "aws_acm_certificate" "demo_acm_cert" { domain_name = "cf-demo.com" certificate_authority_arn = aws_acmpca_certificate_authority.pca_cert.arn } # 授予ACM访问CA的权限 resource "aws_acmpca_permission" "root_ca_permission" { certificate_authority_arn = aws_acmpca_certificate_authority.pca_cert.arn actions = ["IssueCertificate", "GetCertificate", "ListPermissions"] principal = "acm.amazonaws.com" }
错误信息
Error: associating ACM PCA Certificate with Certificate Authority (arn:aws:acm-pca:us-east-1:123456789012:certificate-authority/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx): ValidationException: 1 validation error detected: Value at 'certificate' failed to satisfy constraint: Member must satisfy regular expression pattern: -----BEGIN CERTIFICATE-----\r?\n([A-Za-z0-9/+]{64}\r?\n)*[A-Za-z0-9/+]{1,64}={0,2}\r?\n-----END CERTIFICATE-----( ? )?. │ status code: 400, request id: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx │ │ with aws_acmpca_certificate_authority_certificate.cert_authority_certificate, │ on cert.tf line 32, in resource "aws_acmpca_certificate_authority_certificate" "cert_authority_certificate": │ 32: resource "aws_acmpca_certificate_authority_certificate" "cert_authority_certificate" {
解决方案
核心问题分析
- 证书格式错误:
aws_acmpca_certificate_authority_certificate的certificate字段需要PEM格式的证书内容,你传入的是ACM证书ARN,不符合格式要求。 - 根CA逻辑颠倒:根CA需要先自签发自身证书才能生效,你试图用ACM请求的证书作为根CA证书,逻辑完全错误。
- 循环依赖风险:错误的资源依赖关系会触发循环依赖,必须明确资源创建顺序。
修正后的代码
provider "aws" { region = "us-east-1" } # 1. 创建根CA实例 resource "aws_acmpca_certificate_authority" "root_ca" { type = "ROOT" certificate_authority_configuration { key_algorithm = "RSA_2048" signing_algorithm = "SHA256WITHRSA" subject { common_name = "cf-demo-root-ca.com" } } permanent_deletion_time_in_days = 7 } # 2. 自签发根CA证书(根CA必须自己签署自身证书) resource "aws_acmpca_certificate" "root_ca_cert" { certificate_authority_arn = aws_acmpca_certificate_authority.root_ca.arn certificate_signing_request = aws_acmpca_certificate_authority.root_ca.certificate_signing_request signing_algorithm = "SHA256WITHRSA" template_arn = "arn:aws:acm-pca:::template/RootCACertificate/V1" validity { type = "YEARS" value = 10 } } # 3. 安装根CA证书到CA实例 resource "aws_acmpca_certificate_authority_certificate" "root_ca_install" { certificate_authority_arn = aws_acmpca_certificate_authority.root_ca.arn certificate = aws_acmpca_certificate.root_ca_cert.certificate certificate_chain = aws_acmpca_certificate.root_ca_cert.certificate } # 4. 授予ACM操作根CA的权限 resource "aws_acmpca_permission" "acm_access" { certificate_authority_arn = aws_acmpca_certificate_authority.root_ca.arn actions = ["IssueCertificate", "GetCertificate", "ListPermissions"] principal = "acm.amazonaws.com" depends_on = [aws_acmpca_certificate_authority_certificate.root_ca_install] } # 5. 通过ACM向根CA请求私有证书 resource "aws_acm_certificate" "demo_cert" { domain_name = "cf-demo.com" certificate_authority_arn = aws_acmpca_certificate_authority.root_ca.arn validation_method = "NONE" # 私有证书无需公开验证 depends_on = [aws_acmpca_permission.acm_access] }
关键修正点
- 根CA自签发:用
aws_acmpca_certificate基于根CA自身的CSR生成自签名证书,这是根CA生效的必要步骤。 - 证书格式合规:
aws_acmpca_certificate_authority_certificate的certificate字段使用aws_acmpca_certificate.root_ca_cert.certificate,这是符合要求的PEM格式证书内容。 - 明确依赖顺序:通过
depends_on确保资源创建顺序:根CA → 自签证书 → 安装证书 → 授权ACM → ACM请求证书,彻底避免循环依赖。 - 私有证书验证设置:私有证书无需DNS或邮件验证,设置
validation_method = "NONE"。
验证步骤
- 执行
terraform init初始化配置。 - 执行
terraform plan确认资源创建顺序正确。 - 执行
terraform apply部署资源,此时根CA会正常生效,ACM证书也能成功签发。
内容的提问来源于stack exchange,提问作者S Parker
相关产品推荐
相关产品推荐

