demo_solution/modules/repo_terraform.azurerm.azure_firewall/main.tf (89 lines of code) (raw):

# Get resource group data data "azurerm_resource_group" "rg" { name = var.resource_group_name } # Get subnet to associate with Azure firewall data "azurerm_subnet" "subnet_associate" { name = lookup(var.subnet_associate, "subnet_name", "AzureFirewallSubnet") virtual_network_name = var.subnet_associate.vnet_name resource_group_name = lookup(var.subnet_associate, "rg_name", var.resource_group_name) } # Get public IP data data "azurerm_public_ip" "public_ip" { name = var.public_ip_address.name resource_group_name = var.public_ip_address.rg_name } data "azurerm_firewall_policy" "policy" { count = var.firewall_policy_name != null ? 1 : 0 name = var.firewall_policy_name resource_group_name = var.firewall_policy_rg_name } # Create Azure firewall resource "azurerm_firewall" "firewall" { name = var.name location = var.location == null ? data.azurerm_resource_group.rg.location : var.location resource_group_name = var.resource_group_name sku_tier = var.sku_tier sku_name = var.sku_name zones = var.zones == null ? null : var.zones firewall_policy_id = var.firewall_policy_name != null ? data.azurerm_firewall_policy.policy[0].id : null tags = var.tags ip_configuration { name = "ip_configuration" subnet_id = data.azurerm_subnet.subnet_associate.id public_ip_address_id = data.azurerm_public_ip.public_ip.id } dynamic "management_ip_configuration" { for_each = var.management_ip_configuration content { name = management_ip_configuration.value.name subnet_id = management_ip_configuration.value.subnet_id public_ip_address_id = management_ip_configuration.value.public_ip_address_id } } } # Create Azure firewall network rule collections resource "azurerm_firewall_network_rule_collection" "netw_rule_collection" { for_each = { for net_rule in var.netw_rule_collections : net_rule.name => net_rule } name = each.value.name azure_firewall_name = azurerm_firewall.firewall.name resource_group_name = azurerm_firewall.firewall.resource_group_name priority = each.value.priority action = each.value.action dynamic "rule" { for_each = { for rules in lookup(each.value, "rule", []) : rules.name => rules } content { name = lookup(rule.value, "name") description = lookup(rule.value, "description", null) source_addresses = lookup(rule.value, "source_addresses", null) source_ip_groups = lookup(rule.value, "source_ip_groups", null) destination_addresses = lookup(rule.value, "destination_addresses", null) destination_ip_groups = lookup(rule.value, "destination_ip_groups", null) destination_fqdns = lookup(rule.value, "destination_fqdns", null) destination_ports = lookup(rule.value, "destination_ports") protocols = lookup(rule.value, "protocols") } } } # Manages a diagnostic setting for Azure firewall 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_firewall.firewall.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 } } }