Azure landing zones

Azure landing zones in Terraform and ARM, with the firewall in the hub.

Four ready-to-deploy Azure reference architectures, from a single gateway to a scale-out fleet, each running the Enforza firewall and secure NAT as a network virtual appliance in your own subscription. Same egress, ingress and east-west control as Azure Firewall, at a flat per-firewall price with no per-GB data-processing tax.

An in-pattern substitution

The hub firewall slot the Cloud Adoption Framework already blesses

Deploy Azure Firewall or partner NVAs in the central-hub virtual network for east/west or south/north traffic protection and filtering.
Microsoft Cloud Adoption Framework, Traditional Azure networking topology, design recommendations. Read the guidance

Enforza is a partner network virtual appliance, so putting it in the hub is the supported pattern, not a workaround. It takes the same slot Azure Firewall would, does the same core egress and east-west job with FQDN and SNI-based Layer 7 filtering and secure NAT, and bills as a flat per-firewall licence instead of a per-hour, per-GB meter.

How to deploy, once for all four

Two deploy flavours, two IaC formats, same networking

Every pattern ships in Terraform and in an ARM template, and in two flavours that build identical networking. Only the firewall image and its bootstrap differ. The templates are refreshed to the current registration contract and validated.

deployment-key

Boots a stock Ubuntu image and installs the engine with a one-time registration key from the console (Onboard Firewall, Deployment Keys). No Marketplace subscription. These are the flavours we deployed and proved end-to-end in a real Azure subscription.

marketplace-image

Boots the Enforza Azure Marketplace image and self-registers via the Azure Instance Metadata Service. You then claim it in the console by subscription ID plus VM ID. No key to manage.

Get the templates

The four Azure patterns live in the public repository, alongside the AWS patterns. Clone it, pick a pattern directory, then run terraform apply or launch the ARM template (arm/azuredeploy.json is the one-click Deploy-to-Azure button target). You need the Azure CLI authenticated, and Terraform 1.0 or newer for the Terraform route.

Prerequisites, and how registration works

  • An Azure subscription and credentials able to create a VNet, subnets, VMs, an NSG, public IPs and route tables, plus an internal load balancer for the multi-gateway patterns.
  • Terraform 1.0 or newer, or the Azure portal or CLI for the ARM route.
  • A deployment key per gateway from the console, or a Marketplace subscription for the marketplace-image flavour.

Each gateway registers itself on first boot, and the control plane is outbound-only: the gateway reaches up to the Enforza cloud, with no inbound management port to expose. Attach policy in the console once it appears under Firewalls.

Single gateway

Single gateway: one gateway in a new Azure network

Who it is for: dev, test and single-zone small production, and the quickest way to stand up a filtered egress edge in a brand new Azure network.

What it deploys

  • A VNet (10.0.0.0/16), a public gateway subnet and two private workload subnets, plus a network security group.
  • One Enforza gateway VM on a stock Ubuntu image, with IP forwarding on the network interface and a Standard static public IP for egress.
  • Route tables that send each workload subnet's 0.0.0.0/0 at the gateway's private IP.

How to use it, and limits

  • Copy the example variables, set your subscription ID and one deployment key, then terraform apply or launch the ARM template.
  • The firewall appears in the console under Firewalls; attach policy.
  • Single zone, no high availability. If the gateway or its zone fails, egress stops until it recovers. For resilience, step up to the zone-redundant pair.
Internet
VNet 10.0.0.0/16 (built by the template)
Public gateway subnet · 10.0.1.0/24
Azure virtual machine
Enforza gateway
NVA on a VM · IP forwarding on · secure NAT + L7 · key 1
Standard static public IP Network security group
Private subnet 1 · 10.0.10.0/24
Route table (UDR)
Azure virtual machine
Workloads
Private subnet 2 · 10.0.20.0/24
Route table (UDR)
Azure virtual machine
Workloads
Single zone · no HA
Packet path: a workload sends to the internet, its route table sends 0.0.0.0/0 at the gateway's private IP, the Enforza NVA applies Layer 7 egress policy and source-NATs behind its Standard public IP, then exits the VNet. Return traffic follows the reverse path. IP forwarding on the gateway's network interface is the one switch a forwarding appliance needs that the image cannot set for itself, the Azure analogue of disabling the AWS source and destination check. The gateway registers itself on first boot with one deployment key.

