AZ-ADMIN-200: Enterprise Landing Zone with Bicep and azd
Ship a CAF-aligned Azure landing zone with Bicep + azd — hub-spoke, private DNS, RBAC baseline, Key Vault, Log Analytics, Azure Policy. PSRule.Rules.Azure enforces CAF/WAF in-loop.
View badge details
About This Course
Build the landing zone your organization deploys on Monday morning. A realistic hub-spoke, subscription-vending, private DNS, RBAC, Key Vault, Log Analytics, and Azure Policy baseline codified with Bicep modules and shipped with azd up. Every design decision is grounded in the Microsoft Cloud Adoption Framework. PSRule.Rules.Azure runs in-loop as your CAF/WAF conscience. By the end of this course you will be able to design and ship an enterprise-grade Azure landing zone repo that you could pitch as your onboarding project.
Course Curriculum
8 Lessons
What is a landing zone, and what does "enterprise-grade" actually mean
This lesson introduces the Microsoft Cloud Adoption Framework (CAF) landing-zone model and the vocabulary you need to reason about "enterprise-grade" Azure environments. You will learn what a landing zone is, how CAF's Strategy/Plan/Ready/Adopt/Govern/Manage phases fit around it, why a management-group hierarchy matters for policy inheritance, and how hub-spoke topology maps onto Platform + Application landing-zone subscriptions. You will also see how the Azure Developer CLI (azd) and Azure Verified Modules (AVM) modernize the landing-zone authoring loop. By the end of this lesson you will be able to explain the CAF conceptual landing-zone architecture to a stakeholder and defend why hub-spoke + policy inheritance + azd-based deploys is the right starting posture for a mid-market Azure footprint.
Bootstrap an azd project with a hub VNet + Log Analytics baseline - Lab Exercises
Note: This lab pre-provisions Azure resources at start — allow up to 10 minutes for the environment to become ready before beginning the exercises.
Bootstrap the first landing-zone project of your career. You will learn the azd template convention (azure.yaml + infra/ scaffold), how to author a subscription-scope Bicep entry point that creates its own resource group, and how to compose a foundational Log Analytics + hub VNet baseline for a hub-spoke landing zone. You will also learn how the azd provision + azd down lifecycle keeps your day-to-day authoring loop fast. By the end of this lab you will be able to bootstrap an azd landing-zone project from scratch, provision a subscription-scope Bicep template that lays down a hub VNet with the CAF-recommended reserved subnets and a Log Analytics workspace with diagnostic archive Storage, verify with the Azure Portal and CLI, and cleanly tear it down with azd down.
Modular Bicep for landing zones — AVM, private module registries, versioning
This lesson teaches the modular decomposition every real landing-zone repository uses. You will learn how to consume Azure Verified Modules (AVM) from the public registry, when to publish your own reusable modules to a private Azure Container Registry (ACR), how to version those modules with semantic tags, and how CAF's abbreviations.json and shared naming/tagging conventions reduce copy-paste across environments. By the end of this lesson you will be able to make the correct build-vs-buy call for any given landing-zone concern, publish and consume private modules from ACR with the br: alias, and set up the naming/tagging plumbing that keeps a growing LZ repository sane.
Compose the LZ with AVM modules + a private ACR registry - Lab Exercises
Note: This lab pre-provisions Azure resources at start — allow up to 10 minutes for the environment to become ready before beginning the exercises.
Refactor Lab 2's hand-authored hub onto Azure Verified Modules (AVM), then publish a shared naming module to a private Azure Container Registry so downstream modules consume it via a versioned tag. You will also add two spoke VNets (workload and identity) peered to the hub, and use az deployment sub what-if to preview the entire landing zone before committing. By the end of this lab you will be able to compose a hub-spoke landing zone from AVM resource modules, publish and consume your organization's own opinionated shared modules from a private ACR registry, and drive a subscription-scope what-if diff to preview infrastructure changes safely.
Private DNS, RBAC baselines, and Key Vault architecture for LZs
This lesson teaches the three shared-services concerns every enterprise landing zone must get right: private DNS for private endpoints, an RBAC baseline that scales without ad-hoc user assignments, and a Key Vault architecture that keeps secrets close to workloads without leaking them across boundaries. You will learn the per-PaaS privatelink.* zone catalog, why the centralized-hub private-DNS pattern beats per-spoke zones, the "everyone reads via Entra group, never by direct user assignment" rule, and when a workload deserves its own Key Vault vs sharing one. By the end of this lesson you will be able to design a private-DNS + RBAC + Key Vault architecture for a hub-spoke landing zone and defend the decisions in a code review.
Wire private DNS + RBAC baseline + shared Key Vault - Lab Exercises
Note: This lab pre-provisions Azure resources at start — allow up to 10 minutes for the environment to become ready before beginning the exercises.
Extend the composed landing zone with the shared-services layer every real workload team needs. You will deploy 8 privatelink.* DNS zones in the hub, vnet-link them to both spokes, stand up a shared Key Vault in the identity spoke, front it with a private endpoint into the workload spoke, and add an RBAC baseline that grants a security group Reader at sub scope + a workload Managed Identity Key Vault Secrets User on the shared KV. By the end of this lab you will be able to codify a centralized private-DNS layer, an Entra-group-first RBAC baseline, and a Managed-Identity-consumable Key Vault as Bicep modules that the workload teams can extend.
Azure Policy assignments for LZ governance — CAF baseline + WAF alignment via PSRule
This lesson teaches the two governance layers every enterprise landing zone runs: Azure Policy assignments that deny non-compliant deployments at ARM enforcement time, and PSRule.Rules.Azure checks that catch the same problems earlier in the CI pipeline. You will learn where policy assignments belong in the management-group vs subscription hierarchy, three canonical CAF-baseline policies (deny public IP, require tags, restrict VM SKUs), the "policy vs PSRule vs both" decision framework, and how to gate a Bicep PR on PSRule inside GitHub Actions. By the end of this lesson you will be able to design an LZ policy baseline that catches misconfiguration in CI before it reaches Azure, and defend the choice of which rules belong in each layer.
Deploy CAF-aligned Azure Policy assignments + gate the LZ on PSRule - Lab Exercises
Note: This lab pre-provisions Azure resources at start — allow up to 10 minutes for the environment to become ready before beginning the exercises.
Codify the governance layer that keeps the landing zone honest. You will build a policy initiative at subscription scope from three CAF-aligned baseline policies (Deny public IP creation, Require tags on RGs, Restrict allowed VM SKUs), trigger a deliberate policy violation to see the deny path, run PSRule.Rules.Azure against your Bicep to inspect the CAF/WAF findings, and wire PSRule as a required PR gate in a GitHub Actions workflow. By the end of this lab you will be able to ship a policy-assignment module, catch policy violations at PR time with PSRule and at deploy time with Azure Policy, and hand your workload teams a repo that will not merge non-compliant infra.