main.tf (149 lines of code) (raw):

resource "azurerm_firewall_policy" "this" { location = var.location name = var.name resource_group_name = var.resource_group_name auto_learn_private_ranges_enabled = var.firewall_policy_auto_learn_private_ranges_enabled base_policy_id = var.firewall_policy_base_policy_id private_ip_ranges = var.firewall_policy_private_ip_ranges sku = var.firewall_policy_sku sql_redirect_allowed = var.firewall_policy_sql_redirect_allowed tags = var.tags threat_intelligence_mode = var.firewall_policy_threat_intelligence_mode dynamic "dns" { for_each = var.firewall_policy_dns == null ? [] : [var.firewall_policy_dns] content { proxy_enabled = dns.value.proxy_enabled servers = dns.value.servers } } dynamic "explicit_proxy" { for_each = var.firewall_policy_explicit_proxy == null ? [] : [var.firewall_policy_explicit_proxy] content { enable_pac_file = explicit_proxy.value.enable_pac_file enabled = explicit_proxy.value.enabled http_port = explicit_proxy.value.http_port https_port = explicit_proxy.value.https_port pac_file = explicit_proxy.value.pac_file pac_file_port = explicit_proxy.value.pac_file_port } } dynamic "identity" { for_each = var.firewall_policy_identity == null ? [] : [var.firewall_policy_identity] content { type = identity.value.type identity_ids = identity.value.identity_ids } } dynamic "insights" { for_each = var.firewall_policy_insights == null ? [] : [var.firewall_policy_insights] content { default_log_analytics_workspace_id = insights.value.default_log_analytics_workspace_id enabled = insights.value.enabled retention_in_days = insights.value.retention_in_days dynamic "log_analytics_workspace" { for_each = insights.value.log_analytics_workspace == null ? [] : insights.value.log_analytics_workspace content { firewall_location = log_analytics_workspace.value.firewall_location id = log_analytics_workspace.value.id } } } } dynamic "intrusion_detection" { for_each = var.firewall_policy_intrusion_detection == null ? [] : [var.firewall_policy_intrusion_detection] content { mode = intrusion_detection.value.mode private_ranges = intrusion_detection.value.private_ranges dynamic "signature_overrides" { for_each = intrusion_detection.value.signature_overrides == null ? [] : intrusion_detection.value.signature_overrides content { id = signature_overrides.value.id state = signature_overrides.value.state } } dynamic "traffic_bypass" { for_each = intrusion_detection.value.traffic_bypass == null ? [] : intrusion_detection.value.traffic_bypass content { name = traffic_bypass.value.name protocol = traffic_bypass.value.protocol description = traffic_bypass.value.description destination_addresses = traffic_bypass.value.destination_addresses destination_ip_groups = traffic_bypass.value.destination_ip_groups destination_ports = traffic_bypass.value.destination_ports source_addresses = traffic_bypass.value.source_addresses source_ip_groups = traffic_bypass.value.source_ip_groups } } } } dynamic "threat_intelligence_allowlist" { for_each = var.firewall_policy_threat_intelligence_allowlist == null ? [] : [var.firewall_policy_threat_intelligence_allowlist] content { fqdns = threat_intelligence_allowlist.value.fqdns ip_addresses = threat_intelligence_allowlist.value.ip_addresses } } dynamic "timeouts" { for_each = var.firewall_policy_timeouts == null ? [] : [var.firewall_policy_timeouts] content { create = timeouts.value.create delete = timeouts.value.delete read = timeouts.value.read update = timeouts.value.update } } dynamic "tls_certificate" { for_each = var.firewall_policy_tls_certificate == null ? [] : [var.firewall_policy_tls_certificate] content { key_vault_secret_id = tls_certificate.value.key_vault_secret_id name = tls_certificate.value.name } } } # Assigning Roles to the Virtual Network based on the provided configurations. resource "azurerm_role_assignment" "this" { for_each = var.role_assignments principal_id = each.value.principal_id scope = azurerm_firewall_policy.this.id condition = each.value.condition condition_version = each.value.condition_version delegated_managed_identity_resource_id = each.value.delegated_managed_identity_resource_id role_definition_id = strcontains(lower(each.value.role_definition_id_or_name), lower(local.role_definition_resource_substring)) ? each.value.role_definition_id_or_name : null role_definition_name = strcontains(lower(each.value.role_definition_id_or_name), lower(local.role_definition_resource_substring)) ? null : each.value.role_definition_id_or_name skip_service_principal_aad_check = each.value.skip_service_principal_aad_check } resource "azurerm_monitor_diagnostic_setting" "this" { for_each = var.diagnostic_settings name = each.value.name != null ? each.value.name : "diag-${var.name}" target_resource_id = azurerm_firewall_policy.this.id eventhub_authorization_rule_id = each.value.event_hub_authorization_rule_resource_id eventhub_name = each.value.event_hub_name log_analytics_destination_type = each.value.log_analytics_destination_type log_analytics_workspace_id = each.value.workspace_resource_id partner_solution_id = each.value.marketplace_partner_resource_id storage_account_id = each.value.storage_account_resource_id dynamic "enabled_log" { for_each = each.value.log_categories content { category = enabled_log.value } } dynamic "enabled_log" { for_each = each.value.log_groups content { category_group = enabled_log.value } } dynamic "metric" { for_each = each.value.metric_categories content { category = metric.value } } } # required AVM resources interfaces resource "azurerm_management_lock" "this" { count = var.lock != null ? 1 : 0 lock_level = var.lock.kind name = coalesce(var.lock.name, "lock-${var.lock.kind}") scope = azurerm_firewall_policy.this.id # TODO: Replace with your azurerm resource name notes = var.lock.kind == "CanNotDelete" ? "Cannot delete the resource or its child resources." : "Cannot delete or modify the resource or its child resources." }