Indicative Azure infrastructure cost about $30/month, excluding the Enforza licence and region-dependent. It is your own Azure cost, not something Enforza removes.

Production HA · zone-redundant pair

Zone-redundant pair: two gateways across availability zones

Who it is for: production that wants resilience across availability zones, built from scratch, without standing up a hub first.

What it deploys

  • The same from-scratch VNet, public gateway subnet, two private workload subnets and network security group.
  • Two Enforza gateway VMs, one in each of two availability zones, each with IP forwarding on and its own zonal Standard static public IP.
  • An internal Standard load balancer with an HA Ports rule (one rule that load-balances all ports and protocols) fronting both gateways, with a health probe.
  • Route tables on both private subnets sending 0.0.0.0/0 through the load balancer, associated for you.

How to use it

  • Two gateways means two firewalls, so provide two different deployment keys (one-time use per firewall).
  • Both gateways register and appear in the console; attach the same policy to each.
  • The internal load balancer with HA Ports and a health probe spreads traffic across both zonal gateways and drops an unhealthy one.
Internet
VNet 10.0.0.0/16 (built by the template)
Public gateway subnet 10.0.1.0/24 · gateway VMs
Availability zone 1
Azure virtual machine
Enforza gateway 1
IP forwarding on · secure NAT + L7 · key 1
Standard static public IP
Availability zone 2
Azure virtual machine
Enforza gateway 2
IP forwarding on · secure NAT + L7 · key 2
Standard static public IP

Internal load balancer · HA Ports spreads traffic across both gateways, health probe on each

Network security group applied to each gateway

Private subnet 1 · 10.0.10.0/24
Route table (UDR)
Azure virtual machine
Workloads
Private subnet 2 · 10.0.20.0/24
Route table (UDR)
Azure virtual machine
Workloads
Two gateways across availability zones, built from scratch
The template builds the whole network, then places two gateway VMs across two availability zones behind an internal load balancer with an HA Ports rule (one rule that load-balances all ports and protocols) and points both private subnets at it with a route table. Each gateway boots a stock Ubuntu image and registers itself on first boot with its own deployment key from the console. Keys are one-time use per firewall, so this pattern needs two different keys. Attach the same policy to each gateway in the console once they appear under Firewalls.

Indicative Azure infrastructure cost about $70/month, excluding the Enforza licence and region-dependent. It is your own Azure cost, covering two VMs, the internal load balancer and the public IPs.

Hub-spoke · centralised egress

Hub-spoke centralised egress: one inspected edge for every spoke

Who it is for: a multi-VNet estate that wants one inspected, cost-controlled egress edge, with the firewall pair in a hub and workloads in peered spokes.

What it deploys

  • A hub VNet carrying the Enforza gateway pair, two gateways across availability zones behind an internal Standard load balancer with HA Ports, the same resilient edge as the zone-redundant pattern.
  • Spoke VNets peered to the hub, each with a route table that sends 0.0.0.0/0 at the hub's internal load balancer.
  • Two deployment keys, one per gateway in the hub pair.

How to use it, and limits

  • Adding a spoke is one VNet peering, one route table and one association, so every new VNet inherits the same inspected egress edge.
  • All spoke egress is inspected and source-NATed centrally by the gateway pair, rather than by a firewall per spoke.
  • You still pay Azure for VNet peering and its data transfer, which Enforza does not remove.
Internet
Hub VNet 10.0.0.0/16 · gateway pair (two zones)
Availability zone 1
Azure virtual machine
Enforza gateway 1
secure NAT + L7 · key 1
Standard static public IP
Availability zone 2
Azure virtual machine
Enforza gateway 2
secure NAT + L7 · key 2
Standard static public IP

Internal load balancer · HA Ports the single hub egress edge for every peered spoke

Spoke VNet A · 10.1.0.0/16
Route table (UDR)
Azure virtual machine
Workloads
Spoke VNet B · 10.2.0.0/16
Route table (UDR)
Azure virtual machine
Workloads
Every spoke VNet peers to the hub and points 0.0.0.0/0 at the hub's internal load balancer, so all spoke egress is inspected and source-NATed centrally by the Enforza gateway pair rather than by a firewall per spoke. Adding a spoke is one peering, one route table and one association. You still pay Azure for VNet peering and its data transfer, which Enforza does not remove.

