WIKI Retour au Portfolio

Dernière mise à jour : 25 juin 2026

11 — Pièges & Commandes (AZ-500)

À relire avant l'exam : les pièges les plus fréquents + les commandes clés. ⚠️ AZ-500 retiré le 31 août 2026 → remplacé par SC-500 (Cloud and AI Security Engineer).


PARTIE 1 — Pièges récurrents (par thème)

Identity / RBAC / PIM / Conditional Access

  • 🚨 Azure custom role (ressources RBAC ARM, gratuit) ≠ Entra custom role (directory, exige P1 + rôle Privileged Role Administrator).
  • 🚨 Custom role Azure : un seul bloc permission à la création.
  • 🚨 Qui assigne un rôle ? Owner, RBAC Administrator, User Access Administrator — PAS Contributor. UAA peut s'auto-Owner (tout Microsoft.Authorization) → préférer RBAC Administrator (assignments only).
  • 🚨 Contributor ne lit pas les secrets KV mais peut s'auto-attribuer une access policy via vaults/write → passer KV en RBAC.
  • 🚨 PIM Eligibleactiver JIT, état recherché, pas de standing access) vs Active (permanent, à limiter). PIM = P2.
  • 🚨 Pas d'héritage des settings PIM Sub → RG : configurer à chaque scope.
  • 🚨 Break-glass : exclus de PIM, surveillés à part. Assignation PIM impossible < 5 min.
  • 🚨 Security Defaults ⇄ Conditional Access mutuellement exclusifs : une seule policy CA (même Off) bloque l'activation de SD.
  • 🚨 Legacy auth (IMAP/POP3/SMTP) ne supporte pas MFA → SD/CA les bloquent.
  • 🚨 Auth strength (Phishing-resistant/Passwordless) = plus fin que Require MFA, mais incompatible EAM → garder « Require MFA » avec EAM.
  • 🚨 Risk-based CA = P2 (ID Protection envoie le signal, CA applique).
  • 🚨 App registration (app object) vs Enterprise application (Service Principal) : supprimer côté Enterprise apps = supprimer le SP, pas l'app object.
  • 🚨 Managed Identity = pas d'app object, pas de secret ; marche uniquement vers ressources supportant l'auth Entra ID.
  • 🚨 SAMI vs UAMI : supprimer la ressource détruit une System-Assigned MI → role assignments orphelins. User-Assigned = cycle de vie indépendant.
  • 🚨 Permission Application vs Delegated : Files.Read.All Application = tout le tenant ; Delegated = ce que le user voit.
  • 🚨 Admin consent ≠ accès pour tous : si Assignment required = Yes, seuls les users assignés accèdent.
  • 🚨 Supprimer une app malveillante ne suffit pas (re-consent possible) → Disable d'abord (accountEnabled=false).
  • 🚨 Application.ReadWrite.All permet d'ajouter un FIC à n'importe quelle app = backdoor discrète.

Network security (NSG / AVNM / firewall)

  • 🚨 NSG stateful : autoriser l'inbound suffit (retour implicite) → pas de règle outbound miroir.
  • 🚨 NSG sur GatewaySubnet non supporté (casse VPN/ER gateway).
  • 🚨 ASG cross-VNet impossible : source et destination même VNet.
  • 🚨 AVNM Security Admin Rules > NSG : un Deny AVNM ne peut pas être surpassé par un Allow NSG. Non appliqué par défaut sur VNets avec SQL MI / Databricks ; pas sur les private endpoints.
  • 🚨 IP Forwarding activé sur la NIC du NVA (sinon next hop VirtualAppliance droppe), désactivé sur VM ordinaires.
  • 🚨 UDR mal pensée → routage asymétrique (retour ne repasse pas par le FW) = drops.
  • 🚨 Peering ≠ chiffrement (backbone privé MS non chiffré sauf VNet encryption). ExpressRoute private peering non chiffré par défaut.
  • 🚨 defaultAction subtil : Public access = Disabled via template ne met pas forcément defaultAction=Deny (portail/CLI le font auto).
  • 🚨 WAF Front Door inspecte seulement les 128 premiers Ko du body. FD ≠ AGW (rulesets distincts).
  • 🚨 IDPS « Alert seul » ne bloque pas → Zero Trust = Alert and deny. URL filtering complet exige TLS inspection.

Private & Public access

  • Service Endpoint vs Private Endpoint :
Service Endpoint Private Endpoint
Niveau Subnet Ressource
IP privée dans VNet
Accès on-prem (VPN/ER)
Soumis au firewall réseau oui jamais
  • 🚨 Service Endpoint Policy (SEP) filtre ce qu'un subnet atteint via SE (Microsoft.Storage seulement) ; aucun effet via Private Endpoint.
  • 🚨 Private Endpoint ≠ blocage du public : désactiver le public explicitement (publicNetworkAccess=Disabled).
  • 🚨 Zone privatelink.* = 1 type de service : mélanger plusieurs PE écrase les A-records. DNS Zone Group : max 5 zones, 1 par nom.
  • 🚨 Résolution publique réussie ≠ accès (confirme juste l'existence du nom).
  • 🚨 Empêcher l'activation du public org-wide → Azure Policy (deny).

Compute (Bastion / JIT / AKS / disk encryption)

  • 🚨 JIT ≠ Bastion : JIT contrôle quand les ports management s'ouvrent (via NSG, exige Defender for Servers P2) ; Bastion supprime le besoin d'IP publique.
  • 🚨 Bastion : subnet exactement AzureBastionSubnet/26. SKU non downgradable. Session recording = Premium.
  • 🚨 AKS private cluster : pas de conversion d'un cluster public → recréation. Authorized IP ranges s'active sur cluster existant (incompatible API endpoint privé).
  • 🚨 AKS --disable-local-accountsrotater les certificats après (révoquer ce qui a fuité).
  • 🚨 Workload Identity (OIDC) remplace AAD Pod Identity (déprécié).
  • 🚨 Defender for Containers : Azure Policy add-on requis pour les recommandations config. Security gating (vuln image) ≠ Gatekeeper (config).
  • 🚨 Disk encryption : CMK = Disk Encryption Set. ADE incompatible avec EaH ou SSE+CMK sur la même VM. SSE seul laisse Defender Unhealthy (recommande EaH).

Storage

  • 🚨 Account key = accès TOTAL + génération SAS. Rôles ARM (Owner/Contributor) ne donnent pas l'accès data Entra mais incluent listkeys/action → récupèrent la clé.
  • 🚨 AllowSharedKeyAccess = null → traité comme true (« non configuré » ≠ « désactivé »).
  • 🚨 CA sur le storage : désactiver Shared Key d'abord (une account key ignore CA).
  • 🚨 Désactiver Shared Key casse Azure Files / Cloud Shell sans RBAC → migrer avant.
  • 🚨 User Delegation SAS : permissions = intersection RBAC ∩ token.
  • 🚨 AllowBlobPublicAccess=false n'affecte pas $web (static site toujours public).
  • 🚨 Immutability / WORM : activer soft delete AVANT ; incompatible PITR ; pas sur NFS/SFTP.
  • 🚨 CMK : KV avec soft delete + purge protection obligatoires.

Database (SQL)

  • 🚨 Entra admin requis même pour une MI d'app. CONNECT accordé par défaut, rien d'autre → accorder aux rôles de base (pas aux users directement).
  • 🚨 Auditing : la Diagnostic Setting (SQLSecurityAuditEvents), si supprimée → audit échoue silencieusement. Server + DB audit ensemble = doublons.
  • 🚨 DDM vs TDE vs Always Encrypted :
DDM TDE Always Encrypted
Type Masquage présentation (pas chiffrement) Chiffrement at-rest Chiffrement côté client
Protège de l'admin DB
Transparent app ❌ (driver client)
  • 🚨 DDM n'empêche pas l'UPDATE ; SELECT INTO/export propage la donnée masquée ; incompatible Always Encrypted.
  • 🚨 TDE : prérequis KV soft-delete + purge protection ; clé révoquée/réseau cassé → base Inaccessible ; master non chiffrable.
  • 🚨 Always Encrypted : rotation CEK sans enclave déplace les données hors base (long). Ne remplace pas TDE.

Key Vault & Policy / Governance

  • 🚨 KV RBAC (recommandé, control+data plane, héritage, octroi Owner/UAA) vs Access Policies (legacy, data plane, tout vaults/write peut s'auto-octroyer).
    • API 2026-02-01+ : RBAC = défaut des nouveaux vaults. Propagation RBAC ~10 min → « Access denied » trompeur.
  • 🚨 Trusted services ≠ tous les services MS : Azure DevOps pas trusted. Bypass trusted persiste même publicNetworkAccess=Disabled.
  • 🚨 Soft-delete + purge protection : recover d'un vault ne restaure pas les role assignments RBAC. Purge = permission distincte (Key Vault Purge Operator).
  • 🚨 Rotation policy = clés uniquement (secrets/certs = autres mécaniques).
  • 🚨 Managed HSM : single-tenant (KV Premium = multitenant). Security domain à sécuriser (quorum ≥3) — sa perte = perte définitive des clés.
  • 🚨 Resource locks = plan de gestion uniquement : ReadOnly n'empêche pas la lecture/écriture de secrets (data plane).
  • 🚨 Azure Policy : Compliance state ≠ enforcement. Modify/DeployIfNotExists ne corrigent que le nouveau → remediation task explicite pour l'existant (utilise la MI de l'assignation).

Defender for Cloud

  • 🚨 CSPM (posture, Secure Score, alimenté MCSB) vs CWPP (threat protection/alertes → plan Defender payant).
  • 🚨 Deux secure scores : classique (portail Azure, MCSB) vs risk-based (portail Defender, criticité d'actif). Valeurs différentes.
  • 🚨 Defender for Servers Plan 1 vs Plan 2 :
P1 P2
MDE (EDR) + MDVM core
Premium MDVM
JIT VM access
FIM ✅ (à activer, pas auto)
Agentless scanning
  • 🚨 Compliance réglementaire (hors MCSB) exige ≥ 1 plan Defender payant ; Servers P1 ne l'ouvre pas.
  • 🚨 Agentless scanner : le Subscription Owner doit activer Defender CSPM (sinon attack path & security explorer vides).
  • 🚨 Sans Azure Arc, machine on-prem avec MDE direct = P1 seulement.
  • 🚨 Defender for Cosmos DB = API for NoSQL uniquement.

Sentinel & Monitoring

  • 🚨 Defender for Cloud (posture + alertes ressources) vs Sentinel = SIEM/SOAR (corrélation multi-sources, incidents, hunting, playbooks).
  • 🚨 Alerte ≠ Incident : seules les règles Scheduled et NRT créent un incident auto. Autres produits → Microsoft incident creation rules.
  • 🚨 Fusion / Microsoft security rules disparaissent dès Defender XDR incident integration activée (création prise par XDR).
  • 🚨 DCR « générique » + log Security → events dans Event, pas SecurityEvent. Pour Sentinel : connecteur Windows Security Events via AMA.
  • 🚨 AMA + ancien Log Analytics agentdouble ingestion (double coût). Désactiver le legacy.
  • 🚨 Playbooks = Logic Apps (facturation). Reco MS : automation rule à la création appelant le playbook.

Confusions classiques (X vs Y)

X Y
Custom roles Azure (ressources, gratuit) Entra (directory, P1+)
PIM Eligible (JIT, recherché) Active (permanent, à limiter)
Endpoints Service Endpoint (subnet, pas d'IP privée) Private Endpoint (ressource, IP privée, on-prem)
SQL data protection DDM (cosmétique) / TDE (at-rest) Always Encrypted (client-side, vrai chiffrement)
AVNM Security admin rules (Deny non-override) NSG (override possible)
KV access RBAC (recommandé) Access policies (legacy, auto-élévation)
KV tier Premium (multitenant) Managed HSM (single-tenant, security domain)
Defender CSPM (posture/Score) CWPP (alertes, plan payant)
Plateforme Defender for Cloud (posture+workload) Sentinel (SIEM/SOAR, incidents)
Sentinel Alerte (détection) Incident (regroupement, Scheduled/NRT auto)
Servers P1 (MDE/MDVM) P2 (+JIT/FIM/agentless/compliance)

Dates de retraite à connaître

Feature Date
Exam AZ-500 → SC-500 31 août 2026
Classic administrators → RBAC mai 2026
KV control plane API < 2026-02-01 27 fév. 2027
Sentinel dans le portail Azure → Defender portal 31 mars 2027
NSG Flow Logs → VNet Flow Logs 30 sept 2027
Azure Disk Encryption (ADE) → Encryption at Host 15 sept 2028

PARTIE 2 — Commandes essentielles (CLI az + PowerShell Az)

Préinstallés dans Cloud Shell. Sinon az login / Connect-AzAccount.

RBAC — assignments, custom roles, élévation

az role assignment create --assignee [email protected] \
  --role "Storage Blob Data Reader" \
  --scope /subscriptions/<sub>/resourceGroups/myrg/providers/Microsoft.Storage/storageAccounts/mysa

az role definition create --role-definition @customrole.json   # UN seul bloc permission
az role definition list --custom-role-only true -o table

# Élever en User Access Administrator au niveau racine (gérer tous les MG/subs)
az rest --method post \
  --url "https://management.azure.com/providers/Microsoft.Authorization/elevateAccess?api-version=2016-07-01"
New-AzRoleAssignment -SignInName [email protected] -RoleDefinitionName "Storage Blob Data Reader" -Scope "/subscriptions/<sub>/resourceGroups/myrg"
New-AzRoleDefinition -InputFile customrole.json

Storage — durcissement

# Shared Key off + public off + firewall Deny par défaut
az storage account update -g myrg -n mysa \
  --allow-shared-key-access false --allow-blob-public-access false \
  --default-action Deny --bypass AzureServices

az storage account network-rule add -g myrg --account-name mysa --vnet-name myvnet --subnet web
az storage account network-rule add -g myrg --account-name mysa --ip-address 203.0.113.5
az storage account keys renew -g myrg -n mysa --key key1

# CMK depuis Key Vault
az storage account update -g myrg -n mysa --encryption-key-source Microsoft.Keyvault \
  --encryption-key-vault https://myvault.vault.azure.net --encryption-key-name mykey

# Immutability WORM (activer soft delete d'abord)
az storage container immutability-policy create --account-name mysa -c mycontainer --period 365 -g myrg
Set-AzStorageAccount -ResourceGroupName myrg -Name mysa -AllowSharedKeyAccess $false -AllowBlobPublicAccess $false
Update-AzStorageAccountNetworkRuleSet -ResourceGroupName myrg -Name mysa -DefaultAction Deny -Bypass AzureServices

Key Vault

# RBAC + soft-delete + purge protection
az keyvault create -g myrg -n myvault -l eastus \
  --enable-rbac-authorization true --enable-purge-protection true --retention-days 90

az keyvault update -g myrg -n myvault --default-action Deny --bypass AzureServices
az keyvault network-rule add -g myrg -n myvault --ip-address 203.0.113.5

az keyvault key create    --vault-name myvault -n mykey   --protection software
az keyvault secret set    --vault-name myvault -n mysecret --value "S3cr3t"
az keyvault certificate create --vault-name myvault -n mycert --policy "$(az keyvault certificate get-default-policy)"

az keyvault key rotation-policy update --vault-name myvault -n mykey --value rotation-policy.json
az keyvault key backup  --vault-name myvault -n mykey --file mykey.backup
az keyvault key restore --vault-name myvault --file mykey.backup
New-AzKeyVault -ResourceGroupName myrg -VaultName myvault -Location eastus -EnableRbacAuthorization -EnablePurgeProtection
Update-AzKeyVaultNetworkRuleSet -VaultName myvault -DefaultAction Deny -Bypass AzureServices

Network — NSG / ASG / Private Endpoint / Service Endpoint

az network nsg create -g myrg -n mynsg
az network asg create -g myrg -n web-asg
az network nsg rule create -g myrg --nsg-name mynsg -n DenyRDP \
  --priority 100 --access Deny --protocol Tcp --direction Inbound \
  --source-address-prefixes Internet --destination-port-ranges 3389
az network vnet subnet update -g myrg --vnet-name myvnet -n web --network-security-group mynsg

# Service endpoint vers Storage
az network vnet subnet update -g myrg --vnet-name myvnet -n web --service-endpoints Microsoft.Storage

# Private Endpoint + DNS zone group
az network private-dns zone create -g myrg -n privatelink.blob.core.windows.net
az network private-endpoint create -g myrg -n pe-blob --vnet-name myvnet --subnet web \
  --private-connection-resource-id <storage-id> --group-id blob --connection-name blobconn
az network private-endpoint dns-zone-group create -g myrg --endpoint-name pe-blob \
  -n default --private-dns-zone privatelink.blob.core.windows.net --zone-name blob

SQL — Entra admin, Entra-only, audit, TDE

az sql server ad-admin create -g myrg --server mysqlsrv --display-name "SQL Admins" --object-id <group-id>
az sql server ad-only-auth enable -g myrg --name mysqlsrv     # désactive SQL auth

az sql server audit-policy update -g myrg --name mysqlsrv --state Enabled \
  --log-analytics-target-state Enabled --log-analytics-workspace-resource-id <law-id>

az sql db tde set -g myrg --server mysqlsrv --database mydb --status Enabled
az sql server tde-key set -g myrg --server mysqlsrv \
  --server-key-type AzureKeyVault --kid https://myvault.vault.azure.net/keys/mykey/<ver>
Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName myrg -ServerName mysqlsrv -DisplayName "SQL Admins" -ObjectId <group-id>
Enable-AzSqlServerActiveDirectoryOnlyAuthentication -ResourceGroupName myrg -ServerName mysqlsrv

Compute — AKS durci, encryption at host

az aks create -g myrg -n myaks --enable-private-cluster \
  --enable-aad --enable-azure-rbac --disable-local-accounts \
  --attach-acr myacr --enable-encryption-at-host --generate-ssh-keys
az aks rotate-certs -g myrg -n myaks                          # après disable-local-accounts

az vm update -g myrg -n myvm --set securityProfile.encryptionAtHost=true   # VM désallouée

JIT se gère via Defender for Cloud (Plan 2) — voir Defender / portail.

Defender for Cloud — activer les plans

az security pricing create -n VirtualMachines --tier Standard --subplan P2
az security pricing create -n StorageAccounts --tier Standard
az security pricing create -n KeyVaults       --tier Standard
az security pricing create -n SqlServers      --tier Standard
az security pricing create -n Containers      --tier Standard
az security pricing list -o table
Set-AzSecurityPricing -Name "VirtualMachines" -PricingTier "Standard" -SubPlan "P2"

Azure Policy — definition, assignment, remediation

az policy definition create -n deny-public-storage --rules rules.json --mode Indexed
az policy assignment create -n require-https --policy <policy-id> \
  --scope /subscriptions/<sub>/resourceGroups/myrg --mi-system-assigned --location eastus
az policy remediation create -n remed1 --policy-assignment require-https --resource-group myrg

DCR / Sentinel

az monitor data-collection rule create -g myrg -n mydcr -l eastus --rule-file dcr.json
az monitor data-collection rule association create -g myrg -n myassoc --rule-id <dcr-id> --resource <vm-id>

Sentinel se gère surtout via le portail (onboarding workspace, règles analytiques, playbooks), l'extension az sentinel ou Microsoft Graph Security API. Après onboarding Defender portal : automation sur alert trigger.


PARTIE 3 — Quick wins (mémorisation)

Rôles data-plane (≠ rôles ARM control-plane)

Key Vault (RBAC) : Key Vault Administrator (full data) · Secrets User (lire secrets) · Crypto User (sign/wrap/decrypt) · Certificates Officer · Purge Operator (purger, distinct du delete). Owner/Contributor gèrent le vault, pas les secrets en RBAC.

Storage : Storage Blob Data Reader/Contributor/Owner (Owner = + POSIX ACL ADLS) · Queue/Table Data · File Data SMB Share. Owner/Contributor/Storage Account Contributor → listkeys = accès total via account key.

Plans Defender (az security pricing)

  • Servers (VirtualMachines) : P1 = MDE + MDVM core ; P2 = + JIT + FIM + agentless + MDVM premium.
  • Storage : malware scanning (par Go) + sensitive data detection (à activer).
  • Containers / KeyVault / SqlServers / AppServices / CosmosDb (NoSQL only) / Api / Arm.
  • Defender CSPM : attack path + security explorer + custom recommendations KQL + agentless (Owner requis).

Ports & service tags

  • RDP 3389 / SSH 22 : jamais exposés à Internet → JIT / Bastion / AVNM Deny.
  • SQL 1433, HTTPS 443.
  • Service tags : AzureLoadBalancer (probe, ne pas bloquer), GatewayManager (AGW 65200-65535), Storage.<region> (préférer régionalisé).
  • IP magique Azure : 168.63.129.16 (DNS plateforme + health probe LB).

Réflexes troubleshooting

  • « Access denied » KV/RBAC juste après assignation ? → propagation ~10 min.
  • CA (MFA) ne s'applique pas au storage ? → désactiver Shared Key d'abord.
  • PE résout l'IP publique ? → zone privatelink.* manquante / non liée.
  • PE créé mais public encore ouvert ?publicNetworkAccess=Disabled non appliqué.
  • Audit SQL silencieusement KO ? → Diagnostic Setting SQLSecurityAuditEvents supprimée.
  • Base SQL Inaccessible ? → clé TDE révoquée / réseau KV cassé.
  • SAMI : role assignments orphelins ? → ressource supprimée → utiliser UAMI.
  • Attack Path / Security Explorer vides ? → Defender CSPM agentless pas activé par un Owner.
  • JIT indisponible ? → Defender for Servers Plan 2 requis.