Homeβ€Ί Blogβ€Ί Azure Architecture Series #30 β€” Landing Zones and the Cloud Adoption Framework Accelerator…
Azure Architecture Azure Architecture Series

Azure Architecture Series #30 β€” Landing Zones and the Cloud Adoption Framework Accelerator

Verified against current vendor documentation on 11 September 2026. Pricing, limits and API behaviour were checked against the official docs on that date. Cloud services change fast — if you are reading this much later, treat the specifics as a starting point and re-check the linked sources.

Business Challenge

This series began with management groups and subscriptions, and has spent twenty-nine posts on the mechanisms underneath an Azure estate: policy, RBAC, locks, deny assignments, moves, deployment scopes, templates, state. Every one of those posts ended with a design decision left to the reader.

The Cloud Adoption Framework's landing zone is Microsoft's version of those decisions already made. It is a proven and flexible architecture for governing, securing, and scaling a multi-subscription Azure environment, and it comes in two halves:

  • A platform landing zonethe centralized foundation that establishes governance, security, and shared resources for all your Azure workloads. Most organisations should have only one per Microsoft Entra tenant.
  • Application landing zonesthe environments where workload teams deploy and operate workload resources within the guardrails of the platform landing zone. One per workload, containing every environment that workload needs.

You can get either by accelerator — Microsoft-provided infrastructure as code — or by custom build. The guidance does not hedge: for most organizations, accelerators provide the fastest path to a deployment that aligns with Microsoft's recommended practices.

That could be read as "run the accelerator and stop thinking", and it is worth saying plainly why that reading fails. An accelerator makes the reversible decisions for you. It does not make the irreversible ones, and it cannot stop you undoing its work with a well-intentioned change in week three. The most useful thing in the landing zone documentation is therefore not the hierarchy diagram. It is the list of things it tells you not to do — because every item on that list is something a competent architect does by instinct.

The prohibitions are the content

Do not mirror the org chart. Do not give application teams RBAC at management group scope. Do not make management groups for dev, test and prod. Do not model regions. Do not load the root group with policy. Every one of those is an instinct — and every one is documented as a mistake, with a reason attached. A team that deploys the accelerator and then does all five has an architecture that looks like the reference and behaves like the thing it replaced.

Architecture

Diagram: the Azure landing zone, showing its two components of platform landing zone and application landing zones, the baseline management group hierarchy from intermediate root through Platform with Security Management Connectivity and Identity, and Landing zones with Corp Online and Local, plus Sandboxes and Decommissioned, the depth guidance of six levels allowed against three or four recommended, and five things the guidance explicitly tells you not to do
The hierarchy is the easy half to copy. The lower panel is the half that decides whether copying it helped.

What the platform landing zone actually contains

Three things, and the third is the one most estates underestimate.

A management group hierarchy, which organizes all of your Azure subscriptions and applies governance standards to those subscriptions. The baseline names are worth knowing because they encode decisions:

Management groupWhat it is for
Intermediate rootSits directly under the tenant root with your own prefix, so that they don't have to use the root group. Everything else in the reference architecture hangs off it.
PlatformParent to the platform children — Security (Sentinel and SIEM tooling), Management (the Azure Monitor Logs workspace), Connectivity (Virtual WAN, Firewall, private DNS zones) and Identity (domain services). One dedicated subscription each.
Landing zonesParent to the workload groups, carrying workload-agnostic Azure policies.
CorpWorkloads needing connectivity or hybrid connectivity with the corporate network via the hub in the connectivity subscription.
OnlineWorkloads that might require direct internet inbound or outbound connectivity, or that need no virtual network at all.
LocalAzure Local clusters and the workloads on them, which have different policy requirements.
SandboxesIsolated from Corp and Online, with a less restrictive set of policies assigned to enable testing, exploration, and configuration.
DecommissionedCancelled landing zones move here, and then Azure deletes them after 30-60 days.