Indicative Azure infrastructure cost about $90/month, excluding the Enforza licence and region-dependent. It is your own Azure cost, covering the gateway pair, the internal load balancer, the public IPs and VNet peering.

Scale-out · load-balancer fleet

Scale-out fleet: three gateways across zones behind the internal load balancer

Who it is for: teams that want horizontal scale and headroom, three gateways spread across availability zones 1, 2 and 3, all fronted by one internal load balancer.

What it deploys

  • The same from-scratch network, with three Enforza gateway VMs, one in each of availability zones 1, 2 and 3, each with IP forwarding on and a Standard static public IP.
  • An internal Standard load balancer with an HA Ports rule and a health probe, spreading flows across all three gateways.
  • Route tables sending workload 0.0.0.0/0 through the internal load balancer. Three deployment keys, one per gateway.

Accurate framing, and how to scale

  • This is a routed scale-out fleet behind an internal load balancer, not Azure Gateway Load Balancer. Steering is by user-defined route, not transparent VXLAN inspection.
  • Scale by sizing the gateway VMs or adding more behind the load balancer; the price per firewall does not change with VM size.
  • The load balancer removes an unhealthy gateway automatically, so the fleet keeps running.
Internet
VNet 10.0.0.0/16 (built by the template)
Public gateway subnet · three-gateway fleet
Availability zone 1
Azure virtual machine
Enforza gateway 1
secure NAT + L7 · key 1
Availability zone 2
Azure virtual machine
Enforza gateway 2
secure NAT + L7 · key 2
Availability zone 3
Azure virtual machine
Enforza gateway 3
secure NAT + L7 · key 3

Internal load balancer · HA Ports spreads flows across all three gateways, health probe on each

Private workload subnets
Route table (UDR)
Azure virtual machine
Workloads
Routed steering behind an internal load balancer · not Azure Gateway Load Balancer
Three gateways across zones 1, 2 and 3 behind one internal load balancer scale egress horizontally: add capacity by sizing or adding gateway VMs, and the load balancer removes an unhealthy gateway automatically. Steering is by user-defined route to the internal load balancer, not transparent inspection, so this is a routed scale-out fleet, not Azure Gateway Load Balancer. Each gateway registers on first boot with its own one-time deployment key, so a three-gateway fleet needs three keys.

Indicative Azure infrastructure cost about $110/month, excluding the Enforza licence and region-dependent. It is your own Azure cost, covering three VMs, the internal load balancer and the public IPs.

Proven, not just validated

Deployed end-to-end in a real Azure subscription

The deployment-key patterns were not just linted and left. They were deployed end to end in a live Azure subscription, and live workload traffic was proven to route through the firewall and source-NAT out. What you clone is what we ran.

The cost wedge

Same egress control, about 72% off the firewall bill

Azure Firewall Standard → Enforza, 20 TB/month ~72% about $883.50/month off the firewall bill
Azure Firewall Standard ($1.25/hour + $0.016/GB)
$1,232.50
Enforza, flat licence + your VM
~$349

Azure Firewall Standard rates are US list, dated 2026-07-04, directional. This is the core single-firewall egress comparison; Azure Firewall is a single regional service, so it does not multiply per availability zone the way a per-endpoint-hour firewall does. Azure self-SNATs, so there is no separate NAT gateway stacked behind it. Enforza is a flat $249/firewall licence (£199) at $0/GB plus the ~$100 VM shown; a small-to-midsize Linux VM is typically $70–$150/month. On the resilient patterns you run more than one gateway VM, so you pay per VM, but each firewall stays a flat licence at $0/GB. You still pay Azure for the VMs and for VNet bandwidth, which Enforza does not remove.

For MSPs and CSPs

Put a flat-priced firewall in every Azure hub you build

Azure CSP and Lighthouse make the partner the default operator of the client's cloud firewall. Enforza in the hub is a partner-usable, flat-priced accelerator: the same inspected egress edge in every tenant you manage, at a price your clients can forecast.

FAQ

Enforza on Azure, common questions

Does the Cloud Adoption Framework really allow a partner firewall in the hub?

Yes. Microsoft's Cloud Adoption Framework traditional-networking-topology guidance says, in its design recommendations: deploy Azure Firewall or partner NVAs in the central-hub virtual network for east/west or south/north traffic protection and filtering. Enforza is a partner network virtual appliance, so putting it in the hub is an in-pattern substitution, not a workaround.

