workload/terraform/modules/keyvault/keyvault.tf (73 lines of code) (raw):

resource "azurerm_key_vault" "kv" { name = local.keyvault_name tenant_id = data.azurerm_client_config.current.tenant_id location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name sku_name = "standard" purge_protection_enabled = true tags = local.tags depends_on = [ azurerm_resource_group.rg, azurerm_virtual_desktop_host_pool.hostpool, azurerm_virtual_desktop_workspace.workspace, azurerm_virtual_desktop_application_group.dag ] lifecycle { ignore_changes = [access_policy, tags] } network_acls { default_action = "Deny" bypass = "AzureServices" ip_rules = local.allow_list_ip } } resource "azurerm_key_vault_access_policy" "deploy" { key_vault_id = azurerm_key_vault.kv.id tenant_id = data.azurerm_client_config.current.tenant_id object_id = data.azurerm_client_config.current.object_id key_permissions = ["Get", "List", "Update", "Create", "Import", "Delete", "Recover"] secret_permissions = ["Get", "List", "Set", "Delete", "Purge", "Recover"] certificate_permissions = ["Get", "List", "Update", "Create", "Import", "Delete", "Purge", "Recover"] storage_permissions = ["Get", "List", "Update", "Delete"] } # Get Private DNS Zone for the Key Vault Private Endpoints data "azurerm_private_dns_zone" "pe-vaultdns-zone" { name = "privatelink.vaultcore.azure.net" resource_group_name = var.ad_rg provider = azurerm.hub } resource "azurerm_private_endpoint" "kvpe" { name = "pe-${local.keyvault_name}-vault" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name subnet_id = data.azurerm_subnet.subnet.id tags = local.tags lifecycle { ignore_changes = [tags] } private_service_connection { name = "psc-kv-${var.prefix}" private_connection_resource_id = azurerm_key_vault.kv.id is_manual_connection = false subresource_names = ["Vault"] } depends_on = [ azurerm_key_vault.kv, azurerm_key_vault_secret.localpassword ] private_dns_zone_group { name = "dns-kv-${var.prefix}" private_dns_zone_ids = data.azurerm_private_dns_zone.pe-vaultdns-zone.*.id } } # Generate VM local password resource "random_password" "vmpass" { length = 20 special = true } # Create Key Vault Secret resource "azurerm_key_vault_secret" "localpassword" { name = "vmlocalpassword" value = random_password.vmpass.result key_vault_id = azurerm_key_vault.kv.id content_type = "Password" } # Linking DNS Zone to the VNET resource "azurerm_private_dns_zone_virtual_network_link" "vaultlink" { name = "keydnsvnet_link" resource_group_name = var.ad_rg private_dns_zone_name = data.azurerm_private_dns_zone.pe-vaultdns-zone.name virtual_network_id = data.azurerm_virtual_network.vnet.id lifecycle { ignore_changes = [tags] } }