JJC SystemsBook a Consultation
Azure · Advanced

Designing an Azure landing zone for a public agency

The subscription, policy and tagging structure that keeps a public sector estate governable — and survives a council review.

Who this is for

Two summaries, because two audiences read this

If you own the outcome

Landing zone design is cheap now and genuinely disruptive to retrofit. This guide covers the structure that keeps spending traceable, satisfies the questions elected members ask, and lets your own staff operate the estate afterwards.

If you have to build it

Management group hierarchy, subscription topology, Azure Policy assignment, tagging enforcement, network design and the identity model underneath it.

Why it matters

The problem this solves

Public sector cloud programmes fail at governance and procurement far more often than at technical migration. An estate that grew subscription by subscription becomes unmanageable at a few hundred resources, and the retrofit is a project in its own right.

The questions members ask — where is the data, who can access it, how do we know we are not overpaying, what is the exit route — are all answerable, but only if the architecture was designed with them in mind.

Before you start

Prerequisites

Check these before beginning. Most stalled implementations stall on one of them.

Licensing

An Azure agreement appropriate to your procurement route. Confirm whether you need a government cloud region before designing.

Roles

Owner at the tenant root management group for the initial setup; Contributor is insufficient for policy assignment at that scope.

Decisions

Data residency requirements, and whether workloads must remain in a specific jurisdiction. Raise this at design time, not at contract stage.

Governance

Agreement on who approves subscription creation. Without this, the structure erodes within a year.

How it works

The concepts worth understanding first

Configuration is straightforward once these are clear. Skipping them is why most first attempts produce something that works and cannot be maintained.

Management groups carry policy; subscriptions carry billing

Policy assigned at a management group applies to every subscription beneath it. Design the hierarchy around governance requirements rather than around organizational structure, because departments reorganise and governance requirements do not.

Policy is preventive, not just reportive

Azure Policy can audit, deny or remediate. Deny effects prevent non-compliant resources being created at all, which is considerably cheaper than finding them afterwards. Tagging enforcement in particular should be a deny.

Tagging is the foundation of cost accountability

Cost attribution is an accountability problem before it is a technical one. Spend that nobody owns is spend that nobody reduces, and the only way to attach a name to a resource reliably is to make untagged creation impossible.

Configuration

Step by step

Settings shown are the ones that matter, not every field on the form. Values are starting points to validate against your own environment.

01

Build the management group hierarchy

Keep it shallow. Three or four levels covers almost every agency, and deeper hierarchies become difficult to reason about.

A workable structure is: tenant root, then a platform group for shared services, then landing zone groups split by governance requirement — typically corporate, and a separate group for anything with elevated data requirements.

Depth
3–4 levels maximum
Platform group
Identity, management and connectivity subscriptions
Landing zones
Split by governance requirement, not by department
Sandbox
A separate group with permissive policy and a hard spending cap
02

Assign policy at the highest sensible scope

Assign broad policy at the root or platform level and narrow exceptions lower down. Assigning everything at subscription level produces drift the first time somebody creates a subscription without the assignments.

Start with a small set that carries most of the value.

Allowed locations
Deny — restrict to your approved regions, this is your residency control
Require tags
Deny on missing owner, workload and environment tags
Allowed SKUs
Deny on expensive VM families nobody has approved
Diagnostic settings
DeployIfNotExists, so logging is on by default
Public IP restrictions
Deny or audit, depending on your network model
03

Enforce a tagging standard that supports cost reporting

Three tags carry most of the value: owner, workload and environment. Add a cost centre tag if your finance system needs it.

Enforce by deny policy rather than by guidance. A tagging standard that relies on people remembering produces a partially tagged estate, which is only slightly better than none.

owner
A person or team, not a department name — specificity is the point
workload
The application or service, matched to how you want to report
environment
Production, non-production, sandbox
Enforcement
Deny policy at management group level, with inherit-from-resource-group where sensible
04

Design the network and identity model together

Hub-and-spoke remains the default for good reason. Put shared services — firewall, gateway, DNS — in the hub, and give each landing zone a spoke.

Design privileged access at the same time. Just-in-time elevation through privileged identity management is the control auditors ask about, and it is far easier to establish before people have standing permissions.

05

Document it for handover from day one

Write the documentation for your own staff rather than for the supplier. Infrastructure as code so the structure is reproducible and reviewable.

If a partner cannot describe how they would hand over, that is a lock-in arrangement being described as a partnership.

Verify it worked

  1. Attempt to create a resource in a disallowed region and confirm the deny policy blocks it.
  2. Attempt to create an untagged resource and confirm it fails.
  3. Confirm cost reporting groups correctly by owner and workload tag in Cost Management.
  4. Confirm diagnostic settings are applied automatically to a newly created resource.
  5. Have a member of your own staff deploy a test workload following only the documentation.
Best practice

What we do on every engagement of this type

  • Keep the management group hierarchy shallow and organised by governance, not department
  • Use deny effects for the policies that matter, not audit-only
  • Enforce tagging at creation — retrofitting tags across a live estate is a project
  • Design privileged access before people acquire standing permissions
  • Write documentation for your own staff and test it with them
  • Establish a named approver for subscription creation
Pitfalls

What catches most first attempts

Every one of these is avoidable, and every one of them is common enough that we check for it by default.

!Audit-only policy

It produces a compliance report and a non-compliant estate. If a control matters, deny it at creation.

!Organising management groups by department

Departments reorganise. Governance requirements do not. A hierarchy built on the org chart needs rebuilding after every restructure.

!Deferring the tagging standard

Every untagged resource created before the standard exists has to be tagged retrospectively by somebody who has to work out who owns it. This is genuinely unpleasant work.

!Skipping the residency conversation

Raise it at design time. Discovering a residency requirement after workloads have landed can invalidate the architecture and occasionally the procurement.

Completion checklist

  • Management group hierarchy designed around governance and no more than four levels deep
  • Core policy set assigned with deny effects where they matter
  • Tagging standard enforced by policy, covering owner, workload and environment
  • Hub-and-spoke network and privileged access model designed together
  • Infrastructure as code committed to a repository your staff can access
  • Documentation validated by one of your own engineers deploying a test workload

Want a second pair of eyes?

We will design the landing zone with your governance and residency requirements written into it, and validate the documentation by having your own engineer deploy from it.

Request a consultation See our Azure page We reply to every message within one business day.
Get In Touch

Tell us what you're trying to fix

Describe the situation in your own words.

Please enter your first name.
Please enter your last name.
Please enter a valid email address.
Please enter your company name.
Please choose an option.
Please add a short description.

We reply to every message within one business day.