What actually deploys on Azure?

Four validated patterns that build the whole Azure network and place the Enforza gateway in it: a single gateway for dev, test and single-zone small production; a zone-redundant pair, two gateways across availability zones behind an internal Standard load balancer with HA Ports for production high availability; hub-spoke centralised egress, where a hub VNet carries the gateway pair and peered spoke VNets route their egress through it; and a scale-out fleet of three gateways across zones 1, 2 and 3 behind the internal load balancer. Each pattern ships in Terraform and in ARM, in two flavours. Every gateway registers itself on first boot, then you attach policy in the console.

What is the difference between the deployment-key and marketplace-image flavours?

The networking is identical, only the firewall image and its bootstrap differ. The deployment-key flavour boots a stock Ubuntu image and installs the engine with a one-time registration key from the console (install.sh with the key), so it needs no Marketplace subscription. The marketplace-image flavour boots the Enforza Azure Marketplace image and self-registers via the Azure Instance Metadata Service, then you claim it in the console by subscription ID plus VM ID. No key to manage.

Terraform or ARM?

Both. Every pattern ships in Terraform and in an ARM template (arm/azuredeploy.json), which is also the one-click Deploy-to-Azure button target. They build the identical topology, so pick whichever your team already runs. Terraform needs the Azure CLI authenticated and Terraform 1.0 or newer; ARM deploys from the portal button or the Azure CLI.

Why do the multi-gateway patterns need more than one deployment key?

Each gateway VM registers itself on first boot with a deployment key from the console, and a key is one-time use per firewall. The single gateway takes one key, the zone-redundant pair and the hub-spoke pattern take two (one per gateway), and the scale-out fleet takes three. Reusing one key across gateways would fail to register the second and third.

Is the scale-out fleet Azure Gateway Load Balancer?

No, and we are precise about this. The scale-out fleet is three gateways behind an internal Standard load balancer with an HA Ports rule, steered by user-defined route, so it is routed scale-out, not transparent inspection. Enforza's engine has the AWS Gateway Load Balancer GENEVE datapath, which is why the AWS GWLB fleet is transparent, but the Azure Gateway Load Balancer VXLAN datapath is not offered here. On Azure the fleet is an internal-load-balancer pattern.

How do I point traffic through it?

With a user-defined route. In the single-gateway pattern you point each workload subnet's 0.0.0.0/0 at the gateway's private IP as a virtual appliance. In the zone-redundant, hub-spoke and scale-out patterns the template points 0.0.0.0/0 at the internal load balancer's private frontend, which spreads traffic across the gateways with HA Ports. Register each gateway in the console, then attach policy.

Have these actually been deployed, or are they just templates?

Deployed. The deployment-key patterns were built end-to-end in a real Azure subscription and proven to route and source-NAT live workload traffic through the firewall, not just validated on paper. The templates are the exact ones in the public repository.

How much cheaper is Enforza than Azure Firewall?

On the core egress job, up to 60–80%. A two-network hub-and-spoke pushing 20 TB a month through one Azure Firewall Standard is about $1,232.50/month ($912.50 in deployment-hours at $1.25/hour plus $320 in data-processing at $0.016/GB). The same workload on Enforza is a flat $249 licence (£199) plus the VM you run it on, near $349/month all-in, roughly 72% less. Rates are US list, dated 2026-07-04, directional. Azure self-SNATs, so there is no separate NAT gateway stacked behind it. The full line-by-line maths is on the worked example.

Is this relevant to the Azure default outbound access retirement?

Yes. Since 31 March 2026 Azure has retired default outbound access for new deployments, so every workload needs an explicit, deliberate egress path. Enforza as the hub NVA is exactly that: a controlled, filtered, secure-NAT outbound path with audit-ready logs to your own SIEM, rather than an implicit default route.

Azure architecture icons are property of Microsoft, used per their published icon terms for architecture diagrams. Enforza is an independent product and is not affiliated with, sponsored by, or endorsed by Microsoft.

The hub NVA slot, at a flat price.

Cut the Azure Firewall bill, no per-GB tax.

Deploy a complete Azure landing zone in Terraform or ARM, from a single gateway to a scale-out fleet, with Enforza as the partner NVA the Cloud Adoption Framework blesses. Same egress and east-west control with FQDN and SNI-based Layer 7 filtering and secure NAT, at a flat per-firewall price. Start free, no card.