Admin

Azure

Azure Landing Zones: Enterprise-Scale Architecture for Cloud Adoption Framework [Review]

Implement Azure Landing Zones using Cloud Adoption Framework with management groups, policy-driven governance, hub-spoke networking, and identity management.

By Sujay SinghPublished: June 13, 202611 min read6 views✓ Fact Checked
AI neural network
AI neural network

Overview

In the relentless march towards digital transformation, enterprises are increasingly recognizing the strategic imperative of cloud adoption. However, migrating complex on-premises environments to the cloud, particularly at scale, introduces a myriad of challenges ranging from governance and security to operational efficiency and cost management. This is where Azure Landing Zones (ALZ), a prescriptive architectural approach deeply integrated with the Microsoft Cloud Adoption Framework (CAF), emerges as a critical enabler.

Azure Landing Zones provide a well-architected foundation that empowers organizations to accelerate their cloud journey with confidence. It's not just a collection of Azure resources; it's a holistic, opinionated framework designed for enterprise-scale environments. ALZ addresses common pitfalls by providing a consistent, secure, and governed environment right from the start, ensuring that new applications and workloads can be deployed rapidly and compliantly.

At its core, ALZ defines a standardized structure encompassing key architectural areas: identity, management groups, subscription organization, networking, security, governance, and operational monitoring. By establishing this foundational architecture, organizations can avoid the "cloud sprawl" often seen in unmanaged cloud environments, maintain a strong security posture, and optimize costs. This review delves into the technical intricacies, practical implementation steps, and strategic advantages of adopting Azure Landing Zones as the blueprint for enterprise cloud success.

Prerequisites

Before embarking on the implementation of Azure Landing Zones, certain foundational elements and permissions must be in place. These prerequisites ensure a smooth deployment and effective management of the enterprise-scale architecture.

  • Azure Subscription: An active Azure subscription is fundamental. For enterprise-scale deployments, an Enterprise Agreement (EA) or a Cloud Solution Provider (CSP) subscription is highly recommended, offering benefits like centralized billing, discounted rates, and dedicated support.
  • Azure Active Directory (Azure AD) Tenant: A pre-existing Azure AD tenant is required for identity and access management. This tenant will serve as the primary identity store for all cloud resources and users.
  • Understanding of Cloud Adoption Framework (CAF): While ALZ is a prescriptive implementation, a conceptual understanding of the Microsoft CAF principles – including strategy, plan, ready, adopt, govern, and manage – will provide valuable context and strategic alignment.
  • Required Permissions:
    • Azure AD Global Administrator: Necessary for initial setup, especially for granting permissions at the root management group level.
    • User Access Administrator or Owner Role at Root Management Group: This is crucial for creating and managing the management group hierarchy, assigning policies, and delegating permissions effectively. If your organization's Azure tenant is new, this role might need to be assigned to your user account by a Global Administrator.
  • Tools:
    • Azure CLI: Installed and configured on your local machine or via Azure Cloud Shell. This will be extensively used for command-line interactions.
    • Azure PowerShell (Optional but Recommended): For those preferring PowerShell, it provides an alternative for managing Azure resources.
    • Git Client: Essential for cloning and managing Bicep/ARM templates from repositories, especially if utilizing the ALZ reference implementations.
    • VS Code (Optional but Recommended): An excellent IDE for authoring Bicep templates and managing configuration files.
  • Network Planning: Initial thoughts on IP address ranges, hybrid connectivity requirements (ExpressRoute/VPN), and DNS strategy will be beneficial, though these can be refined during the detailed design phase.

Detailed Steps with Commands

Implementing Azure Landing Zones involves a structured approach, starting from the foundational management group hierarchy and extending to network, identity, security, and governance. This section outlines the critical steps with practical Azure CLI commands and code examples.

1. Management Group Hierarchy

The management group hierarchy is the backbone of ALZ, providing a logical structure for applying governance policies at scale. It allows for inheritance, meaning policies assigned at a higher level apply to all child management groups and subscriptions. The recommended ALZ hierarchy is designed for enterprise governance.

A typical ALZ hierarchy looks like this:

