I get the error message below:
Error: parsing "/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Network/applicationGateways/<app_gateway_name>/sslCertificates/<cert_name>": KeyVault Nested Item should contain 2 or 3 segments, got 10 from "subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Network/applicationGateways/<app_gateway_name>/sslCertificates/<cert_name>"
I suppose the key error is "KeyVault Nested Item should contain 2 or 3 segments, got 10" but I have no idea what this means.
What I'm trying to do:
Via Terraform (azurerm), create an application gateway resource with a HTTPS(443) listener. I uploaded the certificate to the Azure Key (with Vault access policy) and created a managed identity to access that cert. In the portal, I can setup the listener with HTTPS using the managed identity and cert - no issues. Everything works as expected.
However, when I try to do the same in Terraform, I'm getting the error above.
Here's what I have:
data "azurerm_key_vault" "cert_store" {
name = "certstore"
resource_group_name = local.resource_group.name
}
data "azurerm_key_vault_certificate" "tls_cert" {
name = "tls_cert"
key_vault_id = data.azurerm_key_vault.cert_store.id
}
resource "azurerm_application_gateway" "app_gateway" {
name = "app_gateway1"
resource_group_name = local.resource_group.name
location = local.resource_group.location
sku {
name = var.gateway_vars.sku.name
tier = var.gateway_vars.sku.tier
capacity = 2
}
gateway_ip_configuration {
name = "${var.gateway_vars.name}-ip-configuration"
subnet_id = data.azurerm_subnet.gateway_subnet.id
}
frontend_port {
name = "port_80"
port = 80
}
frontend_port {
name = "port_443"
port = 443
}
identity {
type = "UserAssigned"
identity_ids = [
azurerm_user_assigned_identity.app_gateway_managed_identity.id
]
}
ssl_certificate {
key_vault_secret_id = data.azurerm_key_vault_certificate.cert_store.id
name = "tls_cert"
}
frontend_ip_configuration {
name = "frontendIp"
public_ip_address_id = azurerm_public_ip.app_gateway.id
}
backend_address_pool {
name = "frontend-pool"
fqdns = ["fqdn.com"]
}
# https settings - used to connect to backend services via https
backend_http_settings {
name = "https"
cookie_based_affinity = "Disabled"
port = 443
protocol = "Https"
request_timeout = 60
path = "/"
pick_host_name_from_backend_address = true
}
http_listener {
name = "http80-listener"
frontend_ip_configuration_name = "frontendIp"
frontend_port_name = "port_80"
protocol = "Http"
}
http_listener {
name = "https443-listener"
frontend_ip_configuration_name = "frontendIp"
frontend_port_name = "port_443"
protocol = "Https"
ssl_certificate_name = "tls_cert"
require_sni = false
}
url_path_map {
name = "path-map"
default_backend_address_pool_name = "frontend-pool"
default_backend_http_settings_name = "https"
path_rule {
name = "xx"
paths = ["/path"]
backend_address_pool_name = "frontend-pool"
backend_http_settings_name = "https"
}
}
request_routing_rule {
name = "tdr-routing-rule-443"
rule_type = "PathBasedRouting"
http_listener_name = "https443-listener"
url_path_map_name = "path-map"
}
}