Notice what the top-level split is doing. Corp, Online and Local are not business units or environments — they are connectivity and compliance postures. That is the choice that makes the hierarchy useful for its stated purpose, which is applying policy to groups of subscriptions that need the same rules.

Centralized resources, with a sentence worth pinning up: only centralize capabilities that provide clear governance, operational, or economic benefits across multiple workloads. Centralising is not free — it creates a platform team dependency for every workload that touches it — and the test offered is a benefit across multiple workloads, not a preference for tidiness.

A distribution process. The platform needs a repeatable process for requesting, creating, and distributing application landing zones to workload teams, and as the number of application landing zone requests grows, automation becomes increasingly important. This is subscription vending, and it is the part teams build last and wish they had built first, because until it exists every new workload is a bespoke conversation.

The application landing zone is a workload, not a subscription

The definition is more specific than the casual usage suggests. Each workload has a single application landing zone, and that landing zone contains all the environments required to support that workload, such as development, test, and production. Each environment is then one or more Azure subscriptions.

So the unit is the workload; environments live inside it; subscriptions are the implementation detail underneath. The platform team's only decision at handover is which of Online, Corp or Local the subscriptions belong in — and that decision is about connectivity posture, which determines which policies the subscription inherits.

The five prohibitions, and why each one is tempting

Do notThe instinct behind itThe documented reason
Duplicate the org chart into a deeply nested hierarchy The hierarchy looks like an org chart, so it feels like one. Use management groups for policy assignment versus billing and RBAC purposes. Reporting lines change; policy boundaries should not.
Assign application teams RBAC at management group scope It is one assignment instead of many, and post #18 showed assignments are a scarce budget. Over-permissioning and security risks, and added risk from inheritance. Grant at the subscription or resource group they actually need.
Create management groups for dev, test and production Environments obviously need different policy. Separate these groups into different subscriptions in the same management group. Environment is a subscription-level concern.
Model Azure regions in the hierarchy Multi-region estates feel like they need multi-region structure. Don't alter or expand your management group structure based on region or multiregion usage — unless data residency, security or sovereignty requires it, which is the one stated exception.
Put policy at the root management group It is the one place that catches everything. Limit the number of Azure Policy assignments at the root management group scope, because it minimizes debugging inherited policies in lower-level management groups.

The second one deserves emphasis, because it collides with an argument this series has made. Post #18 established that role assignments are a per-scope budget, and post #19 that assigning to groups rather than users is how you stay inside it. The natural next step — assign the group at a management group and cover everything at once — is exactly what the guidance forbids for application teams, on the grounds that inheritance turns a convenience into a blast radius. Platform teams may hold management group scope, and even then this should be controlled via privileged identity management to ensure that the permissions are only granted when needed.

Depth, and the headroom you are asked not to spend

A management group tree can support up to six levels of depth, excluding the tenant root and the subscription level. The recommendation is no more than three to four levels6 − 4 = 2 levels deliberately left unspent, because this restriction reduces management overhead and complexity.

The suggested alternative for the cases that tempt you into more depth is neat: use resource tags to query and horizontally navigate across the management group hierarchy, enforced or appended by Azure Policy, so you can group resources for search needs without having to use a complex management group hierarchy. Tags for finding things, hierarchy for governing them — which is exactly the split post #13 argued for from the tagging side.

Two defaults to change on day one

Anyone can create management groups. By default, any principal, like a user principal or service principal, within a Microsoft Entra tenant can create new management groups. The fix is to enable Azure RBAC authorization for management group operations to override the default authorization. And new subscriptions land at the root. All new subscriptions are placed under the tenant root management group by default, outside every policy you have assigned below it. The fix is to configure a default, dedicated management group for new subscriptions — with sandbox named as a good candidate, so an unplanned subscription lands somewhere isolated rather than somewhere governed by nothing.

Why This Architecture Holds Up

The accelerator makes the cheap decisions, not the expensive ones

