T Techclick ← All lessons
Microsoft · Azure security · Lesson 2 of 10

Landing zone first: management groups before the first VM

Someone created sub-spoke-app under their personal ID, slammed Owner on it, and dropped pay-api next to a lab NSG. Cloud Adoption Framework says the opposite: management groups + subscriptions + Policy before workloads. The VNet is not the landing zone. The control plane is.

Updated 2026-08-18·18 min read·L2 primary·Quiz at end

After this page you can

The ticket

Auditor: “Where does pay-api live?” Junior: a subscription named Ram-PayPal with Owner = a Hotmail. No Policy. No MG. That is not a landing zone. That is a credit card with a VM.

Quick interview answer

An Azure landing zone (CAF Ready) is a pre-provisioned environment: management group hierarchy, subscriptions for platform vs workloads, identity, networking, and Azure Policy so a workload cannot skip the rails. Hub networking sits in a platform/connectivity subscription (sub-hub). The app sits in a workload subscription (sub-spoke-app) under a landing-zone MG. Do not give standing Owner to a personal account.

Hero · hierarchy
Management groups above hub and spoke subscriptions
Policy at the MG. VMs at the leaf. Never the other way around.
Lab data · dummy only

Tenant techclick-lab.in · MG tc-root / tc-landing / tc-workloads · subs sub-hub sub-spoke-app · hub VNet 10.40.0.0/16 · spoke 10.41.0.0/16 · Azure Firewall 10.40.0.4 · VPN GW public 203.0.113.50 · on-prem FortiGate WAN 203.0.113.10. Not a live tenant.

Mental model

ObjectJobThis lab
Management groupFolder for Policy + RBAC inheritancetc-roottc-landing / tc-workloads
SubscriptionBilling + deploy scale unitsub-hub (platform), sub-spoke-app (workload)
Azure PolicyGuardrail (deny / audit / deploy-if-not-exists)Assigned at tc-workloads
Resource groupLifecycle of related resourcesNot a security boundary by itself
Dummy CAF tree
tc-root tc-landing → sub-hub tc-workloads → sub-spoke-app Firewall + VPN GW pay-api VM

Inherit Policy downward. Do not attach production to the tenant root with Owner.

How to choose

NeedPut itDo not
Firewall, VPN GW, Bastionsub-hub under tc-landingInside the app RG “for speed”
pay-apisub-spoke-app under tc-workloadsA personal subscription
Deny public IPsPolicy on tc-workloadsA sticky note to the intern
https://portal.azure.com
Training mock · not live
HomeMicrosoft Entra IDVirtual networksAzure Firewall
Management groups → tc-root

Hierarchy

Tenant landing · Policy: allowed locations
Contains sub-hub
Contains sub-spoke-app
Entra group wl-owners — not a Hotmail
CAF landing zone is MG + sub + Policy. Training mock.

Runbook

  1. Side A — tree

    Portal → Management groups. Confirm sub-spoke-app parent is tc-workloads, not Tenant Root Group.

  2. Side B — rails

    Policy assignments on tc-workloads: allowed locations, no public IP on VMs, require diagnostic settings. Then RBAC: groups, not personal Owners.

  3. Side C — prove

    az account management-group entities list and az policy assignment list. Then deploy. Not before.

az · dummy
az account management-group entities list -o table
# Name           Type              DisplayName
# tc-root        ManagementGroup   tc-root
# tc-landing     ManagementGroup   tc-landing
# tc-workloads   ManagementGroup   tc-workloads
# sub-hub        Subscription      sub-hub
# sub-spoke-app  Subscription      sub-spoke-app

az policy assignment list --scope /providers/Microsoft.Management/managementGroups/tc-workloads -o table

Four failures

1 · Prod VM in a random sub

Today’s ticket. No Policy, personal Owner, no hub peer.

2 · Everything under Tenant Root

One bad Policy assignment becomes a tenant-wide outage. Use intermediate MGs.

3 · Owner on a personal ID

That person leaves. The sub is now an orphan with a stale MSA.

4 · Policy only on the RG

Next RG skips it. Assign at MG or subscription.

How to prove it

Close only when

1) Parent MG of each sub is named. 2) Policy is at tc-workloads, not a wish. 3) Owner is a group. 4) pay-api was not created first “to test.”

Traps

Looks like a landing zoneIs not
A VNet named “hub”No MG, no Policy, personal Owner
Blueprints folder from 2019CAF landing zone is MG + Policy + platform subs
Contributor on the whole tenant rootStanding god-mode — use groups + PIM later

Knowledge check

Judgment items. One best answer. Reasons send you back to the matching section.

Q1

A CAF landing zone is primarily…

Correct: b. CAF Ready.
Q2

pay-api should land in…

Correct: b. Workload sub.
Q3

sub-hub exists so that…

Correct: a. Platform vs workload.
Q4

Best place for a deny-public-IP guardrail?

Correct: b. Policy inherits.
Q5

Owner = personal Hotmail on prod is bad because…

Correct: b. Failure 3.
Q6

First proof before deploying pay-api?

Correct: a. Runbook.

Azure security class series: Shared + Entra · Landing zone · NSG vs Firewall vs WAF · Conditional Access · Key Vault + MI · Private Link · Defender + Sentinel · Hub-spoke · Identity path · Interview

Sources

Related: Azure session factory · Migration series.