Startup-Scale Landing Zone
A stripped-down, opinionated, production-ready Azure Landing Zone designed for startups and digital-native teams. Built for companies with 5–50 engineers that need to get Azure right from day one without enterprise complexity.
environment and team. No exceptions.Why This Landing Zone
Enterprise-grade foundations without enterprise complexity.
1 Hour Deploy
From zero to production-ready Azure with Bicep or Terraform. No consultants required.
2 Subscriptions
One management group, prod + non-prod. Simple hierarchy that grows with you.
Security Built-in
Defender for Cloud, RBAC, NSG deny-all defaults, policy enforcement from day one.
Cost Aware
Budget alerts at 50/80/100%, tag enforcement, and reservation guidance built in.
How It Compares
ALZ (Enterprise Scale)
100+ modules, months to understand, built for 10k-seat enterprises
ALZ-Bicep
Still enterprise-scoped, overwhelming for a 10-person startup
CAF Terraform Module
Enterprise-scoped, in extended support (archived Aug 2026). Microsoft recommends migrating to Azure Verified Modules.
This Project
Deploys in 1 hour. Grows with you. Written for engineers, not consultants.
Architecture Overview
Simple, self-contained subscriptions. No hub network, no Azure Firewall — until you need them.
Management Hierarchy
Network Layout
10.0.0.0/16
/20/22/22/2410.1.0.0/16
/20/22/22/24Quick Start
From zero to production-ready in under an hour.
Prerequisites
5 minClone the repo, log in to Azure, and validate your environment. You'll need Azure CLI, two subscriptions (prod + nonprod), and Owner permissions.
Show commands
git clone https://github.com/ricmmartins/sslz.git
cd sslz
az login
az account set --subscription <YOUR_PROD_SUBSCRIPTION_ID>
# Validates CLI tools, Azure auth, provider registrations, and permissions
./scripts/validate-prerequisites.sh
Management Groups (Optional)
5 minCreate the management group hierarchy. Requires tenant-level permissions (Owner on Tenant Root Group). Skip if you don't have access — the landing zone works without it.
Bicep command
az deployment tenant create \
--location eastus2 \
--template-file infra/bicep/modules/management-groups.bicep \
--parameters \
companyName='<yourcompany>' \
prodSubscriptionId='<PROD_SUB_ID>' \
nonprodSubscriptionId='<NONPROD_SUB_ID>'
Terraform command
cd infra/terraform/modules/management-groups
terraform init
terraform apply \
-var='subscription_id=<ANY_SUB_ID>' \
-var='company_name=<yourcompany>' \
-var='prod_subscription_id=<PROD_SUB_ID>' \
-var='nonprod_subscription_id=<NONPROD_SUB_ID>'
cd ../../../..
Deploy
20 minDeploy the landing zone — policies, networking, monitoring, Defender for Cloud, and budgets. Copy the parameter file, edit with your values, preview with what-if/plan, then deploy.
Bicep commands
cd infra/bicep
# Copy and edit parameters (companyName, emails, budget, etc.)
cp parameters/prod.bicepparam parameters/prod.local.bicepparam
# Preview changes (no resources created)
az deployment sub what-if \
--location eastus2 \
--template-file main.bicep \
--parameters parameters/prod.local.bicepparam
# Deploy
az deployment sub create \
--location eastus2 \
--template-file main.bicep \
--parameters parameters/prod.local.bicepparam \
--name "lz-prod-$(date +%Y%m%d-%H%M%S)"
Terraform commands
cd infra/terraform
# Copy and edit variables (subscription_id, company_name, emails, etc.)
cp terraform.tfvars.example terraform.tfvars
terraform init
terraform plan -out=tfplan # Preview changes
terraform apply tfplan # Deploy
Verify
5 minConfirm resource groups, Log Analytics, policies, and Defender plans were created correctly.
Show commands
# Check resource groups
az group list \
--query "[?contains(name, 'yourcompany')].name" -o tsv
# Check Log Analytics workspace
az monitor log-analytics workspace list \
--query "[].name" -o tsv
# Check policy assignments
az policy assignment list \
--query "[].displayName" -o tsv
# Check Defender plans
az security pricing list \
--query "value[?pricingTier=='Standard'].{Name:name, Tier:pricingTier}" -o table
# Check security contact
az security contact show --name default \
--query "{Email:emails, Roles:notificationsByRole.roles}" -o table
# Check budget
az consumption budget list \
--query "[].{Name:name, Amount:amount, TimeGrain:timeGrain}" -o table
# Check NSG rules
az network nsg list --query "[].name" -o tsv
Post-Deploy
30 minAssign RBAC roles to your team, set up CI/CD with Workload Identity Federation, and enable cost anomaly alerts. See the Day-1 Checklist below.
Teardown commands (if needed)
# Remove all landing zone resources
./scripts/teardown.sh --tool terraform --env nonprod --company yourcompany
./scripts/teardown.sh --tool bicep --env nonprod --company yourcompany
Day-1 Checklist
90 minutes from zero to production-ready. Three phases, one afternoon.
Pre-Deployment
30 min- Verify Entra ID tenant is set up, custom domain added
- Enable Security Defaults (Entra ID > Properties > Security Defaults)
- Create break-glass account with hardware MFA key
- Create security group
sg-azure-admins, add 2-3 founders/leads
Deploy
30 min- Run Bicep or Terraform deployment — see Step 3 above
- Verify resources in Azure Portal
Post-Deployment
30 min- Assign
sg-azure-adminsas Owner on the management group - Create Entra ID groups:
sg-azure-developers,sg-azure-readers - Assign RBAC roles (see Security docs)
- Set up CI/CD with Workload Identity Federation
- Test a sample deployment end-to-end
What's Included
Management Groups
Single MG with two subscriptions underneath
Azure Policy
Microsoft Cloud Security Benchmark (audit), required tags, allowed locations
Networking
VNet + subnets per subscription, NSGs with deny-all-inbound default
Monitoring
Log Analytics workspace, Activity Log forwarding, diagnostic settings policy
Security
Defender for Cloud CSPM, Defender for Servers P2 (prod), MFA via Security Defaults
Cost Management
Budget alerts at 50/80/100%, tagging enforcement
CI/CD
GitHub Actions workflows for Bicep and Terraform
What's NOT Included (By Design)
Enterprise components you should add later when needed.
Starter Examples
Pre-built configurations for common startup archetypes.
Documentation
Practical guides written for engineers, not consultants.
Architecture Decisions
Why this layout, what we skipped, and when to revisit
Resource Inventory
Complete list of every Azure resource created
Networking Deep Dive
VNet design, NSGs, and when you actually need a hub
Security Baseline
Defender, RBAC, logging, and network security
Cost Management
Budgets, reservations, and common cost mistakes
CI/CD Setup
Workload Identity Federation and GitHub Actions
Troubleshooting
Common deployment errors and fixes
Graduation Guide
When and how to migrate to full ALZ
Architecture Diagrams
Visual diagrams of the full landing zone