Tenant Root Group (Azure AD Tenant)
├── Platform (Management Group)
│   ├── Identity (Subscription/MG)
│   ├── Connectivity (Subscription/MG)
│   └── Management (Subscription/MG)
├── Landing Zones (Management Group)
│   ├── Corp (Management Group for corporate workloads)
│   │   ├── Dev (Subscription)
│   │   ├── Test (Subscription)
│   │   └── Prod (Subscription)
│   ├── Online (Management Group for public-facing workloads)
│   │   ├── Dev (Subscription)
│   │   ├── Test (Subscription)
│   │   └── Prod (Subscription)
│   └── Sandbox (Management Group for experimental work)
│       └── Sandbox-Sub (Subscription)
├── Decommissioned (Management Group)
└── Sandbox (Management Group - typically for unmanaged dev/test)

Let's create the core management group structure:

# Login to Azure
az login

# Set the Tenant Root Group as the default scope for new management groups
# This is usually the tenant ID. You can find it with 'az account show --query tenantId -o tsv'
# For simplicity, we'll assume the current context is the root.

# Create the top-level management groups under the tenant root
az management-group create --name "Platform" --display-name "Platform Management"
az management-group create --name "LandingZones" --display-name "Landing Zones"
az management-group create --name "Decommissioned" --display-name "Decommissioned Subscriptions"
az management-group create --name "Sandbox" --display-name "Sandbox Subscriptions"

# Create sub-management groups under 'Platform'
az management-group create --name "mg-plat-identity" --display-name "Identity Platform" --parent "Platform"
az management-group create --name "mg-plat-connectivity" --display-name "Connectivity Platform" --parent "Platform"
az management-group create --name "mg-plat-management" --display-name "Management Platform" --parent "Platform"

# Create sub-management groups under 'LandingZones'
az management-group create --name "mg-lz-corp" --display-name "Corporate Landing Zone" --parent "LandingZones"
az management-group create --name "mg-lz-online" --display-name "Online Landing Zone" --parent "LandingZones"

echo "Management group hierarchy created successfully."

After creating the management groups, existing subscriptions can be moved into them. New subscriptions should be created directly within the appropriate management group.

# Example: Move an existing subscription to a management group
# Replace <subscriptionId> with your actual subscription ID
# Replace <managementGroupName> with the target management group name (e.g., 'mg-plat-identity')
az account management-group update --name <subscriptionId> --management-group-id <managementGroupName>

2. Subscription Strategy

ALZ advocates for a clear subscription strategy to segment workloads based on purpose, lifecycle, and governance needs. Common subscription types include:

  • Platform Subscriptions: Host shared services like identity components (Azure AD Domain Services, DNS), network hubs (Azure Firewall, VPN/ExpressRoute Gateways), and management tools (Log Analytics, Automation Accounts).
  • Landing Zone Subscriptions: Host application workloads. These are typically segmented by environment (dev, test, prod), business unit, or application criticality.
  • Sandbox Subscriptions: Provide isolated environments for experimentation and learning, with relaxed governance but often with cost controls.

While creating a subscription via CLI is possible, it typically requires specific permissions within your EA or CSP portal. The process usually involves a service principal or specific API calls. For most users, creating subscriptions is done through the Azure Portal or an automated "subscription vending machine" solution.

3. Identity and Access Management (IAM)

Azure AD is the central identity provider. ALZ emphasizes a robust RBAC strategy, often leveraging custom roles or a combination of built-in roles, assigned at the management group or subscription level. Principle of Least Privilege is paramount.

Example: Assigning the "Network Contributor" role to a specific security group for the 'Connectivity' management group.

# First, get the object ID of the Azure AD group
AZURE_AD_GROUP_NAME="Azure-Network-Admins"
GROUP_ID=$(az ad group show --group "$AZURE_AD_GROUP_NAME" --query id -o tsv)

# Get the Management Group ID for Connectivity
MG_ID="mg-plat-connectivity"

