google cloud platform – Terraform google_certificate_manager_certificate_issuance_config fails with “Config validation failed” for cross-project CA pool in GCP

Terraform Setup:

  • Terraform version: 1.13.3

  • Provider: hashicorp/google ~> 7.5.0

  • CA Pool Project: abcd-sandbox

  • Issuance Config Project: abcd-careq

I’ve already:

  • Created the CA pool and root CA in the sandbox project.

  • Enabled privateca.googleapis.com in both projects.

  • Created the Certificate Manager service account in the careq project.

Granted the following IAM roles on the CA pool for the service account:

roles/privateca.certificateRequester

resource "google_privateca_ca_pool_iam_member" "member" {
  provider = google-beta
  project  = “abcd-sandbox"
  location = "europe-north1"
  ca_pool  = google_privateca_ca_pool.root_pool.id
  role     = "roles/privateca.certificateRequester"
  //member   = "serviceAccount:service-${data.google_project.careq.number}@gcp-sa-certmanager.iam.gserviceaccount.com"
  //member   = "serviceAccount:service-${data.google_project.careq.number}@gcp-sa-certificatemanager.iam.gserviceaccount.com"
  //member = google_project_service_identity.cert_manager_sa.email
  member = "serviceAccount:${google_project_service_identity.cert_manager_sa.email}"

Ensure the identity is created before this IAM member is applied

  depends_on = [google_project_service_identity.cert_manager_sa]
}

Issuance Config in careq project

resource "google_certificate_manager_certificate_issuance_config" "default" {
  provider    = google.careq
  name        = "issuance-config-${random_string.ca_abcdsuffix.id}"
  location    = "europe-north1"
  description = "sample description for the certificate issuanceConfigs"
  certificate_authority_config {
    certificate_authority_service_config {
      //ca_pool = google_privateca_ca_pool.root_pool.id
      //ca_pool = "projects/${google_privateca_ca_pool.root_pool.project}/locations/${google_privateca_ca_pool.root_pool.location}/caPools/${google_privateca_ca_pool.root_pool.name}"
      //ca_pool = "projects/${google_privateca_ca_pool.root_pool.project}/locations/${var.location}/caPools/${var.ca-pool-name}"
      ca_pool = "projects/abcd-sandbox/locations/europe-north1/caPools/mainroot-ca-pool-zzzz7"
      //ca_pool = "projects/${google_privateca_ca_pool.root_pool.project}/locations/${google_privateca_ca_pool.root_pool.location}/caPools/${google_privateca_ca_pool.root_pool.name}"
    }
  }
  lifetime                   = "1814400s"
  rotation_window_percentage = 34
  key_algorithm              = "RSA_2048"
  labels                     = { "name" : "wrench", "count" : "3" }

  depends_on = [
    google_privateca_ca_pool_iam_member.member,
    google_privateca_certificate_authority.root_ca
  ]
}

Error is:

Error: Error waiting to create CertificateIssuanceConfig: Error
waiting for Creating CertificateIssuanceConfig: Error code 3, message:
Config validation failed │ │ with
google_certificate_manager_certificate_issuance_config.default, │ on
main.tf line 159, in resource
“google_certificate_manager_certificate_issuance_config” “default”: │
159: resource “google_certificate_manager_certificate_issuance_config”
“default” {

Read more here: Source link