demo_solution/modules/repo_terraform.azurerm.key_vault/main.tf (81 lines of code) (raw):
#Retrieving group data from AAD
data "azuread_group" "main" {
count = length(local.group_names)
display_name = local.group_names[count.index]
}
# Retrieving user data from AAD
data "azuread_user" "main" {
count = length(local.user_principal_names)
user_principal_name = local.user_principal_names[count.index]
}
# Retrieving service_principal data from AAD
data "azuread_service_principal" "main" {
count = length(local.application_names)
display_name = local.application_names[count.index]
}
# Retrieving resuorce group data
data "azurerm_resource_group" "main" {
count = var.location == null ? 1 : 0
name = var.resource_group_name
}
# Retrieving client config data on runtime
data "azurerm_client_config" "main" {}
# Retrieving subnet data
data "azurerm_subnet" "main" {
count = var.network_acls == null ? 0 : length(try(var.network_acls.subnet_associations, []))
name = var.network_acls.subnet_associations[count.index].subnet_name
virtual_network_name = var.network_acls.subnet_associations[count.index].vnet_name
resource_group_name = var.network_acls.subnet_associations[count.index].rg_name
}
# Creating key vault
#tfsec:ignore:no-purge tfsec:ignore:specify-network-acl
resource "azurerm_key_vault" "main" {
name = var.name
location = var.location != null ? var.location : data.azurerm_resource_group.main[0].location
resource_group_name = var.resource_group_name
tenant_id = data.azurerm_client_config.main.tenant_id
enabled_for_deployment = var.enabled_for_deployment
enabled_for_disk_encryption = var.enabled_for_disk_encryption
enabled_for_template_deployment = var.enabled_for_template_deployment
sku_name = var.sku
enable_rbac_authorization = var.enable_rbac_authorization
purge_protection_enabled = var.purge_protection_enabled
soft_delete_retention_days = var.soft_delete_retention_days
# Creating access policies to key vault resources for each user, group, application
dynamic "access_policy" {
for_each = var.enable_rbac_authorization ? [] : local.combined_access_policies
content {
tenant_id = data.azurerm_client_config.main.tenant_id
object_id = access_policy.value.object_id
certificate_permissions = access_policy.value.certificate_permissions
key_permissions = access_policy.value.key_permissions
secret_permissions = access_policy.value.secret_permissions
storage_permissions = access_policy.value.storage_permissions
}
}
# Creating network access control rules for key vault
network_acls {
bypass = try(var.network_acls.bypass, "AzureServices")
default_action = try(var.network_acls.default_action, "Allow")
ip_rules = try(var.network_acls.ip_rules, [])
virtual_network_subnet_ids = flatten(data.azurerm_subnet.main[*].id)
}
tags = var.tags
}
# Manages a diagnostic setting for created key vault
resource "azurerm_monitor_diagnostic_setting" "this" {
count = var.diagnostic_setting == null ? 0 : 1
name = var.diagnostic_setting.name
log_analytics_workspace_id = var.diagnostic_setting.log_analytics_workspace_id
target_resource_id = azurerm_key_vault.main.id
storage_account_id = var.diagnostic_setting.storage_account_id
eventhub_name = var.diagnostic_setting.eventhub_name
eventhub_authorization_rule_id = var.diagnostic_setting.eventhub_authorization_rule_id
dynamic "enabled_log" {
for_each = var.diagnostic_setting.log_category != null ? toset(var.diagnostic_setting.log_category) : []
content {
category = enabled_log.key
}
}
dynamic "enabled_log" {
for_each = var.diagnostic_setting.log_category_group != null ? toset(var.diagnostic_setting.log_category_group) : []
content {
category_group = enabled_log.key
}
}
dynamic "metric" {
for_each = var.diagnostic_setting.metric != null ? toset(var.diagnostic_setting.metric) : []
content {
category = metric.key
}
}
}