Running an accelerator produces a hierarchy, policy assignments, platform subscriptions and a network topology — all of which are reversible with effort. What it cannot do is make the decisions this series spent twenty-nine posts showing are hard to undo:

  • Where custom role definitions live, because AssignableScopes caps their reach permanently (#20).
  • Which resource group a resource is created in, because moving it is a four-hour lock, a changed resource ID and an orphaned role assignment (#23).
  • Which management group a subscription sits under, because that determines everything it inherits (#14–#17).
  • Whether stacks or Terraform hold the record of what exists, and where that record lives (#27, #28).

The accelerator is best understood as removing the decisions that have a known right answer, so attention is left for the ones that do not. That is a real service, and it is a different thing from removing the need to understand the platform.

Start with the default three

For all the tailoring documentation, the guidance is unambiguous about where to begin: for many organizations, the default Corp, Online, and Local management groups provide an ideal starting point.

That is worth taking literally, because the failure mode is predictable. A design workshop generates fifteen management groups reflecting every distinction anyone can name, and the estate spends two years discovering that twelve of them never received a different policy from their sibling. Groups are cheap to add when a genuine policy difference appears, and expensive to remove once subscriptions live in them.

The architecture is designed to absorb what comes next

One claim in the documentation is easy to skip and worth testing against the last two years: an Azure landing zone supports new and emerging technologies without requiring changes to the overall architecture. The mechanism is that new workload types go into application landing zones like any other, and new requirements become policy updates in the platform, applied consistently downward.

That is the real argument for the hierarchy being about policy rather than organisation. An org chart has to be restructured when the company reorganises. A hierarchy whose top-level split is connectivity posture does not care, because what changed was reporting lines and what it governs is network exposure.

Key Architecture Decisions

The shape that works

DecisionWhat to doWhy
Build or accelerate Use an accelerator unless you can name the requirement it fails It is the documented fastest path to recommended practice, and a custom build re-earns every decision it already made.
Number of platform landing zones One per Entra tenant The stated guidance for most organisations, and two foundations mean two sets of everything.
Top-level workload split Start with Corp, Online and Local; add only for a real policy difference Named as the ideal starting point. Groups are cheap to add and expensive to remove once populated.
Hierarchy depth Three to four levels, against a limit of six Explicitly recommended to reduce management overhead, and the spare depth is not a target.
Finding things across the estate Tags, enforced by policy — not more management groups The documented alternative to a complex hierarchy, and the split post #13 argued for independently.
Application team access Subscription or resource group scope only Management group scope is over-permissioning plus inherited risk, per the guidance.
Platform team access Management group scope through PIM, not standing The permissions should only be granted when needed.
New subscriptions Set a default management group, with sandbox a good candidate Otherwise they land at tenant root, below none of your policy.
Who can create management groups Enable RBAC authorization in the hierarchy settings By default any principal in the tenant can create one.
Landing zone distribution Build subscription vending before you need it Automation becomes increasingly important as requests grow, and until it exists each workload is bespoke.

Closing Thought

This post closes the foundations phase of the series, and the landing zone is a fitting place to end it — because it is the moment all the individual mechanisms stop being separate topics and become one environment.

What stands out, having taken the platform apart first and read the reference architecture second, is how much of the guidance is defensive. Do not nest deeply. Do not grant broadly. Do not model things the hierarchy was not built to model. Do not put policy where it will be inherited by everything. These are not the notes of a team describing an elegant design; they are the notes of a team that has watched a great many estates go wrong in the same handful of ways, and has written down the turnings.

Which suggests the right way to use it. Deploy the accelerator, by all means — it is the fastest path to a defensible starting point. But read the prohibitions first and treat them as the actual deliverable, because the hierarchy it creates can be rebuilt in an afternoon, and the habits that erode it take a year to form and several to undo.

Next in this series

Phase 2 begins at #31, on identity and access — starting from Microsoft Entra ID itself rather than the Azure resource model, and the distinction between the two that posts #18 to #21 kept having to work around.

Comments

How was your experience?
Your feedback helps improve this site.
PoorExcellent
<();