# Assign the 'Network Contributor' role to the group at the Connectivity management group scope
az role assignment create \
    --assignee-object-id "$GROUP_ID" \
    --assignee-principal-type Group \
    --scope "/providers/Microsoft.Management/managementGroups/$MG_ID" \
    --role "Network Contributor"

echo "Network Contributor role assigned to $AZURE_AD_GROUP_NAME at $MG_ID scope."

Beyond RBAC, ALZ integrates with Azure AD features like Conditional Access, Multi-Factor Authentication (MFA), and Privileged Identity Management (PIM) to enhance security.

4. Network Topology and Connectivity

The hub-spoke network topology is a cornerstone of ALZ, providing centralized control over network traffic, security, and shared services. Azure Virtual WAN is an evolution of this, offering global connectivity and simplified routing.

  • Hub VNet: Hosts shared network services like Azure Firewall, VPN Gateway, ExpressRoute Gateway, Azure DNS Private Resolver, and Network Virtual Appliances (NVAs).
  • Spoke VNets: Host application workloads and peer with the Hub VNet.
  • Hybrid Connectivity: ExpressRoute or Site-to-Site VPNs connect the Azure environment to on-premises datacenters.

Example: Creating a Hub VNet and a simple spoke VNet, then peering them (simplified for illustration).

# Define variables
HUB_RG="rg-network-hub-prod"
HUB_VNET="vnet-hub-prod"
HUB_VNET_PREFIX="10.100.0.0/16"
HUB_SUBNET_AZFW="AzureFirewallSubnet"
HUB_SUBNET_AZFW_PREFIX="10.100.0.0/24"
LOCATION="eastus"

SPOKE_RG="rg-app-prod-001"
SPOKE_VNET="vnet-app-prod-001"
SPOKE_VNET_PREFIX="10.1.0.0/16"
SPOKE_SUBNET_APP="snet-app-prod"
SPOKE_SUBNET_APP_PREFIX="10.1.0.0/24"

# Create Hub Resource Group and VNet
az group create --name $HUB_RG --location $LOCATION
az network vnet create \
    --name $HUB_VNET \
    --resource-group $HUB_RG \
    --address-prefix $HUB_VNET_PREFIX \
    --location $LOCATION \
    --subnet-name $HUB_SUBNET_AZFW \
    --subnet-prefix $HUB_SUBNET_AZFW_PREFIX

# Create Spoke Resource Group and VNet
az group create --name $SPOKE_RG --location $LOCATION
az network vnet create \
    --name $SPOKE_VNET \
    --resource-group $SPOKE_RG \
    --address-prefix $SPOKE_VNET_PREFIX \
    --location $LOCATION \
    --subnet-name $SPOKE_SUBNET_APP \
    --subnet-prefix $SPOKE_SUBNET_APP_PREFIX

# Peer Hub to Spoke
az network vnet peering create \
    --name "HubToSpoke-$SPOKE_VNET" \
    --resource-group $HUB_RG \
    --vnet-name $HUB_VNET \
    --remote-vnet $SPOKE_VNET \
    --allow-vnet-access \
    --allow-forwarded-traffic \
    --allow-gateway-transit \
    --remote-vnet-resource-group $SPOKE_RG

# Peer Spoke to Hub
az network vnet peering create \
    --name "SpokeToHub-$HUB_VNET" \
    --resource-group $SPOKE_RG \
    --vnet-name $SPOKE_VNET \
    --remote-vnet $HUB_VNET \
    --allow-vnet-access \
    --remote-gateways \
    --remote-vnet-resource-group $HUB_RG

echo "Hub and Spoke VNets created and peered."

DNS resolution is typically handled by Azure DNS Private Zones, linked to VNets, and potentially integrated with Azure DNS Private Resolver for hybrid scenarios.

5. Azure Policy and Governance

Azure Policy is the enforcement engine of ALZ, ensuring compliance, security, and cost management. Policies are assigned at management group scopes and inherited by child groups and subscriptions.

  • Policy Definitions: Rules for resources (e.g., "allowed locations," "require tags").
  • Policy Initiatives (Set Definitions): Collections of related policy definitions. ALZ provides robust initiatives like "Azure security baseline" or "NIST SP 800-53 R4."
  • Policy Assignments: Applying a definition or initiative to a specific scope (management group, subscription, resource group).

