See it as a diagram
Everything below, as a diagram you can edit. Describe yours and see it in seconds.
No account needed · Editable canvas, not a picture
A landing zone diagram is two diagrams stacked
The governance layer is a scope tree: tenant root group, an intermediate root group named after the organisation, then Platform, Landing Zones, Sandbox, and Decommissioned, with subscriptions hanging off the leaves. Platform typically holds Identity, Management, and Connectivity. Landing Zones typically splits into Corp for internally routed workloads and Online for internet-facing ones.
The network layer is a topology: one hub virtual network with Azure Firewall, a gateway subnet carrying ExpressRoute or VPN, and Bastion, peered to spoke virtual networks that live in the workload subscriptions. Peering is not hierarchical, so it cannot be drawn as nesting.
The reliable way to combine them is to let the subscription be the outer zone and the virtual network be a zone inside it, then draw peering as explicit edges between those inner zones. The management group tree above the subscriptions becomes a compact bracket or a separate small panel rather than another layer of nested rectangles. If the audience is a governance review, draw the scope tree alone and skip the network entirely.
Policy is a property of a scope, so label the zone
Azure Policy assignments, RBAC role assignments, and cost budgets are attributes of a management group or a subscription. They do not consume traffic and they do not sit anywhere in a flow, so giving them their own boxes in the middle of the topology invents relationships. This is not a stylistic preference here: in the Terraform resource catalog behind the repository parser, azurerm_role_assignment is classified as wiring, meaning it can never become a node no matter how many of them a stack declares. On a landing zone that is the difference between a readable picture and a wall of identical squares.
Write them on the zone header instead: the Corp management group zone labelled with the policy initiative that denies public IPs, the Connectivity subscription labelled with the network contributor assignment. The Azure set does ship a Policy icon, which is useful in a legend or a small governance panel where you list initiatives.
The same rule applies to Microsoft Defender for Cloud and Microsoft Sentinel. They are platform capabilities scoped at a management group, so they belong in the Management subscription zone with a label saying what they cover, not as nodes in the traffic path.
The icons the Azure set actually ships for this
Microsoft added a dedicated Azure landing zone icon in the November 2024 batch, alongside a mission landing zone variant, so the top-level container no longer needs a generic rectangle. If your reference diagrams predate that batch they will be using a plain container or the Subscriptions mark instead, which is why older landing zone pictures look inconsistent with newer ones. Around it: Management Groups, Subscriptions, Policy, Resource Groups, and the Entra ID family for the identity subscription.
Connectivity: Virtual Networks, Virtual Network Gateways, ExpressRoute Circuits, Firewalls and Firewall Manager, Bastions, Front Door, Application Gateway, Web Application Firewall policies, Private Link and Private Link services, DNS Zones and the DNS Private Resolver, and Route Tables. Management: Log Analytics Workspaces, Monitor, and Key Vaults.
Datadef carries 624 Azure icons, which is enough that every service in the Cloud Adoption Framework reference topology resolves by name. The full collection is at Azure architecture icons, and single files like the virtual network icon have their own pages.
Name the spokes after workloads
Keeping it true after month three
Landing zones are deployed from code, and the code is usually Terraform. Connect the repository with read-only access to GitHub, GitLab, or Azure DevOps, pick a branch or a tag, and every .tf file is parsed as text: no terraform init, no state file, no cloud credentials. Directories of .tf files become module units and become zones on the canvas. A module call to the registry cannot be expanded locally, so it renders as one node that keeps its source and its version, which is the honest rendering of a caf-enterprise-scale style dependency rather than a guess at what it provisions.
Per-environment counts are where a landing zone diagram usually lies. A for_each driven by a variable bound differently in environments/DEV and environments/QUAL is read from the tfvars rather than assumed, so a node comes back labelled with the real spread, "per spoke_networks (DEV 2, QUAL 1)", instead of one box implying one of everything. A count that resolves to zero is labelled as not deployed rather than silently drawn.
That matters more for a landing zone than for most architectures, because the estate grows by subscription and the hand-drawn version is wrong within a quarter. The diagram and its architecture document rebuild on a daily sync, a commit with no structural change skips regeneration outright, and any node somebody dragged more than twelve pixels from where the previous sync left it keeps the position they gave it. See terraform module diagrams for how modules map to zones.
Export the current version to PNG or JPEG for the steering deck, and put the live embed in the platform wiki so the reference topology page stops drifting.
FAQ
What should an Azure landing zone diagram show?
Should management groups and virtual networks be on the same diagram?
Which icon represents an Azure landing zone?
How do I show Azure Policy on a diagram?
Does the diagram need every spoke?