· · ·

Azure Private Subnets: The End of implicit Outbound Internet Access

How a single subnet property is changing the way we design Azure networks, and why “explicit” is the new default.

/introduction

In our cloud environment, a virtual network (Vnet) is our private little piece of network resource – an isolated address space you can fully control and customize. Within a Vnet, subnets segment that address space into smaller ranges where you can place your workloads like virtual machines in, and to which you could attach controls like Network Security Groups and routing tables to.

For years, atleast in the Azure context, one behaviour of subnets was so quiet that most engineers never thought about it: Any VM you deployed could reach the public internet by default, with no configuration required. Microsoft has now reversed that default.
The mechanism is the Azure Private Subnet – a subnet where outbound internet access is switched off by default.

/traditional Azure subnets: how they worked

A conventional Azure subnet was by default, non-private. When you dropped a VM into it without configurating any outbound method, Azure silently assigned a default outbound access (DOA) IP. A DOA IP is a Microsoft owned public address used to SNAT the VMs outbound traffic to the internet. That existed without us engineers requesting it, it just simply appeared.

Engineers who wanted a controlled egress had some options:

There is a waterfall-graph from Microsoft itself where it shows you how the access was granted (this is the updated version though, you see the last part with defaultOutboundAccess here):

Source: https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access?tabs=portal

If none of the above existed, previously, Microsoft used DOA for outbound traffic.

/challenges with traditional Outbound Connectivity

This was pretty convenient, but as much as it was convenient there was also real problems to that.

-> Security was a concern. Every VM could reach the internet an their “home” by default, contradicting Zero Trust principles. Malware or misconfigured agent had a readily available exfiltration path through the VM.
-> It was pretty unpredictable. The DOA IP is not customer-owned and it could change without the Engineers notice, possibly breaking allow-lists and partner integrations.
-> Compliance was also a reason, for some security frameworks, an unaudited outbound route is hard to justify.
-> Lack of control in general, because the internet path was implicit, difficult to log etc.

The Industry wanted deterministic egress, a known source IP, an auditable path and a single point for inspection.

Azure Private Subnet Explained

The Azure Private Subnet is simply a subnet where the property defaultOutboundAccess is set to false. With that flag off, Azure no longer assigns the implicit DOA IP, so a VM placed into that Subnet can’t reach the public internet or other public Microsoft endpoints by default, unless you explicitly allow and configure the egress path.

The two milestones that mattered here:

To clarify, existing Vnets are never modified automatically, only newly created Vnets are affected by this change. The “private” does not mean like a conventional “air-gapped” Network. A private subnet still allows intra-Vnet traffic, Vnet peering etc. Only the implicit outbound internet IP disappears with this change.

Traditional subnetPrivate subnet
defaultOutboundAccesstruefalse
Outbound internet by defaultYes, with DOA IPNo
Internet egress requires configNoYes, through NAT Gateway, LB rules, public IP or Firewall
Aligns with Zero TrustNoYes
Intra-Vnet / Peering / priavte endpointsWorksWorks

/network flow comparison

//traditional subnet – implicit egress:

//private subnet – explicit egress via NAT Gateway:

/best practices with Azure Private Subnet

This change rewards an intentional Zero trust posture:

A common reference design: private spoke subnet wit DOA disabled, a default route 0.0.0.0/0 pointing to Azure Firewall in the hub, a NAT Gateway or the firewalls public IP providing the actual egress, private endpoints for every PaaS dependency.

/migration considerations

As previously mentioned, your environment will still keep on working, but new deployments behave differently. So we need to verify before we switch:

/conclusion

For most of Azure’s history, outbound internet “just worked” because every subnet quietly handed the VMs a Microsoft owned DOA IP. It was convenient, but it was implicit, unpredictable and it did bite some modern security expectations like Zero Trust.

Azure private subnets inverted that model, outbound internet is now something you design, not something you inherit by default. New Vnets are private by default, and reaching the internet requires one to deliberately configure it.

For architects, the guidance is straightforward. Treat private subnets as the baseline. Make every egress path explicit and monitored. Prefer Private Endpoints for Azure services. Centralize and inspect internet traffic through a hub. The result is a network that is more predictable, more compliant, and alignes with Zero Trust.

Keep you postet – bye bye, Casi.