Example: Assigning the "Allowed locations" policy initiative to the 'LandingZones' management group, restricting resource deployment to specific Azure regions.

# Get the ID of the 'Allowed locations' built-in policy definition
POLICY_DEFINITION_ID=$(az policy definition show --name "AllowedLocations" --query id -o tsv)

# Or, if using a built-in initiative (e.g., Azure Security Benchmark)
# POLICY_INITIATIVE_ID=$(az policy set definition show --name "AzureSecurityCenter" --query id -o tsv)

# Define the scope (LandingZones management group)
SCOPE="/providers/Microsoft.Management/managementGroups/LandingZones"

# Define parameters for the policy (e.g., allowed locations)
ALLOWED_LOCATIONS='["eastus", "westus2", "westeurope"]'
PARAMETERS='{
    "listOfAllowedLocations": {
        "value": '$ALLOWED_LOCATIONS'
    }
}'

# Create the policy assignment
az policy assignment create \
    --name "Restrict-Locations-LandingZones" \
    --display-name "Restrict Azure Locations for Landing Zones" \
    --scope "$SCOPE" \
    --policy "$POLICY_DEFINITION_ID" \
    --params "$PARAMETERS" \
    --description "Ensures all resources within Landing Zones are deployed in approved regions."

echo "Allowed locations policy assigned to LandingZones management group."

ALZ reference implementations deploy a comprehensive set of policies and initiatives, covering aspects like tagging, resource types, network security, and data encryption.

6. Monitoring and Logging

Centralized monitoring and logging are crucial for operational visibility and security. ALZ mandates the deployment of Azure Monitor, Log Analytics Workspaces, and often Azure Sentinel.

  • Log Analytics Workspace: Central repository for all logs and metrics from Azure resources, custom applications, and hybrid environments.
  • Azure Monitor: Collects, analyzes, and acts on telemetry from Azure and on-premises environments.
  • Diagnostic Settings: Configured on individual Azure resources to send logs and metrics to the central Log Analytics Workspace.

Example: Creating a Log Analytics Workspace in the 'Management' platform subscription and configuring diagnostic settings for a Storage Account to send logs to it (conceptual, as actual diagnostic settings are resource-specific).

# Assume a 'Management' subscription is associated with 'mg-plat-management'
# And a resource group 'rg-mgmt-ops' exists in that subscription.

# Create a Log Analytics Workspace
LOG_ANALYTICS_RG="rg-mgmt-ops"
LOG_ANALYTICS_WORKSPACE_NAME="law-enterprise-prod"
LOCATION="eastus"

az monitor log-analytics workspace create \
    --resource-group "$LOG_ANALYTICS_RG" \
    --workspace-name "$LOG_ANALYTICS_WORKSPACE_NAME" \
    --location "$LOCATION" \
    --sku "PerGB2018" # Or other suitable SKU

echo "Log Analytics Workspace '$LOG_ANALYTICS_WORKSPACE_NAME' created."

# Example of configuring diagnostic settings for a Storage Account (conceptual)
# In a real scenario, this would be part of a Bicep template or a PowerShell script
# that iterates through resources.
# STORAGE_ACCOUNT_ID="/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Storage/storageAccounts/<saName>"
# WORKSPACE_ID=$(az monitor log-analytics workspace show --resource-group "$LOG_ANALYTICS_RG" --workspace-name "$LOG_ANALYTICS_WORKSPACE_NAME" --query id -o tsv)

# az monitor diagnostic-settings create \
#     --name "SendToLogAnalytics" \
#     --resource "$STORAGE_ACCOUNT_ID" \
#     --workspace "$WORKSPACE_ID" \
#     --logs '[{"categoryGroup": "allLogs", "enabled": true}]' \
#     --metrics '[{"category": "Transaction", "enabled": true}]'

7. Deployment Automation (Bicep/ARM)

Infrastructure as Code (IaC) is fundamental to ALZ, ensuring consistency, repeatability, and version control. Bicep, Microsoft's domain-specific language for deploying Azure resources, is the preferred tool.

