TL;DR
“I wanted to learn Azure security in a way that certifications alone couldn’t teach me—by breaking things, detecting misconfigurations, and building a tool to find them.”
- Week 1 was baseline setup + first policy detection
 - Hit CLI/PowerShell quirks and Azure Policy delays
 - Repo + workflow started coming together
 - Next week → storage misconfigurations + tenant chaos
 
This is Week 1 of my 90-Day challenge to build an Azure Misconfiguration Scanner while deeply learning Azure security architecture, IAM, and policy-driven detection. With the help of James Lee's AZ-104 Course, Microsoft Learn, and ChatGPT, I am learning and building.
Azure security concepts often make sense on paper, but in practice, misconfigurations happen fast. So instead of passively studying, I:
- Created an Azure security lab from scratch
 - Intentionally misconfigured resources
 - Detected those misconfigs with Azure Policy + automation
 - Built toward a custom misconfiguration scanner by Day 90
 
Week 1 Goals
- Set up a baseline Azure environment
 - Understand Azure Policy basics
 - Trigger the first noncompliance detection
 - Start organizing everything in a GitHub repo
 
What I Accomplished
- ✅ Created Resource Group RG-SecureAccess as my main test scope
 - ✅ Built test users, groups, and a custom insecure RBAC role
 - ✅ Learned how to assign built-in Azure Policies
 - “Network interfaces should not have public IPs”
 - ✅ Created a misconfigured NIC to test detection
 - ✅ Saw Azure Policy deny a VM creation (cool moment!)
 - ✅ Started repo scaffolding with queries/nics-with-public-ips.cli
 
Early Struggles
- Azure CLI vs PowerShell quoting: Multi-line CLI commands and JSON parameters broke constantly until I learned to use JSON files for parameters.
 - Azure Policy evaluation delay: I expected instant results but policies take ~5-10 minutes to evaluate resources.
 - Tenant confusion (EXT# accounts): Guest vs. internal accounts behave differently for RBAC & CLI. I hit weird auth issues early on but didn’t know they’d come back to bite me harder in Week 2.
 
Hands-On Example
Here’s the CLI command I used to create a policy that
 az policy assignment create `
   --name "AuditStoragePublicAccess" `
   --display-name "Audit public network access on storage accounts" `
   --policy e56962a6-4747-49cd-b67b-bf8b01975c4c `                                                       
   --params '{\"listOfAllowedLocations\":{\"value\":[\"eastus\"]}}' `      
   --scope "/subscriptions/5d4b8df0-f30a-4bc3-b350-1ace90d201b8/resourceGroups/RG-SecureAccess"
Then, I had to create a storage account with public access enabled to trigger the policy violation
az storage account create `
  --name "publicstoragedemo$((Get-Random -Maximum 9999))" `
  --resource-group "RG-SecureAccess" `
  --location "eastus" `
  --sku "Standard_LRS" `
  --kind "StorageV2" `
  --allow-blob-public-access true `
  --public-network-access Enabled
*Follow me here if you want to see how this experiment evolves weekly.
*
Series Index
- Week 1: Baseline Setup & First Detection
 - Week 2: Learning Azure Security the Hard Way
 - (Week 3 coming soon: Key Vault misconfigurations)
 
    
Top comments (0)