scenarios/shared/terraform/modules/firewall/main.tf (116 lines of code) (raw):
resource "azurerm_public_ip" "publicIpFirewall" {
name = var.publicIpFirewallName
resource_group_name = var.hubResourceGroupName
location = var.location
allocation_method = "Static"
sku = "Standard"
zones = var.firewallAvailabilityZones
tags = var.tags
}
resource "azurerm_public_ip" "publicIpFirewallManagement" {
name = var.publicIpFirewallManagementName
resource_group_name = var.hubResourceGroupName
location = var.location
allocation_method = "Static"
sku = "Standard"
zones = var.firewallAvailabilityZones
tags = var.tags
}
resource "azurerm_firewall" "firewall" {
name = var.firewallName
resource_group_name = var.hubResourceGroupName
location = var.location
sku_name = var.firewallSkuName
sku_tier = var.firewallSkuTier
firewall_policy_id = azurerm_firewall_policy.firewallPolicy.id
zones = var.firewallAvailabilityZones
tags = var.tags
ip_configuration {
name = "configuration"
subnet_id = var.subnetFirewallId
public_ip_address_id = azurerm_public_ip.publicIpFirewall.id
}
management_ip_configuration { # Firewall with Basic SKU must have Management Ip configuration
name = "mgmtconfig"
subnet_id = var.subnetFirewallManagementId
public_ip_address_id = azurerm_public_ip.publicIpFirewallManagement.id
}
}
resource "azurerm_firewall_policy" "firewallPolicy" {
name = var.firewallPolicyName
resource_group_name = var.hubResourceGroupName
location = var.location
sku = var.firewallSkuTier
}
resource "azurerm_firewall_policy_rule_collection_group" "policyGroup" {
for_each = try({ for group in var.firewallPolicyRuleCollectionGroups : group.name => group }, toset([]))
name = each.value.name
priority = each.value.priority
firewall_policy_id = azurerm_firewall_policy.firewallPolicy.id
dynamic "application_rule_collection" {
for_each = each.value.application_rule_collections
content {
name = application_rule_collection.value.name
priority = application_rule_collection.value.priority
action = application_rule_collection.value.action
dynamic "rule" {
for_each = application_rule_collection.value.rules
content {
name = rule.value.name
source_addresses = rule.value.source_addresses
source_ip_groups = rule.value.source_ip_groups
destination_addresses = rule.value.destination_addresses
destination_fqdns = rule.value.destination_fqdns
dynamic "protocols" {
for_each = rule.value.protocols
content {
port = protocols.value.port
type = protocols.value.type
}
}
}
}
}
}
dynamic "network_rule_collection" {
for_each = each.value.network_rule_collections
content {
name = network_rule_collection.value.name
priority = network_rule_collection.value.priority
action = network_rule_collection.value.action
dynamic "rule" {
for_each = network_rule_collection.value.rules
content {
name = rule.value.name
source_addresses = rule.value.source_addresses
source_ip_groups = rule.value.source_ip_groups
destination_ports = rule.value.destination_ports
destination_addresses = rule.value.destination_addresses
destination_ip_groups = rule.value.destination_ip_groups
destination_fqdns = rule.value.destination_fqdns
protocols = rule.value.protocols
}
}
}
}
dynamic "nat_rule_collection" {
for_each = each.value.nat_rule_collections
content {
name = nat_rule_collection.value.name
priority = nat_rule_collection.value.priority
action = nat_rule_collection.value.action
dynamic "rule" {
for_each = nat_rule_collection.value.rules
content {
name = rule.value.name
source_addresses = rule.value.source_addresses
source_ip_groups = rule.value.source_ip_groups
destination_ports = rule.value.destination_ports
translated_address = rule.value.translated_address
translated_port = rule.value.translated_port
protocols = rule.value.protocols
}
}
}
}
}