ALZ reference implementations are available as Bicep modules, allowing for modular and parameter-driven deployments. This enables organizations to customize the ALZ setup to their specific needs.

Example: A simple Bicep module for creating a resource group, which could be part of a larger ALZ deployment.

// modules/resourceGroup.bicep
param name string
param location string
param tags object = {}

resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = {
  name: name
  location: location
  tags: tags
}

output id string = resourceGroup.id

To deploy this Bicep module at a management group scope (e.g., creating a new resource group for a landing zone):

// main.bicep (for deploying the ALZ foundation)
targetScope = 'managementGroup'

param landingZoneMgName string
param subscriptionId string
param resourceGroupName string
param resourceGroupLocation string
param resourceGroupTags object = {}

resource subscription 'Microsoft.Resources/subscriptions@2020-09-01' existing = {
  name: subscriptionId
}

module newResourceGroup 'modules/resourceGroup.bicep' = {
  scope: subscription
  name: '${resourceGroupName}-deployment'
  params: {
    name: resourceGroupName
    location: resourceGroupLocation
    tags: resourceGroupTags
  }
}

output resourceGroupId string = newResourceGroup.outputs.id

Deployment command using Azure CLI:

# Assuming you have a main.bicep and modules/resourceGroup.bicep
# This command deploys resources within a specific subscription, but the overall ALZ Bicep
# template would be deployed at the management group scope.

# For deploying a Bicep file at a subscription scope (e.g., creating a resource group within a landing zone sub)
az deployment sub create \
    --name "DeployResourceGroupExample" \
    --location "eastus" \
    --template-file "main.bicep" \
    --parameters \
        landingZoneMgName="mg-lz-corp" \
        subscriptionId="<your-landing-zone-subscription-id>" \
        resourceGroupName="rg-app-web-prod" \
        resourceGroupLocation="eastus" \
        resourceGroupTags='{"Environment":"Production", "Application":"WebApp"}'

# For deploying ALZ at a management group scope (e.g., initial setup)
# (This would be for the actual ALZ reference implementation Bicep)
# az deployment mg create --management-group-id "LandingZones" --template-file "alz-master.bicep" --parameters <params>

The official ALZ reference implementation on GitHub provides comprehensive Bicep templates for deploying the entire architecture, including management groups, policies, networking, and core services.

Security

Security is not an afterthought in Azure Landing Zones; it's baked into the architecture from the ground up. ALZ adopts a Zero Trust approach, assuming breach and verifying explicitly at every access point.

  • Identity Security:
    • Azure AD Integration: Centralized identity management ensures consistent authentication and authorization.
    • MFA and Conditional Access: Enforced for all administrative and sensitive access.
    • Privileged Identity Management (PIM): Just-in-Time (JIT) access for privileged roles, minimizing standing access.
    • Managed Identities: For Azure services to authenticate to other services without credential management.
  • Network Security:
    • Azure Firewall: Centralized network segmentation and traffic filtering in the hub VNet, controlling ingress/egress for all spokes.
    • Network Security Groups (NSGs): Granular control over traffic flow to and from individual resources within VNets.
    • Azure DDoS Protection: Standard tier for protecting public endpoints against volumetric and protocol attacks.
    • Private Endpoints/Service Endpoints: Securely access Azure PaaS services over a private network.
  • Governance and Compliance:
    • Azure Policy: Enforces security standards, resource configurations, and compliance requirements across the entire environment. Examples include requiring encryption for storage accounts, denying public IP addresses on VMs, or ensuring specific tags are present for cost allocation.
    • Azure Security Benchmark: ALZ aligns with this Microsoft-published benchmark, providing a secure baseline.
    • Azure Defender for Cloud (formerly Azure Security Center): Provides unified security management, threat protection, and security posture management across hybrid cloud workloads. Integrates with Azure Policy for continuous compliance assessment.
  • Data Protection:
    • Encryption at Rest: Azure Storage, Azure SQL Database, and other data services use platform-managed keys by default, with customer-managed keys (CMK) available for enhanced control (e.g., Azure Key Vault).
    • Encryption in Transit: TLS/SSL enforced for communication between services and clients.
    • Key Management: Azure Key Vault for secure storage and management of cryptographic keys, secrets, and certificates.
  • Threat Detection and Response:
    • Azure Sentinel: A cloud-native SIEM (Security Information and Event Management) solution that collects security data from various sources, detects threats, and automates responses. All logs from Log Analytics Workspaces can feed into Sentinel.
    • Azure Activity Logs: Records all subscription-level events, providing audit trails.
    • Resource Diagnostic Settings: Detailed logs from individual resources, sent to Log Analytics for analysis.

