Terraform v0.12.21
resource "vault_mount" "root" {
type = "pki"
path = "pki-ca-test"
default_lease_ttl_seconds = 31556952
max_lease_ttl_seconds = 157680000
description = "Root Certificate Authority"
}
resource "vault_mount" "pki_int" {
type = "pki"
path = "pki-int-ca-test"
default_lease_ttl_seconds = 63072000
max_lease_ttl_seconds = 63072000
description = "Intermediate Authority for test.com"
}
resource "vault_pki_secret_backend_intermediate_cert_request" "intermediate" {
backend = vault_mount.pki_int.path
type = "exported"
common_name = "Test Intermediate Certificate"
format = "pem"
private_key_format = "der"
key_type = "rsa"
key_bits = "2048"
}
resource "vault_pki_secret_backend_root_sign_intermediate" "intermediate" {
backend = vault_mount.root.path
csr = vault_pki_secret_backend_intermediate_cert_request.intermediate.csr
common_name = "Test Intermediate Certificate"
exclude_cn_from_sans = true
ou = "Development"
organization = "test.com"
ttl = 31536000
}
output "chain" {
value = vault_pki_secret_backend_root_sign_intermediate.intermediate.ca_chain
}
Certificates chain
empty output
terraform applyI am experiencing the same issue. My vault_mount.root.path PKI engine contains two certificates, so I would expect vault_pki_secret_backend_root_sign_intermediate.intermediate.ca_chain to contain three certificates, but it is null in my tfstate file.
I found a solution, use data "vault_generic_secret" instead of vault_pki_secret_backend_root_sign_intermediate.*.ca_chain:
# Sign the certificate signing request in the root Vault server / namespace
resource "vault_pki_secret_backend_root_sign_intermediate" "root" {
provider = vault.vault-config-root
backend = var.vault_root_pki_path
csr = vault_pki_secret_backend_intermediate_cert_request.intermediate.csr
common_name = "Intermediate CA"
}
# Get the full CA chain from the signing Vault PKI engine
data "vault_generic_secret" "root_ca_chain" {
provider = vault.vault-config-root
path = "${var.vault_root_pki_path}/cert/ca_chain"
}
# Add the signed ca chain as the intermediate within the target Vault server / namespace
resource "vault_pki_secret_backend_intermediate_set_signed" "intermediate" {
provider = vault.vault-config-target
backend = vault_mount.pki.path
certificate = <<-EOT
${vault_pki_secret_backend_root_sign_intermediate.root.certificate}
${data.vault_generic_secret.root_ca_chain.data.certificate}
EOT
}
Most helpful comment
I found a solution, use
data "vault_generic_secret"instead ofvault_pki_secret_backend_root_sign_intermediate.*.ca_chain: