You've Got This 💛
This guide is built for how your brain actually works — short chunks, clear patterns, real-world comparisons, no jargon walls. Verified against Microsoft's official AZ-104 exam objectives (April 2025).
- Cloud-only: Lives only in Azure. You create/manage everything here.
- Synced: Copied from on-prem Active Directory. Managed on-prem — Azure is the copy.
- Guest (B2B): External person invited by email. Type = "Guest". Has limited access by default.
- Security Group: Controls access to Azure resources (most common)
- Microsoft 365 Group: For collaboration — Teams, email, SharePoint
- Assigned: You pick who's in it manually
- Dynamic User: Auto-joins users by rule (e.g., department = "IT")
- Dynamic Device: Same, but for devices
- Free: Basic users/groups, simple SSO
- P1: Dynamic groups, SSPR, Conditional Access, Hybrid Join
- P2: Everything in P1 + Privileged Identity Management (PIM)
- Dynamic groups need P1 or P2 — won't work on Free tier.
- Dynamic membership is NOT instant — can take minutes to hours to update.
- Synced users: their name/attributes are managed on-prem. You can't change them in Azure.
| What | How it works |
|---|---|
| Who can use it | Users with Entra ID P1/P2 or Microsoft 365 license |
| Admin accounts | Always need 2 auth methods — can't be reduced to 1 |
| Auth methods | Mobile app notification, authenticator code, email, mobile phone, security questions |
| On-prem writeback | Requires P1/P2 + Entra Connect + Password Writeback enabled in settings |
| Enable scope | None / Selected group / All users (you control the rollout) |
- Owner: Full access + can give access to others
- Contributor: Full access but CANNOT give access to others
- Reader: Can look, can't touch
- User Access Admin: Manages who gets access — but can't use resources themselves
Roles at a higher level flow DOWN to everything below it.
- Additive: No deny assignments by default. More roles = more access.
- Max 4,000 role assignments per subscription
- Custom roles: Possible, but complex — start with built-in
- Deny assignments: Exist but only set by Azure Blueprints/management
- Enforces rules — "thou shalt only create VMs in East US"
- Assigned to: Management Group, Subscription, or Resource Group
- Initiative: A group of policies (like a bundle)
- Effect options: Deny, Audit, Append, Modify, DeployIfNotExists
- Name/value pairs on resources:
env=prod,team=finance - Do NOT inherit — resource groups don't pass tags to resources
- Max 50 tags per resource
- Use Policy to enforce required tags
- CanNotDelete: Can read + modify, but can't delete
- ReadOnly: Can read only — no changes at all
- Locks override RBAC — even Owner can't delete a locked resource
- Must remove the lock first, then delete
Tags don't inherit — a tag on a Resource Group does NOT automatically appear on resources inside it. You need Azure Policy to enforce tag inheritance. This trips up a lot of people.
| Feature | Management Groups | Azure Blueprints |
|---|---|---|
| Purpose | Organize subscriptions into hierarchy | Package + deploy governance at scale |
| Contains | Subscriptions, other MGs | Policies, RBACs, Resource Groups, ARM templates |
| Max depth | 6 levels below root | N/A |
| Deny ability | No direct deny | Yes — Blueprint deny assignments stick even against Owner |
Brain Break — Chapter 1 Done!
Identity & Governance is the highest-weighted chapter. If you've got RBAC, SSPR, Policy, Tags, and Locks down cold — you're ahead of most test-takers. Take 5 minutes, then hit Chapter 2.
Chapter 1 complete! Click to celebrate and move on 🎉
| Redundancy | Copies | Scope | Read from secondary? |
|---|---|---|---|
| LRS | 3 | Single datacenter | No |
| ZRS | 3 | 3 zones same region | No |
| GRS | 6 | Primary + secondary region | No (need failover) |
| RA-GRS | 6 | Primary + secondary region | Yes — always |
| GZRS | 6 | 3 zones + secondary region | No |
| RA-GZRS | 6 | 3 zones + secondary region | Yes — always |
RA-GRS only lets you read from the secondary region without a failover. Regular GRS = you cannot read secondary until you trigger a failover. The "RA" prefix = "Read Access."
| Tier | Access freq. | Storage cost | Retrieval cost | Online? |
|---|---|---|---|---|
| Hot | Frequent | Highest | Lowest | Yes |
| Cool | Infrequent | Medium | Medium | Yes |
| Cold | Rare | Lower | Higher | Yes |
| Archive | Very rare | Lowest | Highest + wait | Offline (rehydrate) |
- Archive = offline. You cannot read it directly — must rehydrate first (up to 15 hours for standard priority).
- Early deletion fees: Cool = 30-day minimum, Archive = 180-day minimum
- Soft delete for containers is a separate setting from blob soft delete (commonly tested)
- Fully managed SMB/NFS file shares in the cloud
- Mount on Windows, Linux, macOS
- Use: replace on-prem file servers
- Supports Azure File Sync to cache files on-prem
- Standard HDD: Dev/test, low-cost
- Standard SSD: Web servers, lightly loaded apps
- Premium SSD: Production workloads, databases
- Ultra Disk: SAP HANA, top-tier IOPS
- Blob: Unstructured data (images, videos, backups)
- Queue: Message queuing between services
- Table: NoSQL key-value store
- Files: SMB/NFS file shares
Chapter 2 complete — Storage is done! 💾
| SLA Type | SLA | What it requires |
|---|---|---|
| Single VM (Premium SSD) | 99.9% | Premium storage on all disks |
| Availability Set | 99.95% | 2+ VMs, same datacenter, different fault/update domains |
| Availability Zones | 99.99% | 2+ VMs in different physical zones |
Availability Set = protects from hardware failure within a single datacenter (fault domains) and rolling updates (update domains). Availability Zone = protects from entire datacenter failure — physically separate buildings with independent power, cooling, and networking.
- Auto-scale out/in based on load (CPU, queue depth, custom metrics)
- All VMs run same image — great for stateless apps
- Supports Availability Zones for high availability
- Load Balancer or App Gateway distributes traffic
- Managed PaaS for web apps, APIs, mobile backends
- Free/Shared: Dev/test only, no SLA
- Basic: Dedicated compute, manual scale, no autoscale
- Standard+: Autoscale, deployment slots, custom domains, SSL
- Premium: VNet integration, Private Endpoints
- Staging environments within App Service
- Swap staging → production with zero downtime
- Requires Standard tier or above
- App settings can be "slot sticky" (don't swap with slot)
- Run a single container, no infrastructure management
- Fastest way to run a container in Azure
- Good for: burst workloads, simple tasks, testing
- Billed per second — cost-effective for short runs
- Managed Kubernetes cluster
- Good for: complex microservices, production workloads
- Azure manages the control plane for free
- You pay for agent nodes (VMs)
- Private Docker registry in Azure
- Store and manage container images
- Integrates with ACI and AKS for deployments
- Geo-replication available on Premium SKU
| Feature | ARM Template (JSON) | Bicep |
|---|---|---|
| Language | JSON (verbose) | Cleaner DSL (transpiles to ARM) |
| Idempotent | Yes | Yes |
| Deployment modes | Incremental / Complete | Incremental / Complete |
| Complete mode risk | Deletes resources not in template | Same — deletes unlisted resources |
Complete mode deployment deletes resources NOT in the template. If you deploy a template in Complete mode and forget to include an existing resource, Azure deletes it. Incremental mode (the default) only adds/modifies — it does not delete existing resources.
Chapter 3 complete — Compute conquered! ⚙️
VNet peering is NOT transitive. A↔B + B↔C does NOT give A↔C. To connect A and C you need a direct peering, or route through a hub VNet using a Network Virtual Appliance (NVA) with IP forwarding enabled. This comes up constantly in scenario questions.
| Feature | VNet Peering | VPN Gateway |
|---|---|---|
| Latency | Very low (Microsoft backbone) | Higher (encrypted tunnel) |
| Cost | Per GB transferred | Hourly + per GB |
| Transitive | No | No (unless using hub-spoke) |
| Cross-region | Yes (Global Peering) | Yes |
| Connect on-prem | No | Yes |
- Priority: 100–4096, lower = higher priority
- Source/Dest: IP, CIDR, Service Tag, or ASG
- Port: Single port or range
- Protocol: TCP, UDP, ICMP, or Any
- Action: Allow or Deny
Internet— all public internet trafficVirtualNetwork— all VNet address spaceAzureLoadBalancer— health probe trafficStorage— Azure Storage service endpoints
- Apply to: subnet OR NIC (or both)
- Subnet NSG: evaluated first for inbound
- NIC NSG: evaluated second for inbound
- Both must allow for traffic to pass when applied to both
| Feature | Azure Load Balancer | Application Gateway | Traffic Manager |
|---|---|---|---|
| Layer | Layer 4 (TCP/UDP) | Layer 7 (HTTP/S) | DNS-level (global) |
| SSL offload | No | Yes | No |
| URL routing | No | Yes | No |
| WAF | No | Yes (WAF SKU) | No |
| Basic SKU | Retiring | N/A | N/A |
| Standard SKU default | Closed (needs NSG rule) | N/A | N/A |
Standard Load Balancer is closed by default — you must explicitly add an NSG rule to allow traffic. Basic Load Balancer was open by default (but Basic Public IP is retiring September 2025). Exam questions about "why traffic isn't flowing" often involve this.
- Browser-based RDP/SSH — no public IP needed on VM
- Requires subnet named exactly
AzureBastionSubnet - Subnet must be /27 or larger
- Eliminates need to expose VM ports to internet
- Service Endpoint: Traffic stays on Azure backbone BUT uses public IP of the service
- Private Endpoint: Gives the service a private IP in your VNet — fully private
- Private Endpoint = more secure, more complex, DNS changes required
- Site-to-Site: On-prem network to Azure VNet (IPsec/IKE)
- Point-to-Site: Individual device to Azure VNet
- VNet-to-VNet: Two Azure VNets via VPN (vs peering)
- ExpressRoute: Private circuit, not over internet
Chapter 4 complete — Networking mastered! 🌐
- Central platform for all Azure metrics and logs
- Metrics: Numerical data, near-real-time (CPU%, disk IOPS)
- Logs: Text/events, queried with KQL
- Alerts trigger on metric thresholds or log query results
- Central store for log data from all sources
- Query with KQL (Kusto Query Language)
- VMs need Log Analytics agent (or Azure Monitor Agent)
- Diagnostic settings send resource logs here
- Who to notify + what to do when an alert fires
- Notify: Email, SMS, Push, Voice
- Automate: Azure Function, Logic App, Runbook, Webhook
- One action group can be used by many alert rules
| Feature | Azure Backup | Azure Site Recovery |
|---|---|---|
| Purpose | Data protection / restore | Disaster recovery / failover |
| VM backup → vault | Recovery Services Vault | Recovery Services Vault |
| Blob backup → vault | Backup Vault | N/A |
| Soft delete | 14 days to recover | N/A |
| RTO | Minutes to hours | Can be minutes (pre-replication) |
VM backup → Recovery Services Vault. Blob backup → Backup Vault. These are two different vault types. The exam specifically tests that you know which workload uses which vault. Don't mix them up.
ALL CHAPTERS COMPLETE! You've covered everything on the AZ-104 exam! 🎉
Score to pass: 700 out of 1000. That means you can get roughly 30% wrong and still pass. You don't need to be perfect — you need to be solid on the high-weight topics (Identity/Gov 20-25%, Compute 20-25%). Read each question twice. Watch for the words "always", "never", "cannot", and "without". You've got this. 💛