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

resource "azurerm_web_application_firewall_policy" "this" { location = var.location name = var.name resource_group_name = var.resource_group_name tags = var.tags dynamic "managed_rules" { for_each = [var.managed_rules] content { dynamic "managed_rule_set" { for_each = managed_rules.value.managed_rule_set content { version = managed_rule_set.value.version type = managed_rule_set.value.type dynamic "rule_group_override" { for_each = managed_rule_set.value.rule_group_override == null ? {} : managed_rule_set.value.rule_group_override content { rule_group_name = rule_group_override.value.rule_group_name dynamic "rule" { for_each = rule_group_override.value.rule == null ? [] : rule_group_override.value.rule content { id = rule.value.id action = rule.value.action enabled = rule.value.enabled } } } } } } dynamic "exclusion" { for_each = managed_rules.value.exclusion == null ? {} : managed_rules.value.exclusion content { match_variable = exclusion.value.match_variable selector = exclusion.value.selector selector_match_operator = exclusion.value.selector_match_operator dynamic "excluded_rule_set" { for_each = exclusion.value.excluded_rule_set == null ? [] : [exclusion.value.excluded_rule_set] content { type = excluded_rule_set.value.type version = excluded_rule_set.value.version dynamic "rule_group" { for_each = excluded_rule_set.value.rule_group == null ? [] : excluded_rule_set.value.rule_group content { rule_group_name = rule_group.value.rule_group_name excluded_rules = rule_group.value.excluded_rules } } } } } } } } dynamic "custom_rules" { for_each = var.custom_rules == null ? {} : var.custom_rules content { action = custom_rules.value.action priority = custom_rules.value.priority rule_type = custom_rules.value.rule_type enabled = custom_rules.value.enabled group_rate_limit_by = custom_rules.value.group_rate_limit_by name = custom_rules.value.name rate_limit_duration = custom_rules.value.rate_limit_duration rate_limit_threshold = custom_rules.value.rate_limit_threshold dynamic "match_conditions" { for_each = custom_rules.value.match_conditions content { operator = match_conditions.value.operator match_values = match_conditions.value.match_values negation_condition = match_conditions.value.negation_condition transforms = match_conditions.value.transforms dynamic "match_variables" { for_each = match_conditions.value.match_variables content { variable_name = match_variables.value.variable_name selector = match_variables.value.selector } } } } } } dynamic "policy_settings" { for_each = var.policy_settings == null ? [] : [var.policy_settings] content { enabled = policy_settings.value.enabled file_upload_limit_in_mb = policy_settings.value.file_upload_limit_in_mb js_challenge_cookie_expiration_in_minutes = policy_settings.value.js_challenge_cookie_expiration_in_minutes max_request_body_size_in_kb = policy_settings.value.max_request_body_size_in_kb mode = policy_settings.value.mode request_body_check = policy_settings.value.request_body_check request_body_inspect_limit_in_kb = policy_settings.value.request_body_inspect_limit_in_kb dynamic "log_scrubbing" { for_each = policy_settings.value.log_scrubbing == null ? [] : [policy_settings.value.log_scrubbing] content { enabled = log_scrubbing.value.enabled dynamic "rule" { for_each = log_scrubbing.value.rule == null ? [] : log_scrubbing.value.rule content { match_variable = rule.value.match_variable enabled = rule.value.enabled selector = rule.value.selector selector_match_operator = rule.value.selector_match_operator } } } } } } dynamic "timeouts" { for_each = var.timeouts == null ? [] : [var.timeouts] content { create = timeouts.value.create delete = timeouts.value.delete read = timeouts.value.read update = timeouts.value.update } } } # 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_web_application_firewall_policy.this.id notes = var.lock.kind == "CanNotDelete" ? "Cannot delete the resource or its child resources." : "Cannot delete or modify the resource or its child resources." } resource "azurerm_role_assignment" "this" { for_each = var.role_assignments principal_id = each.value.principal_id scope = azurerm_web_application_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 }