11 — Governance
Organiser, contrôler et sécuriser ton environnement Azure : hiérarchie, tags, locks, policies, cost management, templates, Key Vault.
A. Hiérarchie Azure
Tenant Entra ID (root)
└─ Management Group (root MG)
└─ Management Group (child) — jusqu'à 6 niveaux
└─ Subscription
└─ Resource Group
└─ Resource
Héritage descendant : RBAC, Policy, Tags (Cost Mgmt) → tout ce qu'on assigne à un niveau s'applique aux niveaux inférieurs.
Management Groups
Conteneurs pour organiser plusieurs subscriptions → appliquer Policy / RBAC à grande échelle.
- Tenant Root Group : créé auto, 1 par tenant.
- Hiérarchie max : 6 niveaux sous le root + 10 000 MGs par tenant.
- 1 sub appartient à 1 seul MG à la fois.
- Pour activer la gestion des MGs : Tenant Root Group doit être activé (
Access management for Azure resourcessur ton compte Global Admin).
Use case : organiser par BU, prod/dev/test, region. Appliquer une policy "deny non-compliant SKU" au scope MG → s'applique à toutes les subs dessous.
Subscriptions
- Container de billing + container logique de ressources.
- Limites par sub (cores, public IPs, RGs, etc.) — voir
Usage + quotas. - 1 sub = 1 tenant (mais transférable vers un autre tenant).
Resource Groups (RG)
- Container logique pour ressources liées (lifecycle commun).
- Region du RG = région des metadata (les ressources peuvent être ailleurs, mais same region recommandé).
- Une ressource = 1 seul RG à la fois.
B. Tags
Métadonnées clé-valeur sur ressources / RGs / subs
Caractéristiques
- Max 50 tags par ressource.
- Key 512 chars max (RG: 128), value 256 chars max.
- ⚠️ Pas hérités par défaut : un tag sur le RG ne descend PAS sur les ressources.
- Certaines ressources ne supportent pas les tags ou les tags ne s'affichent pas dans le billing.
- Modifiables après création.
Use cases
- Cost allocation :
costcenter=IT,project=Alpha - Lifecycle :
environment=prod/dev,[email protected] - Compliance :
dataclass=confidential
Tag inheritance
Deux mécanismes différents (à ne PAS confondre) :
| Mécanisme | Quoi |
|---|---|
| Cost Management Tag Inheritance | Hérite tags Sub/RG → records de billing (cost analysis), pas sur les ressources elles-mêmes. Activable au scope billing (EA / MCA / Sub). Effect ~24h. |
Azure Policy (Inherit a tag from RG) |
Effet modify qui réplique un tag du RG vers la ressource → modifie réellement les ressources. Nécessite remediation task pour les existantes. |
Pour AZ-104 : retenir les tags ne sont PAS hérités automatiquement. Pour les enforcer → Azure Policy (
Require a tag on resources,Inherit tag from RG, etc.).
C. Resource Locks
Empêcher la modification ou suppression accidentelle. Niveau gestion, pas RBAC.
| Type | Effet |
|---|---|
| Delete (CanNotDelete) | On peut tout faire SAUF supprimer |
| ReadOnly | Lecture seule (équivalent du rôle Reader, peut casser certaines apps qui modifient leurs propres settings) |
Caractéristiques
- Scope : Sub / RG / Resource
- Hérités : un lock sur le RG s'applique à toutes les ressources dedans.
- Le plus restrictif gagne : si Delete au RG + ReadOnly sur la VM → la VM est ReadOnly.
- Override : nécessite la permission
Microsoft.Authorization/locks/*(ex:OwnerouUser Access Administrator).Contributorne peut pas les modifier. - ⚠️ Les locks n'empêchent pas les opérations data plane (ex: ReadOnly sur Storage = peut toujours upload des blobs, ça empêche juste de modifier le SA).
D. Cost Management
Suite d'outils pour analyser, budgéter et optimiser les coûts.
Outils principaux
| Outil | Pour quoi |
|---|---|
| Cost analysis | Vue interactive des coûts (par service, RG, tag, region…) |
| Budgets | Définir un seuil $/€ avec alerts par email/webhook quand on dépasse % |
| Cost alerts | Alertes sur budgets, anomalies de coût, credits |
| Advisor | Recommandations cost (right-sizing, RIs à acheter, ressources idle) |
| Pricing Calculator | Estimer le coût avant achat (azure.com/pricing/calculator) |
| TCO Calculator | Comparer Azure vs on-prem |
| Reservations | RI 1 ou 3 ans (jusqu'à -72%) — voir fiche 6 |
| Savings Plans (compute) | Engagement $/h flexible (jusqu'à -65%) |
| Azure Hybrid Benefit (AHB) | Réutiliser licences Windows/SQL on-prem |
Budgets
- Scope : Sub / RG / MG / billing account.
- Période : monthly / quarterly / annually.
- Threshold alerts : 5 niveaux d'alerte par budget (ex 50%, 75%, 90%, 100%, 110%).
- Types : Cost (€) ou Usage (consommation, ex: hours).
- ⚠️ Un budget n'arrête rien automatiquement — c'est juste une alerte. Pour stopper : action group qui invoque un Logic App / Function.
Advisor (côté coût)
Recommandations type :
- Right-size / shutdown VMs sous-utilisées
- Acheter des Reserved Instances pour workloads stables
- Supprimer ressources inutilisées (Public IPs, NICs, disks orphelins, disks non attachés)
💡 Cibler les recommandations à des RG spécifiques :
Advisor > Configuration > Resources→ décocher les RG/subs dont tu ne veux PAS voir les recommandations. Utile si tu veux focus sur "RG prod uniquement" ou "trouver les disks orphelins dans 2-3 RG précis" sans bruit du reste de la sub.⚠️ À ne pas confondre :
- Azure Cost Management > Advisor recommendations = vue agrégée des recommandations cost (filtres possibles mais l'activation/scope se fait via Advisor Configuration, pas Cost Management).
- Billing Administrator role = gère le billing, pas un outil pour filtrer Advisor.
- Azure Monitor custom log query = trop complexe pour un cas natif Advisor (= mauvaise réponse aux QCM "réduire le coût en identifiant disks unattached").
E. Azure Policy
Imposer des règles sur les ressources : ce qu'on peut créer, où, comment, avec quels tags. Audit ou enforcement.
Concepts
Policy Definition (la règle, JSON)
↓ groupée dans
Initiative (Set Definition) (groupe de policies, ex "ISO 27001 baseline")
↓ assignée à un
Scope (MG / Sub / RG / Resource) avec parameters + exclusions
↓ génère
Compliance state (Compliant / Non-compliant / Conflict / Exempt)
Effects (à connaître pour AZ-104)
| Effect | Quoi |
|---|---|
| Audit | Log non-compliant (juste reporting) — bon démarrage |
| Deny | Refuse la création/modification (enforcement) |
| Append | Ajoute un champ à la ressource (ex: tag par défaut) |
| Modify | Modifie/ajoute des propriétés (tags, role assignments) — remediation possible |
| DeployIfNotExists (DINE) | Si la ressource n'a pas le sub-resource attendu, déploie un template ARM pour le créer (ex: déployer un agent monitoring sur chaque VM) — remediation possible |
| AuditIfNotExists | Audit si un sub-resource manque (sans déployer) |
| Disabled | Désactive temporairement la policy (utile pour debug) |
| Manual | Compliance gérée manuellement (attestation par humain) |
Modify et DINE = nécessitent une Managed Identity côté policy assignment + le rôle
Contributor(ou plus) pour pouvoir agir.
Initiatives (Set Definitions)
- Groupe plusieurs policy definitions → assignement unique.
- Built-in : Azure Security Benchmark, CIS, ISO 27001, NIST, PCI DSS, HIPAA HITRUST, etc.
- Recommandation MS : toujours assigner via une initiative, même pour 1 policy → tu pourras en ajouter d'autres sans réassigner.
Remediation
- DINE / Modify : n'agit que sur les nouvelles ressources créées après l'assignment.
- Pour les ressources existantes non-compliant → créer une Remediation Task depuis l'assignment.
- Permission :
Resource Policy ContributorouOwnerau scope.
Exemptions
- Permet d'exclure une ressource spécifique d'une policy (avec justification + date d'expiration).
- 2 catégories : Waiver (accepté tel quel) ou Mitigated (compliant via un autre moyen).
Compliance evaluation
- Trigger : création/update de ressource, scan périodique (~24h), ou trigger manuel (
az policy state trigger-scan). - Vue :
Policy > Compliance→ drill-down par initiative/policy/ressource.
F. ARM Templates & Bicep
Infrastructure as Code (IaC) natif Azure.
ARM Templates (JSON)
- Format historique : JSON déclaratif décrivant les ressources Azure.
- Sections :
parameters,variables,resources,outputs,functions. - Verbose mais portable.
Parameter constraints (validation au déploiement)
Les paramètres ARM/Bicep peuvent imposer des contraintes de validation rejetées au déploiement si non respectées :
| Contrainte | ARM JSON | Bicep | Usage |
|---|---|---|---|
| Valeurs autorisées (liste fermée) | "allowedValues": ["a","b"] |
@allowed(['a','b']) |
Restreindre à un set fini (ex: SKUs, regions) |
| Min/max numérique | "minValue" / "maxValue" |
@minValue(n) / @maxValue(n) |
Compteurs, scale, retention days |
| Min/max longueur (string/array) | "minLength" / "maxLength" |
@minLength(n) / @maxLength(n) |
Noms de ressources (ex: SA = 3-24 chars) |
| Description | "metadata": { "description": "..." } |
@description('...') |
Doc affichée au déployeur |
| Valeur par défaut | "defaultValue" |
param x string = 'default' |
Valeur si non fournie |
| Secret (masqué dans logs) | "type": "secureString" / "secureObject" |
@secure() param ... |
Mots de passe, tokens, secrets |
💡 Piège exam : "quel attribut pour limiter le param
vmSizeà 3 SKUs au choix ?" →allowedValues(pasdefaultValue, pasminLength). Pour nom SA (3-24 chars) →minLength+maxLength.
Bicep
- DSL moderne au-dessus d'ARM, plus lisible. Transpile en JSON ARM avant déploiement.
- Avantages : syntaxe concise, modules, type safety, IntelliSense (VS Code), pas de gestion
dependsOn(auto). - Recommandé MS pour tout nouveau IaC sur Azure.
// Exemple Bicep
param location string = resourceGroup().location
resource sa 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: 'mystorage${uniqueString(resourceGroup().id)}'
location: location
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
}
Deployment scopes
| Scope | Use case |
|---|---|
| Tenant | Créer des MGs |
| Management Group | Subs, policies, RBAC |
| Subscription | RGs, role assignments, policies |
| Resource Group | La plupart des ressources Azure |
Deployment modes
| Mode | Effet |
|---|---|
| Incremental (default) | Ajoute/modifie ce qui est dans le template, laisse intact le reste du RG |
| Complete | Supprime tout ce qui est dans le RG mais pas dans le template — dangereux |
Pour AZ-104 : retenir que
Completepeut supprimer des ressources non listées. À utiliser avec précaution.
Templates avancés
Linked templates
- Un template principal référence un autre via
Microsoft.Resources/deploymentsavec une URL externe. - Avantage : modularité, réutilisation cross-projets.
- ⚠️ Le template lié doit être accessible publiquement ou via SAS (pas un fichier local).
Nested templates
- Template inline dans un autre (pas d'URL externe).
- Use case : appliquer un template à un scope différent (sub-level deployment depuis un RG-level template).
Bicep Modules
- Équivalent moderne des linked templates en Bicep.
- Référence un fichier local :
module sa './storage.bicep' = { ... }. - Plus propre que linked/nested templates ARM.
Outils de déploiement
- Portal : Custom deployment > Build your own template
- CLI :
az deployment group create -g rg --template-file main.bicep --parameters @params.json - PowerShell :
New-AzResourceGroupDeployment - What-if :
az deployment group what-if→ simule sans déployer
G. Moving Resources
Déplacer des ressources entre RG / Sub / Region.
| Move | Faisable ? | Note |
|---|---|---|
| Cross-RG (même sub) | ✅ Direct | Le plus simple. Ressources liées doivent suivre |
| Cross-subscription (même tenant) | ✅ Direct | Validation Azure préalable |
| Cross-region | ❌ Pas natif | ASR (VMs), Resource Mover, ou recreate |
| Cross-tenant | ❌ Très complexe | Recréer côté destination |
Process
- Validate :
az resource invoke-action --action validateMoveResources→ check si déplaçable. - Move : tous les ressources dépendantes doivent suivre (NIC + VM + Disk + IP).
- Source et destination LOCKED pendant le move.
Limitations
- Toutes les ressources ne sont pas déplaçables (ex: certaines GW, ASE, certaines DBs).
- Liste : MS Learn → "Move operation support for resources".
- RBAC assignments : pas déplacés (à recréer côté destination).
- Resource locks : à recréer.
- Tags : conservés.
Resource Mover
- Service Azure pour orchestrer des moves complexes (cross-region surtout).
- Gère les dépendances, génère les templates ARM nécessaires.
- Use case : migration région A → région B.
H. Azure Key Vault
Coffre managé pour secrets, keys, certificates. Utilisé par toutes les ressources Azure qui ont besoin de creds (SQL CMK, Storage CMK, App Service settings, etc.).
Types d'objets
| Type | Quoi |
|---|---|
| Secret | String chiffrée (mot de passe, connection string, API key) |
| Key | Clé crypto RSA / EC / symétrique pour chiffrement, signing |
| Certificate | Certificat X.509 (auto-renouvellement avec issuer Let's Encrypt / DigiCert via partenaires) |
SKUs
| SKU | Use case |
|---|---|
| Standard | Software-protected keys, secrets, certs |
| Premium | Standard + HSM-backed keys (FIPS 140-2 Level 2) |
| Managed HSM | Dedicated HSM (FIPS 140-2 Level 3, single-tenant) — service séparé |
Auth / Access — 2 modèles
| Modèle | Granularité | Recommandé |
|---|---|---|
| Vault Access Policy (legacy) | Permissions par utilisateur sur tout le KV (Get/List/Set/Delete par catégorie) | ❌ Legacy |
| Azure RBAC | Rôles standards Azure (Key Vault Secrets User, Key Vault Crypto Officer, etc.), scope possible au niveau secret/key/cert |
✅ Recommandé MS |
🚨 Changement 2026 : à partir de l'API version 2026-02-01, les nouveaux Key Vaults créés sont par défaut en Azure RBAC (
enableRbacAuthorization = true, au lieu d'Access Policies historiquement). Les KVs existants ne changent pas. Pour forcer les access policies sur un nouveau KV :--enable-rbac-authorization false.⚠️ Toutes les API control plane KV antérieures à 2026-02-01 sont retirées le 27 février 2027 → maj tes scripts/templates ARM/Bicep/Terraform vers 2026-02-01+ (le data plane n'est pas affecté).
Roles RBAC clés
Key Vault Administrator: full data plane (clés/secrets/certs) sans gérer le vault lui-même.Key Vault Secrets Officer: R/W/D des secrets.Key Vault Secrets User: R seulement.Key Vault Crypto Officer: R/W/D des keys.Key Vault Crypto User: utiliser les keys (decrypt, sign).Key Vault Certificates Officer/User: idem pour certs.Key Vault Purge Operator: purger après soft-delete.
Distinction : Owner / Contributor (control plane) gèrent le KV mais n'ont pas accès aux data par défaut en mode RBAC. Il faut des rôles data plane.
Soft-delete & Purge protection
| Feature | Quoi | Default |
|---|---|---|
| Soft-delete | Suppression réversible (objet ou KV entier) pendant 7-90 jours (default 90) | ✅ Activé par défaut, non désactivable depuis 2020 |
| Purge protection | Empêche la purge définitive pendant la période de soft-delete (même Global Admin ne peut pas) | ❌ Optionnel mais recommandé prod |
⚠️ Purge protection irréversible une fois activée → impossible de désactiver. Si tu actives par erreur, faut attendre l'expiration de la rétention soft-delete.
Networking
- Public access : Allow / Selected networks (Service Endpoint + IPs) / Disabled.
- Private Endpoint : recommandé pour prod.
- Trusted Microsoft services : permet à des services Azure (Disk Encryption, Backup, etc.) d'accéder même si firewall activé.
Encryption sur ressources Azure
- CMK : key dans KV, utilisée par Storage / SQL / Disks / etc. → besoin de :
- Soft-delete + Purge protection ACTIVÉS sur le KV (sinon création CMK refusée).
- Une Managed Identity sur la ressource source qui a accès au KV.
I. Tools admin transverses
Azure Cloud Shell
Shell navigateur intégré au portail Azure → Bash ou PowerShell sans rien installer localement.
Caractéristiques :
- Authentifié auto avec ton compte Azure (pas de
az login). - Stockage persistant : nécessite un Storage Account (5 GB Azure Files mounté sur
$HOME/clouddrive) — créé à la 1ère utilisation. Sans ce SA, les fichiers persistent pas entre sessions. - Timeout : 20 min d'inactivité → session terminée (les fichiers
clouddriverestent). - Outils pré-installés :
az,Azure PowerShell,kubectl,helm,terraform,bicep, Docker, Git, Python, .NET… - Editor intégré : Monaco editor (
codecommand) — VS Code light. - Accessible via :
shell.azure.com, le portail (icône en haut), VS Code, mobile app.
Use case AZ-104 : exécuter des scripts admin sans setup local, faire des démos, runner des commandes one-shot.
Azure Resource Graph
Service de requête KQL pour explorer toutes tes ressources Azure cross-sub à grande échelle (rapide, indexé).
Use case :
- Inventaire : "Liste toutes les VMs sans tag
owner" - Compliance : "Quels SAs n'ont pas le secure transfer activé ?"
- Reporting : "Coût total des disques non attachés"
Exemples KQL :
// Toutes les VMs et leur taille + region
Resources
| where type =~ "microsoft.compute/virtualmachines"
| project name, location, vmSize=tostring(properties.hardwareProfile.vmSize)
// Storage Accounts sans HTTPS forcé
Resources
| where type =~ "microsoft.storage/storageaccounts"
| where properties.supportsHttpsTrafficOnly == false
| project name, resourceGroup, subscriptionId
Accès : Azure Resource Graph Explorer dans le portail, ou az graph query.
Différent de Log Analytics (qui interroge des logs) : Resource Graph interroge l'état (config) des ressources.
🏢 Scénarios d'entreprise (CAF/WAF)
Scenario 1 : Groupe multinational (3 régions, 12 filiales)
Contexte business : un groupe industriel FR-DE-US a 12 filiales autonomes côté IT, mais veut une base commune de sécurité et de coût (chiffrement au repos, régions autorisées, tag CostCenter obligatoire). Audit et facturation centralisés, mais chaque filiale reste autonome sur ses abonnements.
Choix architectural : une hiérarchie de Management Groups sur 3 niveaux + des Policy posées au niveau MG + héritage RBAC + chargeback via Cost Management.
Architecture / pattern :
Tenant Root MG→Corp MG(règles pour tout le groupe) → MGs par région (EMEA / NA / APAC) → MGs par filiale → abonnements (prod/dev/test).- Au
Corp MG, on pose :Allowed locations(bloque hors UE+US),Require tag CostCenter,Audit encryption at rest. Tout en dessous en hérite. - RBAC :
Readerau Root pour les auditeurs (vue globale),Contributorpar filiale pour ses responsables IT. - Cost Management : héritage de tags activé au niveau facturation, ce qui permet la refacturation mensuelle par filiale via
CostCenter. Trade-offs assumés : - Gain : base commune de sécurité/coût imposée par héritage, filiales autonomes sous les guardrails.
- Perte : hiérarchie MG à concevoir et maintenir, et l'héritage de policy peut surprendre en cas de conflit. Pièges à éviter :
- Les tags ne sont pas hérités automatiquement par les ressources : il faut la policy
Inherit a tag from RG(effet Modify + tâche de remédiation). - Ordre d'héritage des Policy : MG > Sub > RG > Resource. En cas de conflit, le Deny le plus spécifique l'emporte.
- Activer le Tenant Root Group au départ (Global Admin → "Access management for Azure resources"), sinon impossible de bâtir une vraie hiérarchie.
📐 Réf. CAF — Management group hierarchy + policy-driven governance : structurer les Management Groups par geo/BU et appliquer les policies (allowed locations, require tags, encryption) au scope MG pour héritage descendant est le pattern CAF de gouvernance à l'échelle. Lien
Scenario 2 : Healthcare US — compliance HIPAA/HITRUST automatisée
Contexte business : un hôpital privé US stocke des données de santé (PHI) sur Azure et subit des audits HHS réguliers. Il doit prouver sa conformité HIPAA en continu, pas seulement une fois par an. Choix architectural : l'initiative Azure Policy intégrée HIPAA HITRUST appliquée au MG de prod + un Key Vault Premium HSM pour les clés + des Resource Locks sur les ressources PHI critiques. Architecture / pattern :
- Initiative
HIPAA HITRUST 9.2appliquée au MGProd-Healthcare: ~600 contrôles évalués automatiquement. - Effets : surtout
Auditau début, plus quelquesDenyclés (Disable public network access on Storage,Require HTTPS only). - Key Vault Premium adossé à un HSM (FIPS 140-2 L2) avec purge protection verrouillée (Locked) + soft-delete 90 jours.
- Resource Lock
CanNotDeletesur les comptes de stockage des imageries DICOM et sur le Key Vault PHI. - Tableau de bord de conformité ouvert aux auditeurs en lecture seule (
Readerau niveau de l'initiative). Trade-offs assumés : - Gain : conformité HIPAA évaluée en continu et prouvable, clés protégées en HSM.
- Perte : la purge protection verrouillée est irréversible, et les
Denypeuvent bloquer des déploiements légitimes. Pièges à éviter : - Ne pas confondre Azure certifié HIPAA (vrai, avec BAA signé avec Microsoft) et ta config conforme HIPAA : c'est à TOI de le prouver.
Auditne bloque rien : si l'exigence est « personne ne peut créer un stockage public », il faut unDeny, pas unAudit.- La purge protection s'active mais ne se désactive plus : en dev ça crée des Key Vaults coincés en soft-delete. Solution : 2 Key Vaults séparés (dev sans, prod avec).
📐 Réf. — Azure Policy regulatory compliance (built-in initiatives) : assigner une initiative built-in (HIPAA HITRUST, ISO 27001, PCI-DSS…) au scope MG pour une compliance continue auditée est la méthode native recommandée. Lien
Scenario 3 : Scale-up SaaS — FinOps & chargeback dev teams
Contexte business : un SaaS B2B de 200 personnes, 15 équipes de dev, paie ~80k€/mois sur Azure et ça grimpe. Le CTO veut refacturer chaque équipe pour les responsabiliser, sans ralentir les livraisons. Choix architectural : Cost Management + tags imposés par Policy + Budgets + Advisor ciblé par équipe. Architecture / pattern :
- Policy
Require tag CostCenter / Squad / Environment(effet Deny) sur l'abonnement de prod. - Héritage de tags activé dans Cost Management : les enregistrements de facturation récupèrent les tags du RG vers la ressource.
- 1 Budget par RG d'équipe (limite mensuelle = quota négocié) + alertes à 50/75/90/100% envoyées sur Teams via un Action Group.
- Advisor : on décoche les RG non-prod pour éviter le bruit, et on se concentre sur le right-sizing et les disques orphelins par équipe.
- Étape 1 : showback (chaque équipe voit ses coûts). Étape 2 : chargeback (refacturation interne) une fois 3 mois de données stables. Trade-offs assumés :
- Gain : chaque équipe responsabilisée sur ses coûts via tags imposés et budgets, sans ralentir les livraisons.
- Perte : les budgets n'arrêtent rien (juste des alertes) et le tagging Deny ajoute une friction au déploiement. Pièges à éviter :
- Lancer le chargeback sans 3 mois de showback propre = conflits internes (« ce n'est pas mon coût ! »).
- Un Budget n'arrête rien, c'est juste une alerte. Pour couper automatiquement : Action Group → Logic App qui désactive le RG (mais risqué en prod).
- Tags posés par Policy
Modify: il faut une tâche de remédiation pour les ressources existantes, sinon seules les nouvelles sont taggées.
📐 Réf. CAF — Track costs (FinOps) + WAF Cost optimization : tags enforced par Policy + tag inheritance Cost Management + budgets par équipe + Advisor ciblé suivent la discipline FinOps showback→chargeback recommandée. Lien
DEMO — chemins portail
Management Group
Management groups > + Add management group→ choisir parent + name + display name- Move sub :
Management groups > [MG] > Add subscription - Assigner Policy/RBAC au scope MG → s'applique à toutes les subs dessous
Tags
Resource > Tags > + Add(clé+value) ou en bulk depuisAll resources > [select] > Assign tags- Tag inheritance Cost Management :
Cost Management > Configuration > Tag inheritance > Enable - Tag inheritance Policy : assigner la policy built-in
Inherit a tag from the resource group(effect Modify) - Require tag : assigner
Require a tag on resources(effect Deny si absent)
Resource Locks
Resource (ou RG / Sub) > Locks > + Add→ choisir Type (CanNotDelete / ReadOnly), nom, note- Tester : essayer de delete → erreur
- Pour modifier/supprimer le lock : permission
Microsoft.Authorization/locks/*
Cost Management
- Cost analysis :
Cost Management + Billing > Cost analysis→ grouper par service / RG / tag / location - Créer un budget :
Cost Management > Budgets > + Add- Scope : Sub / RG / MG
- Amount + period (monthly/quarterly/annually)
- Alerts : 50%, 75%, 90%, 100% → email + action group
- Advisor cost :
Advisor > Cost→ liste recommandations
Azure Policy
- Assigner une built-in :
Policy > Definitions > [search] > Assign - Scope (MG/Sub/RG) + exclusions + parameters
- Initiative :
Definitions > + Initiative definition→ group N policies - Remediation :
Assignments > [assignment] > Create remediation task(si effect = Modify ou DINE) - Compliance :
Complianceblade → drill-down par scope
ARM / Bicep deployment
# Login + RG
az login
az group create -n myrg -l eastus
# Bicep deployment (incremental par défaut)
az deployment group create \
-g myrg \
--template-file main.bicep \
--parameters @params.json
# What-if (dry run)
az deployment group what-if \
-g myrg \
--template-file main.bicep
# Sub-level deployment (créer un RG par exemple)
az deployment sub create -l eastus --template-file rg.bicep
# Compiler Bicep en ARM JSON
az bicep build --file main.bicep
💡 Récupérer le template ARM d'un déploiement existant (utile si qqn d'autre a déployé via ARM, tu veux le réutiliser) :
- Au niveau RG :
Resource Group > Settings > Deployments > [deployment] > Template > Download / Add to library- Au niveau Sub :
Subscriptions > Deployments > [deployment] > Template- Au niveau ressource :
Resource > Automation > Export template(mais moins fiable, parfois incomplete)⚠️ Le template ARM est toujours stocké au niveau du RG/Sub où le déploiement a tourné, jamais au niveau de la ressource individuelle (Storage Account, VM, container, etc.).
Linked templates (ARM)
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "linkedTemplate",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "https://storage.blob.core.windows.net/templates/storage.json"
}
}
}
Move resources
RG > Move > Move to another resource groupou... another subscription- Cocher les ressources à déplacer (toutes les dépendantes)
- Validate → confirm
- RG source/destination locked pendant le move
- Cross-region : utiliser
Resource Moverou ASR
Key Vault
Key vaults > Create- Permission model : Azure RBAC (recommandé) ou Vault access policy
- Soft-delete activé (forcé), Purge protection : à activer pour prod
- Networking : Public / Selected (Service Endpoint + IP) / Private Endpoint
KV — créer un secret + utiliser depuis VM
KV > Secrets > + Generate/Import→ name + value- Donner à la Managed Identity de la VM le rôle
Key Vault Secrets Usersur le KV - Depuis la VM (CLI Azure) :
az login --identity
az keyvault secret show --vault-name myvault --name mysecret --query value -o tsv
KV — soft-delete + recover
# Lister les KVs supprimés
az keyvault list-deleted
# Recover un KV
az keyvault recover --name myvault
# Recover un secret
az keyvault secret recover --vault-name myvault --name mysecret
# Purge (si purge protection désactivé)
az keyvault purge --name myvault
KV — créer une clé RSA pour CMK (encryption VM/Storage/SQL)
# Prérequis : KV avec Soft-delete + Purge protection ACTIVÉS (obligatoires CMK)
az keyvault create -g myrg -n myvault \
--enable-rbac-authorization \
--enable-purge-protection \
--enable-soft-delete
# Créer la clé RSA (2048/3072/4096) — type RSA obligatoire pour CMK
az keyvault key create --vault-name myvault \
--name mycmkkey \
--kty RSA \
--size 2048 \
--ops wrapKey unwrapKey encrypt decrypt
# Activer rotation auto (optionnel, recommandé)
az keyvault key rotation-policy update --vault-name myvault --name mycmkkey \
--value @rotation-policy.json
🚨 Prérequis CMK universels (VM Disk / Storage Account / SQL TDE / etc.) :
- KV avec Soft-delete ACTIVÉ (default depuis 2020, non désactivable).
- Purge protection ACTIVÉE (irréversible une fois ON).
- Clé RSA (pas EC), min 2048 bits.
- Identité sur la ressource cible (Managed Identity sur SA, Disk Encryption Set sur VM, etc.) avec permissions
Get,WrapKey,UnwrapKeysur la clé.Sans ces 4 → refus de création CMK.
KV — usages typiques par ressource Azure
| Ressource | Méthode CMK | Identité utilisée |
|---|---|---|
| VM Disks (Encryption at Host) | Disk Encryption Set (DES) → pointe vers KV+key | MI System-assigned du DES |
| VM Disks (ADE legacy) | KV direct, KEK optionnelle | RP "Azure Disk Encryption" via access policy |
| Storage Account | KV direct via SA Encryption settings | MI du SA (System ou User-assigned) |
| SQL Database (TDE) | KV direct via SQL Server identity | MI du SQL Server |
| App Service / KV references | KV pour secrets (pas encryption) | MI de l'App Service |