devenv/tf/vault.tf (120 lines of code) (raw):
resource "azurerm_key_vault" "keyvault" {
name = "dev-${random_string.random.result}a"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
tenant_id = data.azurerm_client_config.current.tenant_id
purge_protection_enabled = false
sku_name = "standard"
}
resource "azurerm_key_vault_access_policy" "allowtesteraccess" {
key_vault_id = azurerm_key_vault.keyvault.id
tenant_id = data.azurerm_client_config.current.tenant_id
object_id = data.azurerm_client_config.current.object_id
certificate_permissions = [
"Get",
"List",
"Update",
"Create",
"Delete",
"Import",
"Purge",
"Recover",
]
}
resource "azurerm_key_vault_access_policy" "allowclusteraccess" {
key_vault_id = azurerm_key_vault.keyvault.id
tenant_id = data.azurerm_client_config.current.tenant_id
object_id = data.azurerm_user_assigned_identity.clusteridentity.principal_id
certificate_permissions = [
"Get",
]
secret_permissions = [
"Get",
]
}
resource "azurerm_key_vault_certificate" "testcert-private" {
for_each = { for i,d in azurerm_private_dns_zone.dnszone : i => d }
name = "generated-cert-private-${index(tolist(var.privatezones) , each.key)}"
key_vault_id = azurerm_key_vault.keyvault.id
depends_on = [azurerm_key_vault_access_policy.allowtesteraccess]
certificate_policy {
issuer_parameters {
name = "Self"
}
key_properties {
exportable = true
key_size = 2048
key_type = "RSA"
reuse_key = true
}
lifetime_action {
action {
action_type = "AutoRenew"
}
trigger {
days_before_expiry = 30
}
}
secret_properties {
content_type = "application/x-pem-file"
}
x509_certificate_properties {
key_usage = [
"cRLSign",
"dataEncipherment",
"digitalSignature",
"keyAgreement",
"keyCertSign",
"keyEncipherment",
]
subject_alternative_names {
dns_names = ["*.${each.value.name}"]
}
subject = "CN=testcert"
validity_in_months = 12
}
}
}
resource "azurerm_key_vault_certificate" "testcert-public" {
for_each = { for i,d in azurerm_dns_zone.dnszone : i => d }
name = "generated-cert-public-${index(tolist(var.publiczones) , each.key)}"
key_vault_id = azurerm_key_vault.keyvault.id
depends_on = [azurerm_key_vault_access_policy.allowtesteraccess]
certificate_policy {
issuer_parameters {
name = "Self"
}
key_properties {
exportable = true
key_size = 2048
key_type = "RSA"
reuse_key = true
}
lifetime_action {
action {
action_type = "AutoRenew"
}
trigger {
days_before_expiry = 30
}
}
secret_properties {
content_type = "application/x-pem-file"
}
x509_certificate_properties {
key_usage = [
"cRLSign",
"dataEncipherment",
"digitalSignature",
"keyAgreement",
"keyCertSign",
"keyEncipherment",
]
subject_alternative_names {
dns_names = ["*.${each.value.name}"]
}
subject = "CN=testcert"
validity_in_months = 12
}
}
}