By implementing these security controls at the architectural level through ALZ, organizations can establish a robust security posture that scales with their cloud adoption.

Best Practices

Adopting Azure Landing Zones effectively requires adherence to several best practices that maximize its benefits and ensure long-term success.

  • Infrastructure as Code (IaC) for Everything:
    "Automate everything from day zero. If it's not in code, it's not real." - Sujay Singh, TechNews Venture.
    Use Bicep or ARM templates for deploying all infrastructure components, including management groups, subscriptions, policies, network resources, and core services. This ensures consistency, repeatability, and enables version control.
  • Automate Deployments with CI/CD: Integrate your IaC with CI/CD pipelines (e.g., Azure DevOps, GitHub Actions). This automates the deployment and update process, reduces human error, and ensures a consistent application of the ALZ architecture.
  • Shift-Left Security: Embed security considerations early in the development and deployment lifecycle. Azure Policy is a prime example, enforcing security configurations before resources are even provisioned. Regularly review and update security policies based on evolving threats and compliance requirements.
  • Comprehensive Tagging Strategy: Implement a mandatory and consistent tagging strategy across all Azure resources. Tags are crucial for cost management, resource organization, governance, and automation. Use Azure Policy to enforce tag compliance.
  • Cost Management Integration: Leverage Azure Cost Management + Billing to monitor, analyze, and optimize cloud spend. Integrate cost reporting with your management group hierarchy and tagging strategy to attribute costs accurately to business units or projects. Regularly review and right-size resources.
  • Regular Review and Iteration: Cloud environments are dynamic. The ALZ architecture should not be treated as a one-time deployment. Regularly review your management group structure, policy assignments, network topology, and security controls. Adapt them as your organization's needs, cloud services, and threat landscape evolve.
  • Modular Approach to Design: Design your ALZ components (e.g., networking, identity, governance) as modular units. This allows for easier customization, updates, and troubleshooting without impacting the entire architecture. Bicep modules are excellent for this.
  • Centralized Logging and Monitoring: Ensure all critical logs and metrics are routed to a central Log Analytics Workspace, feeding into Azure Monitor and Azure Sentinel. This provides a single pane of glass for operational insights, security monitoring, and compliance auditing.
  • Delegate Responsibilities Appropriately: Use the management group hierarchy and Azure RBAC to delegate administrative responsibilities effectively. Central IT teams manage platform services, while application teams manage their landing zone subscriptions, adhering to organizational policies.
  • Document Everything: Maintain comprehensive documentation of your ALZ design, deployment processes, policies, and operational procedures. This is vital for onboarding new team members, troubleshooting, and ensuring long-term maintainability.

FAQ

Q1: What is the fundamental difference between an Azure Landing Zone and simply setting up a few Azure subscriptions?

A1: The fundamental difference lies in scale, governance, and foresight. Simply setting up a few Azure subscriptions is an ad-hoc approach that often leads to "cloud sprawl," inconsistent security, and governance gaps as an organization grows. An Azure Landing Zone, conversely, is a prescriptive, enterprise

Written By

Sujay Singh

Technology Expert / Cloud Architect at Virtual Venture covering AI, cloud computing, cybersecurity, and emerging tech trends.

Sources & References

• Official company announcements and press releases

• Industry reports from Gartner, IDC, and Statista

• Peer-reviewed research and technical documentation

• On-record statements from industry experts

Last verified: June 13, 2026

Fact-checked by TechNews Venture editorial team

Leave a Comment

Comments are moderated and will appear after review.