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

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" {
解决方案

核心问题分析

  1. 证书格式错误:aws_acmpca_certificate_authority_certificate的certificate字段需要PEM格式的证书内容,你传入的是ACM证书ARN,不符合格式要求。
  2. 根CA逻辑颠倒:根CA需要先自签发自身证书才能生效,你试图用ACM请求的证书作为根CA证书,逻辑完全错误。
  3. 循环依赖风险:错误的资源依赖关系会触发循环依赖,必须明确资源创建顺序。

修正后的代码

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"。

验证步骤

  1. 执行terraform init初始化配置。
  2. 执行terraform plan确认资源创建顺序正确。
  3. 执行terraform apply部署资源,此时根CA会正常生效,ACM证书也能成功签发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:04:58