14 — Pièges & Commandes
À relire avant l'exam : les pièges les plus fréquents + les commandes clés.
PARTIE 1 — Pièges récurrents (par thème)
Identity / Entra / RBAC
- 🚨 App Registration ≠ Enterprise App : App Reg = définition de l'app ; Enterprise App = instance/Service Principal. App SaaS tierce = Enterprise App seule.
- 🚨 Managed Identity SA vs UA : SA supprimée avec la ressource (1:1) ; UA indépendante, partageable, persiste.
- 🚨 Cocher "roles can be assigned to the group" = uniquement à la création, irréversible, P1 requis. Idem Restricted Management AU.
- 🚨 Pas de licence sans
Usage Locationsur l'user. UsageLocation = attribut Entra-only (modifiable même pour users hybrid synced) ; Department/Job Title = on-prem only. - 🚨 Groupe dynamique ne mixe pas users + devices (un seul type).
- 🚨 Tenant Root : un Global Admin n'a pas accès auto aux ressources Azure → activer
Access management for Azure resources. - 🚨 Azure RBAC ≠ Entra Roles : RBAC = ressources Azure ; Entra Roles = objets Entra (users/groupes/apps).
- 🚨 Owner = Contributor + gestion des accès. Contributor ne gère NI les accès NI les locks.
- 🚨 NotActions ≠ Deny (simple exclusion de l'allow). Permissions cumulatives (union). Deny assignment > Role assignment (rare).
- 🚨 Custom RBAC role → Owner/User Access Admin. Custom Entra role → P1 + Global/Privileged Role Admin.
- 🚨 Least-privilege FinOps/IaC :
Resource Policy Contributor(Policy),Cost Management Contributor,Reservation Administrator≠ Contributor plein. - 🚨 Security Defaults ↔ Conditional Access mutuellement exclusifs (activer une CAP désactive Security Defaults). Toujours exclure un compte break-glass des CAP.
- Licences : P1 = CA, SSPR, Dynamic Groups, AU, group-licensing, custom roles · P2 = +Identity Protection, PIM, Access Reviews.
Network (VNet / NSG / Peering / SE-PE)
- 🚨 5 IPs réservées par subnet (/24 = 251 utilisables). Noms réservés exacts :
GatewaySubnet,AzureBastionSubnet,AzureFirewallSubnet,RouteServerSubnet. - 🚨 NSG NIC + NSG Subnet en série, le plus restrictif gagne. Inbound : Subnet→NIC ; Outbound : NIC→Subnet. Stateful (retour auto).
- 🚨 Default rules non supprimables (65000+). ASG = NICs même VNet uniquement. Pas de Service Tag custom.
- 🚨 Peering NON transitif (A↔B + B↔C ≠ A↔C → hub-spoke NVA ou vWAN). Bilatéral (config A→B ET B→A). Non chiffré par défaut.
- 🚨 Private Endpoint sans Private DNS Zone → résout l'IP publique. Toujours intégrer la zone (
privatelink.<service>). - 🚨 Service Endpoint = niveau subnet, tous comptes du type, pas d'IP privée, pas d'accès on-prem. Private Endpoint = 1 ressource, IP privée, accès on-prem via VPN/ER.
- 🚨 UDR > BGP > System routes (la plus spécifique gagne). NVA = IP forwarding activé sur la NIC. Route table associée au subnet.
- 🚨 Standard Public IP = Static obligatoire + inbound bloqué par défaut. NAT GW recommandé pour outbound (default outbound retiré pour nouveaux VNets après 31 mars 2026).
- Private DNS auto-registration = 1 seul VNet par zone. Import zone file = CLI + Portail uniquement.
VM (Disks / AS-AZ / Encryption)
- 🚨 Stopped vs Deallocated : Stopped (OS) = compute payé ; Deallocated (bouton/
az vm deallocate) = compute non payé, storage payé. - 🚨 Deallocated consomme TOUJOURS le quota vCPU. Libérer le quota = delete la VM.
- 🚨 Inchangeables : nom, VNet, region. Cross-region = pas de move direct (ASR/snapshot+recreate). Resize = stoppe la VM.
- 🚨 OS Disk resize = vers le haut uniquement, VM deallocated. Temp Disk (
D:) non persistant. Gen 2 requis (Trusted Launch / Confidential). - 🚨 Ultra Disk & Premium SSD v2 = Data disks only. Convert type = VM stoppée. CMK = DES + KV (soft-delete + purge protection).
- 🚨 AS et AZ ne se combinent pas. VM existante NE PEUT être ajoutée à un AS. FD/UD non modifiables après création. AS = même region + RG.
- 🚨 VMSS mode (Uniform/Flexible) immuable. Resize 1 instance Uniform = redémarre toutes. Flexible = recommandé MS.
- 🚨 Encryption at Host = feature à registrer sur la sub. SSE = always-on, gratuit. ADE+KEK → access policy sur le RP Azure Disk Encryption.
Storage (SAS / Redundancy / Tiers / Immutable)
- 🚨 HNS (Data Lake Gen2) = coché à la création, irréversible.
- 🚨 Archive tier = rehydratation (1-15h) avant lecture. Min retention : Cool 30j, Cold 90j, Archive 180j (early deletion fees).
- 🚨 Premium Block Blob = pas d'access tiers. Append blob ne supporte pas les tiers.
- 🚨 Anonymous public access désactivé par défaut (nov 2023).
- 🚨 Object Replication ≠ GRS : GRS = regional pair imposé ; Object Replication = region spécifique (compliance). Prérequis OR : Versioning + Change Feed, SA GPv2/Premium Block Blob. Pas de réplication des blobs Archive.
- 🚨 Failover Storage = passe en LRS (perd le geo). Immutable Time-based Locked = irréversible.
- 🚨
Contributor≠Storage Blob Data Contributor: control plane (gère le SA) vs data plane (accès blobs). - 🚨 User Delegation SAS recommandé (ne dépend pas de l'access key). Max 5 stored access policies. Désactiver Shared Key en prod.
- 🚨 AzCopy auth = SAS ou Entra uniquement (pas Kerberos/API key). NFS share = FileStorage + privé obligatoire.
- 🚨 Azure Files identity = 3 méthodes exclusives (AD DS / Entra DS / Entra Kerberos). File Sync : 1 sync group = 1 cloud endpoint ; 1 server = max 1 endpoint par sync group.
App Service
- 🚨 Slots à partir de Standard (Std=5, Pv3=20). Plan = même région, ne mixe pas Linux+Windows. PE sur slots non supporté (slot prod uniquement).
- 🚨 VNet Integration = subnet dédié + délégué
Microsoft.Web/serverFarms, /27 min. Hybrid Connections = TCP via 443 uniquement. - 🚨 WAF absent d'App Service → App Gateway v2 WAF ou Front Door WAF Premium devant. Slot settings (sticky) = restent dans leur slot au swap.
Containers (AKS / ACR)
- 🚨 HPA AKS nécessite Metrics Server (pas Dashboard, pas Cluster Autoscaler = scale nodes ≠ pods). CNI Overlay préféré à Kubenet.
- 🚨 ACR Premium requis pour geo-replication, Private Endpoint, Content Trust, CMK. Premium→Standard : supprimer geo-rep + PE d'abord.
- 🚨 ACI = pas de scale/LB/stateful natif. ACA = scale-to-zero, pas d'accès K8s direct. ACA subnet : workload profiles /27, consumption /23 (type figé à la création).
Load Balancing (LB / AppGW / FD / Bastion)
- 🚨 Standard LB outbound bloqué par défaut → outbound rule ou NAT GW. SKU LB doit matcher SKU Public IP + VMs backend.
- 🚨 App Gateway = subnet dédié /27 min. AzureBastionSubnet /26 min.
Governance (Policy / KV / Locks / Cost)
- 🚨 Tags PAS hérités par défaut (RG ne descend pas). Inheritance : Cost Mgmt (billing only) ou Azure Policy
Inherit a tag from RG(modifie réellement). Max 50 tags. - 🚨 Locks : le plus restrictif gagne, hérités, ne bloquent PAS le data plane (ReadOnly Storage = upload blob OK). Contributor ne modifie pas les locks.
- 🚨 Budget = alerte uniquement, n'arrête rien. Policy Modify/DINE = Managed Identity + remediation task pour ressources existantes.
- 🚨 ARM mode Complete = DANGEREUX (supprime non listées). Incremental = default safe. What-if = simule.
- 🚨 6 niveaux de MGs max. Move resources cross-region = pas natif. RBAC/Locks non déplacés ; Tags conservés ; source+dest locked pendant le move.
- 🚨 Key Vault : API 2026-02-01 → nouveaux KV en Azure RBAC par défaut. Soft-delete non désactivable. Purge protection irréversible. CMK = soft-delete + purge protection. Owner/Contributor ≠ accès data.
Backup / DR (RSV / MARS / ASR)
- 🚨 Backup ≠ ASR : Backup = données ; ASR = continuité (VM up ailleurs). DR cross-region → ASR (pas Backup).
- 🚨 RSV redundancy verrouillée après 1ère protection. RSV régional (même région). MARS passphrase perdue = backups perdus.
- 🚨 ASR exige managed disks (convertir unmanaged d'abord). Test failover = VNet isolé (pas le prod).
- 🚨 ASR failover réel (3 actions) : Verify protected/healthy → Run failover → Reprotect. CRR requiert vault GRS.
Monitoring (LAW / Alerts / Flow logs)
- 🚨 Diagnostics extension dépréciée 31 mars 2026 → AMA + DCRs. MMA déjà retiré (août 2024).
- 🚨 NSG Flow Logs → VNet Flow Logs (création NSG FL bloquée juin 2025).
- 🚨 Service Health = panne MS ; Resource Health = ta ressource. App Insights : Agent (no-code) vs SDK (code), Profiler = slow requests.
- Rétentions : Activity Log 90j · Metrics 93j · LAW 30j gratuit (730j max). 5 diagnostic settings max par ressource.
Confusions classiques (X vs Y)
| Service Endpoint | Private Endpoint | |
|---|---|---|
| Niveau | Subnet | Ressource |
| IP privée dans VNet | ❌ | ✅ |
| Accès on-prem | ❌ | ✅ (VPN/ER) |
| Contributor | Storage Blob Data Contributor | |
|---|---|---|
| Plane | Control (gère le SA) | Data (accès blobs) |
| Backup | ASR | |
|---|---|---|
| Rôle | Sauvegarde données | Continuité (VM up ailleurs) |
| Cross-region DR | ❌ | ✅ |
Dates de retraite à connaître
| Feature | Date |
|---|---|
| Basic Public IP / Basic LB | retiré 30 sept 2025 |
| Legacy MFA per-user / SSPR auth methods | 30 sept 2025 |
| VpnGw1-5 (non-AZ) création bloquée | 1 nov 2025 |
| BlobStorage legacy création bloquée | 3 mars 2026 |
| Default outbound access (nouveaux VNets) | 31 mars 2026 |
| Diagnostics extension dépréciée | 31 mars 2026 |
| App Gateway v1 | 28 avr 2026 |
| VPN GW Standard/High Perf | 30 juin 2026 |
| Standard HDD | 1 sept 2026 |
| GPv1 | 13 oct 2026 |
| Identity Protection legacy policies | 1 oct 2026 |
| NSG Flow Logs | 30 sept 2027 |
| ADE (→ Encryption at Host) | 15 sept 2028 |
PARTIE 2 — Commandes essentielles (CLI az + PowerShell Az)
Login & contexte
az login # browser
az login --identity # MI System-Assigned
az login --identity --username <client-id> # MI User-Assigned
az account set --subscription "My Sub"
PowerShell : Connect-AzAccount · Connect-AzAccount -Identity · Set-AzContext -Subscription "My Sub"
Identity / RBAC (az ad / az role)
az role assignment create --assignee [email protected] --role "Virtual Machine Contributor" --scope /subscriptions/<sub>
az role assignment list --assignee [email protected] --all -o table
az role definition create --role-definition ./customrole.json # Owner/User Access Admin requis
PowerShell : New-AzRoleAssignment -SignInName [email protected] -RoleDefinitionName "Reader" -ResourceGroupName myrg
Graph (Entra) : Connect-MgGraph -Scopes "User.ReadWrite.All" · New-MgUser · New-MgGroupMember -GroupId <gid> -DirectoryObjectId <uid>
Network (vnet / nsg / peering / private-endpoint)
az network vnet create -g myrg -n myvnet --address-prefix 10.0.0.0/16 --subnet-name s1 --subnet-prefix 10.0.1.0/24
az network nsg rule create -g myrg --nsg-name mynsg -n AllowSSH --priority 100 --access Allow \
--protocol Tcp --source-address-prefixes Internet --destination-port-ranges 22
az network vnet subnet update -g myrg --vnet-name myvnet -n s1 --network-security-group mynsg
az network public-ip create -g myrg -n myip --sku Standard --allocation-method Static --zone 1 2 3
az network vnet peering create -g myrg -n a-to-b --vnet-name vnet-a --remote-vnet vnet-b --allow-vnet-access
az network route-table route create -g myrg --route-table-name myrt -n def \
--address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address 10.0.0.4
az network private-endpoint create -g myrg -n mype --vnet-name myvnet --subnet s1 \
--private-connection-resource-id <sa-id> --group-id blob --connection-name conn
VM / VMSS
az vm create -g myrg -n myvm --image Ubuntu2204 --size Standard_B2s \
--admin-username azureuser --generate-ssh-keys --public-ip-sku Standard
az vm deallocate -g myrg -n myvm # ❌ compute (≠ az vm stop = payé)
az vm resize -g myrg -n myvm --size Standard_D4s_v5
az vm run-command invoke -g myrg -n myvm --command-id RunShellScript --scripts "uptime" # sans SSH/RDP
az disk update -g myrg -n mydisk --size-gb 256 # resize vers le haut, VM deallocated
az vmss create -g myrg -n myvmss --orchestration-mode Flexible --image Ubuntu2204 --instance-count 3
az vmss scale -g myrg -n myvmss --new-capacity 5
PowerShell : Stop-AzVM ... -Force (deallocate) · Stop-AzVM ... -StayProvisioned (stopped, payé)
Storage
az storage account create -g myrg -n mysa --sku Standard_GRS --kind StorageV2 \
--allow-blob-public-access false --min-tls-version TLS1_2
az storage blob upload -f ./f.txt -c c1 -n f.txt --account-name mysa --auth-mode login
az storage blob set-tier -c c1 -n f.txt --tier Cool --account-name mysa --auth-mode login
az storage container generate-sas -n c1 --permissions r --expiry 2026-12-31 \
--account-name mysa --auth-mode login --as-user # User Delegation SAS
AzCopy : azcopy login · azcopy copy "./folder" "https://mysa.blob.core.windows.net/c1/" --recursive · azcopy sync ...
App Service (az webapp)
az appservice plan create -g myrg -n myplan --sku S1 # slots à partir de Standard
az webapp create -g myrg -p myplan -n myapp --runtime "NODE:20-lts"
az webapp deployment slot create -g myrg -n myapp --slot staging
az webapp deployment slot swap -g myrg -n myapp --slot staging --target-slot production
az webapp vnet-integration add -g myrg -n myapp --vnet myvnet --subnet integ-subnet # /27 délégué
Containers (az aks / az acr)
az aks create -g myrg -n myaks --node-count 2 --enable-managed-identity --enable-aad
az aks get-credentials -g myrg -n myaks
az aks update -g myrg -n myaks --attach-acr myacr
az acr create -g myrg -n myacr --sku Standard
az acr build --registry myacr --image app:v1 .
az acr update -n myacr --sku Premium # geo-rep / PE / CMK
az containerapp create -g myrg -n myapp --environment myenv --image nginx --target-port 80 --ingress external
kubectl : kubectl get pods -A · kubectl scale deployment myapp --replicas=5 · kubectl rollout undo deployment/myapp
Governance (az group / az policy / az lock)
az group create -n myrg -l eastus
az policy assignment create --name require-tag --policy <policy-id> --scope /subscriptions/<sub>
az policy state trigger-scan --resource-group myrg
az lock create -n protect --lock-type CanNotDelete -g myrg
az resource move --destination-group target-rg --ids <resource-id>
# Deploy (Incremental par défaut ; Complete = dangereux)
az deployment group create -g myrg --template-file main.bicep --parameters @params.json
az deployment group what-if -g myrg --template-file main.bicep
az bicep build --file main.bicep
PowerShell : Test-AzResourceGroupDeployment ... (validate) · New-AzResourceGroupDeployment ...
Key Vault
az keyvault create -g myrg -n myvault --enable-rbac-authorization --enable-purge-protection
az keyvault secret set --vault-name myvault -n mysecret --value "x"
az keyvault list-deleted ; az keyvault recover --name myvault ; az keyvault purge --name myvault
Backup / ASR (az backup)
az backup vault create -g myrg -n myvault -l eastus
az backup protection enable-for-vm -g myrg -v myvault --vm myvm --policy-name DefaultPolicy
az backup protection backup-now -g myrg -v myvault --container-name myvm --item-name myvm \
--backup-management-type AzureIaasVM
Monitor & feature register
az monitor diagnostic-settings create --name diag --resource <id> --workspace <law-id> --logs '[...]'
az feature register --namespace Microsoft.Compute --name EncryptionAtHost
az provider register --namespace Microsoft.Compute
Généraliser une VM avant capture
# Windows : C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown
sudo waagent -deprovision+user && sudo shutdown now # Linux (+user supprime aussi les comptes)
PARTIE 3 — Quick wins (mémorisation)
Limites par défaut
| Élément | Valeur |
|---|---|
| IPs réservées / subnet | 5 |
| Tags / ressource | 50 |
| Diagnostic settings / ressource | 5 |
| Stored access policies | 5 |
| App Service slots | Std 5, Pv3 20 |
| AS Fault / Update Domains | FD 3, UD 20 |
| Soft-delete RSV / blob | 14j / 7j |
Subnets nommés (spelling exact + taille min)
GatewaySubnet /27 · AzureBastionSubnet /26 · AzureFirewallSubnet /26 · RouteServerSubnet /27
Subnets délégués
App Service VNet integration → Microsoft.Web/serverFarms · DNS Private Resolver → Microsoft.Network/dnsResolvers · ACI → Microsoft.ContainerInstance/containerGroups · NetApp → Microsoft.NetApp/volumes
Ports
443 HTTPS / Hybrid Connections · 3389 RDP · 22 SSH · 80 HTTP · 1433 SQL · 5671/5672 AMQP (Service Bus)
Network Watcher → use case
| Outil | Use case |
|---|---|
| IP Flow Verify | NSG bloque-t-il ce flux ? |
| Next Hop | Où va le trafic (UDR debug) ? |
| Connection Troubleshoot | Test bout-en-bout one-shot |
| Connection Monitor | Surveillance continue |
| Packet Capture | Capture pcap distante |
Workflow réflexes
- VM ne démarre pas → Boot diagnostics (screenshot/serial)
- Connexion bloquée → IP Flow Verify
- DR cross-region → ASR (pas Backup)
- App on-prem → internet sans VPN → Application Proxy
- App Azure → DB privée dans VNet → VNet Integration
- App Azure → 1 host on-prem précis → Hybrid Connections
- Onboarding identité externe → B2B Collaboration · Trust org-to-org Teams → B2B Direct Connect · Grand public → External ID for Customers (ex B2C)