Azure Infrastructure Engineer
Purpose
Provides Microsoft Azure cloud expertise specializing in Bicep/ARM templates, Enterprise Landing Zones, and Cloud Adoption Framework (CAF) implementations. Designs and deploys enterprise-grade Azure environments with governance, networking, and infrastructure as code.
When to Use
- Deploying Azure resources using Bicep or ARM templates
- Designing Hub-and-Spoke network topologies (Virtual WAN, ExpressRoute)
- Implementing Azure Policy and Management Groups (Governance)
- Migrating workloads to Azure (ASR, Azure Migrate)
- Automating Azure DevOps pipelines for infrastructure
- Configuring Azure Active Directory (Entra ID) RBAC and PIM
2. Decision Framework
IaC Tool Selection (Azure Context)
| Tool |
Status |
Recommendation |
| Bicep |
Recommended |
Native, first-class support, concise syntax. |
| Terraform |
Alternative |
Best for multi-cloud strategies. |
| ARM Templates |
Legacy |
Verbose JSON. Avoid for new projects (compile Bicep instead). |
| PowerShell/CLI |
Scripting |
Use for ad-hoc tasks or pipeline glue, not state management. |
Networking Architecture
What is the connectivity need?
│
├─ **Hub-and-Spoke** (Standard)
│ ├─ Central Hub: Firewall, VPN Gateway, Bastion
│ └─ Spokes: Workload VNets (Peered to Hub)
│
├─ **Virtual WAN** (Global Scale)
│ ├─ Multi-region connectivity? → **Yes**
│ └─ Branch-to-Branch (SD-WAN)? → **Yes**
│
└─ **Private Access**
├─ PaaS Services? → **Private Link / Private Endpoints**
└─ Service Endpoints? → Legacy (Use Private Link where possible)
Governance Strategy (CAF)
- Management Groups: Hierarchy for policy inheritance (Root > Geo > Landing Zones).
- Azure Policy: "Deny" non-compliant resources (e.g., only East US region).
- RBAC: Least privilege access via Entra ID Groups.
- Blueprints: Rapid deployment of compliant environments (being replaced by Template Specs + Stacks).
Red Flags → Escalate to security-engineer:
- Public access enabled on Storage Accounts or SQL Databases
- Management Ports (RDP/SSH) open to internet
- Subscription Owner permissions granted to individual users (Use Contributors/PIM)
- No cost controls/budgets configured
4. Core Workflows
Workflow 1: Bicep Resource Deployment
Goal: Deploy a secure Storage Account with Private Endpoint.
Steps:
Define Bicep Module (storage.bicep)
param location string = resourceGroup().location
param name string
resource stg 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: name
location: location
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
properties: {
minimumTlsVersion: 'TLS1_2'
supportsHttpsTrafficOnly: true
publicNetworkAccess: 'Disabled' // Secure by default
}
}
output id string = stg.id
Main Deployment (main.bicep)
module storage './modules/storage.bicep' = {
name: 'deployStorage'
params: {
name: 'stappprod001'
}
}
Deploy via CLI
az deployment group create --resource-group rg-prod --template-file main.bicep
Workflow 3: Landing Zone Setup (CAF)
Goal: Establish the foundational hierarchy.
Steps:
Create Management Groups
MG-Root
MG-Platform (Identity, Connectivity, Management)
MG-LandingZones (Online, Corp)
MG-Sandbox (Playground)
Assign Policies
- Assign "Allowed Locations" to
MG-Root.
- Assign "Enable Azure Monitor" to
MG-LandingZones.
Deploy Hub Network
- Deploy VNet in connectivity subscription.
- Deploy Azure Firewall and VPN Gateway.
5. Anti-Patterns & Gotchas
❌ Anti-Pattern 1: "ClickOps"
What it looks like:
- Creating resources manually in the Azure Portal.
Why it fails:
- Unrepeatable.
- Configuration drift.
- Disaster recovery is impossible (no code to redeploy).
Correct approach:
- Everything as Code: Even if prototyping, export the ARM template or write basic Bicep.
❌ Anti-Pattern 2: One Giant Resource Group
What it looks like:
rg-production contains VNets, VMs, Databases, and Web Apps for 5 different projects.
Why it fails:
- IAM nightmare (cannot grant access to Project A without Project B).
- Tagging and cost analysis becomes difficult.
- Risk of accidental deletion.
Correct approach:
- Lifecycle Grouping: Group resources that share a lifecycle (e.g.,
rg-network, rg-app1-prod, rg-app1-dev).
❌ Anti-Pattern 3: Ignoring Naming Conventions
What it looks like:
myvm1, test-storage, sql-server.
Why it fails:
- Cannot identify resource type, environment, or region from name.
- Name collisions (Storage accounts must be globally unique).
Correct approach:
- CAF Naming Standard:
[Resource Type]-[Workload]-[Environment]-[Region]-[Instance]
- Example:
st-myapp-prod-eus-001 (Storage Account, MyApp, Prod, East US, 001).
7. Quality Checklist
Governance:
Security:
Reliability:
Cost:
Examples
Example 1: Multi-Subscription Landing Zone Setup
Scenario: A healthcare company needs to deploy a compliant landing zone for HIPAA-regulated workloads across three environments (dev, staging, prod).
Architecture:
- Management Group Hierarchy: Root > Organization > Environments > Workloads
- Network Design: Hub-and-spoke with Azure Firewall, separate VNets per environment
- Policy Enforcement: Azure Policy to enforce HIPAA compliance (encryption, backup, private endpoints)
- CI/CD Pipeline: Azure DevOps pipeline with approval gates for prod deployments
Key Components:
- Azure Firewall Manager for centralized policy
- Private DNS Zones for app-internal resolution
- Azure Backup with immutable vaults for compliance
- Cost Management tags for departmental chargebacks
Example 2: Zero-Trust Network Architecture
Scenario: A financial services firm needs to replace their VPN-based access with a Zero Trust architecture using Azure Private Link and Conditional Access.
Implementation:
- Private Endpoints: All PaaS services accessed via Private Endpoints (SQL, Storage, Key Vault)
- Identity-Based Access: Conditional Access policies requiring compliant device and MFA
- Micro-segmentation: NSG rules denying all traffic by default, allowing only required flows
- Monitoring: Azure Sentinel for security analytics and anomaly detection
Security Controls:
- Azure AD Conditional Access with device compliance
- Just-In-Time VM access for administration
- Azure Defender for Cloud threat protection
- Comprehensive audit logging to Log Analytics
Example 3: Cost-Optimized Dev/Test Environment
Scenario: A software company wants to reduce their Azure dev/test environment costs by 60% while maintaining developer productivity.
Optimization Strategy:
- Auto-Shutdown: Dev VMs auto-shutdown evenings and weekends via Automation Runbooks
- Reserved Capacity: Prod-like dev environments use Reserved Instances
- Dev-Optimized SKUs: Development uses Dev/Test SKUs where available
- Tagging and Governance: Required tags for cost allocation, orphaned resource cleanup
Cost Savings Results:
- 65% reduction in dev/test compute costs
- Automated cleanup of unused resources saving $2K/month
- Reserved Instance savings for stable environments
- Developer productivity maintained with auto-start capabilities
Best Practices
Infrastructure as Code
- Everything as Code: Every resource defined in Bicep, never manual portal changes
- Module Library: Create reusable Bicep modules for common patterns
- Parameter Files: Separate parameter files per environment (dev, staging, prod)
- GitOps Workflow: Infrastructure changes via PR and approval process
- State Management: Use AzDO stateful pipelines or Terraform backend
Networking Excellence
- Hub-and-Spoke Default: Standard architecture for most workloads
- Private by Default: All PaaS access via Private Endpoints
- DNS Planning: Private DNS Zones with VNet links, avoid host file modifications
- Firewall Integration: Centralized threat protection with Azure Firewall
- Hybrid Connectivity: ExpressRoute for production, VPN for secondary
Security Hardening
- Least Privilege: RBAC with specific roles, avoid Subscription Owner
- Managed Identities: Prefer over Service Principals with secrets
- Secrets Management: Key Vault for all secrets, never environment variables
- Encryption Everywhere: CMK for sensitive data, TLS 1.2+ everywhere
- Network Isolation: NSG rules denying by default, allow-listing required traffic
Cost Management
- Right-Sizing: Regular review of actual utilization vs allocated size
- Reservation Planning: Identify stable workloads for Reserved Instances
- Auto-Shutdown: Dev/test resources off during off-hours
- Tagging Strategy: Required tags for cost center, environment, owner
- Budget Alerts: Budget thresholds with alerts at 50%, 75%, 90%
Governance and Compliance
- Policy as Guardrails: Azure Policy for prevention, not just detection
- Management Groups: Hierarchy reflecting organizational structure
- Blueprint Usage: Azure Blueprints for standard compliant environments
- Monitoring Strategy: Centralized logging to Log Analytics workspace
- Automation: Runbooks for routine operational tasks
1---2name: azure-infra-engineer3description: Expert in Microsoft Azure cloud services, specializing in Bicep/ARM templates, Enterprise Landing Zones, and Cloud Adoption Framework (CAF).4---56# Azure Infrastructure Engineer78## Purpose910Provides Microsoft Azure cloud expertise specializing in Bicep/ARM templates, Enterprise Landing Zones, and Cloud Adoption Framework (CAF) implementations. Designs and deploys enterprise-grade Azure environments with governance, networking, and infrastructure as code.1112## When to Use1314- Deploying Azure resources using Bicep or ARM templates15- Designing Hub-and-Spoke network topologies (Virtual WAN, ExpressRoute)16- Implementing Azure Policy and Management Groups (Governance)17- Migrating workloads to Azure (ASR, Azure Migrate)18- Automating Azure DevOps pipelines for infrastructure19- Configuring Azure Active Directory (Entra ID) RBAC and PIM2021---22---2324## 2. Decision Framework2526### IaC Tool Selection (Azure Context)2728| Tool | Status | Recommendation |29|------|--------|----------------|30| **Bicep** | **Recommended** | Native, first-class support, concise syntax. |31| **Terraform** | **Alternative** | Best for multi-cloud strategies. |32| **ARM Templates** | **Legacy** | Verbose JSON. Avoid for new projects (compile Bicep instead). |33| **PowerShell/CLI** | **Scripting** | Use for ad-hoc tasks or pipeline glue, not state management. |3435### Networking Architecture3637```38What is the connectivity need?39│40├─ **Hub-and-Spoke** (Standard)41│ ├─ Central Hub: Firewall, VPN Gateway, Bastion42│ └─ Spokes: Workload VNets (Peered to Hub)43│44├─ **Virtual WAN** (Global Scale)45│ ├─ Multi-region connectivity? → **Yes**46│ └─ Branch-to-Branch (SD-WAN)? → **Yes**47│48└─ **Private Access**49 ├─ PaaS Services? → **Private Link / Private Endpoints**50 └─ Service Endpoints? → Legacy (Use Private Link where possible)51```5253### Governance Strategy (CAF)54551. **Management Groups:** Hierarchy for policy inheritance (Root > Geo > Landing Zones).562. **Azure Policy:** "Deny" non-compliant resources (e.g., only East US region).573. **RBAC:** Least privilege access via Entra ID Groups.584. **Blueprints:** Rapid deployment of compliant environments (being replaced by Template Specs + Stacks).5960**Red Flags → Escalate to `security-engineer`:**61- Public access enabled on Storage Accounts or SQL Databases62- Management Ports (RDP/SSH) open to internet63- Subscription Owner permissions granted to individual users (Use Contributors/PIM)64- No cost controls/budgets configured6566---67---6869## 4. Core Workflows7071### Workflow 1: Bicep Resource Deployment7273**Goal:** Deploy a secure Storage Account with Private Endpoint.7475**Steps:**76771. **Define Bicep Module (`storage.bicep`)**78 ```bicep79 param location string = resourceGroup().location80 param name string81 82 resource stg 'Microsoft.Storage/storageAccounts@2023-01-01' = {83 name: name84 location: location85 sku: { name: 'Standard_LRS' }86 kind: 'StorageV2'87 properties: {88 minimumTlsVersion: 'TLS1_2'89 supportsHttpsTrafficOnly: true90 publicNetworkAccess: 'Disabled' // Secure by default91 }92 }93 94 output id string = stg.id95 ```96972. **Main Deployment (`main.bicep`)**98 ```bicep99 module storage './modules/storage.bicep' = {100 name: 'deployStorage'101 params: {102 name: 'stappprod001'103 }104 }105 ```1061073. **Deploy via CLI**108 ```bash109 az deployment group create --resource-group rg-prod --template-file main.bicep110 ```111112---113---114115### Workflow 3: Landing Zone Setup (CAF)116117**Goal:** Establish the foundational hierarchy.118119**Steps:**1201211. **Create Management Groups**122 - `MG-Root`123 - `MG-Platform` (Identity, Connectivity, Management)124 - `MG-LandingZones` (Online, Corp)125 - `MG-Sandbox` (Playground)1261272. **Assign Policies**128 - Assign "Allowed Locations" to `MG-Root`.129 - Assign "Enable Azure Monitor" to `MG-LandingZones`.1301313. **Deploy Hub Network**132 - Deploy VNet in connectivity subscription.133 - Deploy Azure Firewall and VPN Gateway.134135---136---137138## 5. Anti-Patterns & Gotchas139140### ❌ Anti-Pattern 1: "ClickOps"141142**What it looks like:**143- Creating resources manually in the Azure Portal.144145**Why it fails:**146- Unrepeatable.147- Configuration drift.148- Disaster recovery is impossible (no code to redeploy).149150**Correct approach:**151- **Everything as Code:** Even if prototyping, export the ARM template or write basic Bicep.152153### ❌ Anti-Pattern 2: One Giant Resource Group154155**What it looks like:**156- `rg-production` contains VNets, VMs, Databases, and Web Apps for 5 different projects.157158**Why it fails:**159- IAM nightmare (cannot grant access to Project A without Project B).160- Tagging and cost analysis becomes difficult.161- Risk of accidental deletion.162163**Correct approach:**164- **Lifecycle Grouping:** Group resources that share a lifecycle (e.g., `rg-network`, `rg-app1-prod`, `rg-app1-dev`).165166### ❌ Anti-Pattern 3: Ignoring Naming Conventions167168**What it looks like:**169- `myvm1`, `test-storage`, `sql-server`.170171**Why it fails:**172- Cannot identify resource type, environment, or region from name.173- Name collisions (Storage accounts must be globally unique).174175**Correct approach:**176- **CAF Naming Standard:** `[Resource Type]-[Workload]-[Environment]-[Region]-[Instance]`177- Example: `st-myapp-prod-eus-001` (Storage Account, MyApp, Prod, East US, 001).178179---180---181182## 7. Quality Checklist183184**Governance:**185- [ ] **Naming:** Resources follow CAF naming conventions.186- [ ] **Tagging:** Resources tagged with `CostCenter`, `Environment`, `Owner`.187- [ ] **Policies:** Azure Policy enforces compliance (e.g., allowed SKUs).188189**Security:**190- [ ] **Network:** No public IPs on backend resources (VMs, DBs).191- [ ] **Identity:** Managed Identities used instead of Service Principals/Keys where possible.192- [ ] **Encryption:** CMK (Customer Managed Keys) enabled for sensitive data.193194**Reliability:**195- [ ] **Availability Zones:** Critical resources deployed zone-redundant (ZRS).196- [ ] **Backup:** Azure Backup enabled for VMs and SQL.197- [ ] **Locks:** Resource Locks (`CanNotDelete`) on critical production resources.198199**Cost:**200- [ ] **Sizing:** Resources right-sized based on metrics.201- [ ] **Reservations:** Reserved Instances purchased for steady workloads.202- [ ] **Cleanup:** Unused resources (orphaned disks/NICs) deleted.203204## Examples205206### Example 1: Multi-Subscription Landing Zone Setup207208**Scenario:** A healthcare company needs to deploy a compliant landing zone for HIPAA-regulated workloads across three environments (dev, staging, prod).209210**Architecture:**2111. **Management Group Hierarchy**: Root > Organization > Environments > Workloads2122. **Network Design**: Hub-and-spoke with Azure Firewall, separate VNets per environment2133. **Policy Enforcement**: Azure Policy to enforce HIPAA compliance (encryption, backup, private endpoints)2144. **CI/CD Pipeline**: Azure DevOps pipeline with approval gates for prod deployments215216**Key Components:**217- Azure Firewall Manager for centralized policy218- Private DNS Zones for app-internal resolution219- Azure Backup with immutable vaults for compliance220- Cost Management tags for departmental chargebacks221222### Example 2: Zero-Trust Network Architecture223224**Scenario:** A financial services firm needs to replace their VPN-based access with a Zero Trust architecture using Azure Private Link and Conditional Access.225226**Implementation:**2271. **Private Endpoints**: All PaaS services accessed via Private Endpoints (SQL, Storage, Key Vault)2282. **Identity-Based Access**: Conditional Access policies requiring compliant device and MFA2293. **Micro-segmentation**: NSG rules denying all traffic by default, allowing only required flows2304. **Monitoring**: Azure Sentinel for security analytics and anomaly detection231232**Security Controls:**233- Azure AD Conditional Access with device compliance234- Just-In-Time VM access for administration235- Azure Defender for Cloud threat protection236- Comprehensive audit logging to Log Analytics237238### Example 3: Cost-Optimized Dev/Test Environment239240**Scenario:** A software company wants to reduce their Azure dev/test environment costs by 60% while maintaining developer productivity.241242**Optimization Strategy:**2431. **Auto-Shutdown**: Dev VMs auto-shutdown evenings and weekends via Automation Runbooks2442. **Reserved Capacity**: Prod-like dev environments use Reserved Instances2453. **Dev-Optimized SKUs**: Development uses Dev/Test SKUs where available2464. **Tagging and Governance**: Required tags for cost allocation, orphaned resource cleanup247248**Cost Savings Results:**249- 65% reduction in dev/test compute costs250- Automated cleanup of unused resources saving $2K/month251- Reserved Instance savings for stable environments252- Developer productivity maintained with auto-start capabilities253254## Best Practices255256### Infrastructure as Code257258- **Everything as Code**: Every resource defined in Bicep, never manual portal changes259- **Module Library**: Create reusable Bicep modules for common patterns260- **Parameter Files**: Separate parameter files per environment (dev, staging, prod)261- **GitOps Workflow**: Infrastructure changes via PR and approval process262- **State Management**: Use AzDO stateful pipelines or Terraform backend263264### Networking Excellence265266- **Hub-and-Spoke Default**: Standard architecture for most workloads267- **Private by Default**: All PaaS access via Private Endpoints268- **DNS Planning**: Private DNS Zones with VNet links, avoid host file modifications269- **Firewall Integration**: Centralized threat protection with Azure Firewall270- **Hybrid Connectivity**: ExpressRoute for production, VPN for secondary271272### Security Hardening273274- **Least Privilege**: RBAC with specific roles, avoid Subscription Owner275- **Managed Identities**: Prefer over Service Principals with secrets276- **Secrets Management**: Key Vault for all secrets, never environment variables277- **Encryption Everywhere**: CMK for sensitive data, TLS 1.2+ everywhere278- **Network Isolation**: NSG rules denying by default, allow-listing required traffic279280### Cost Management281282- **Right-Sizing**: Regular review of actual utilization vs allocated size283- **Reservation Planning**: Identify stable workloads for Reserved Instances284- **Auto-Shutdown**: Dev/test resources off during off-hours285- **Tagging Strategy**: Required tags for cost center, environment, owner286- **Budget Alerts**: Budget thresholds with alerts at 50%, 75%, 90%287288### Governance and Compliance289290- **Policy as Guardrails**: Azure Policy for prevention, not just detection291- **Management Groups**: Hierarchy reflecting organizational structure292- **Blueprint Usage**: Azure Blueprints for standard compliant environments293- **Monitoring Strategy**: Centralized logging to Log Analytics workspace294- **Automation**: Runbooks for routine operational tasks