1. INTERVENANTS
DJEBBOURI Younes
Architecte Azure et DevOps đđ»âš
2. PROBLĂMATIQUE
Tu veux bien faire
Tu crĂ©es un Recovery Services Vault (RSV) pour ton projet. Ton collĂšgue en Data fait pareil. Puis lâĂ©quipe Infra. Puis une version pour DEV, une autre pour PROD⊠Et sans tâen rendre compte, tu te retrouves avec 10 RSV dispatchĂ©s un peu partout.
Câest le dĂ©but du chaos đ
- Multiplication des coffres = complexité de gestion exponentielle
- Chacun sa config, chacun ses politiques, chacun ses pratiques
- Difficile de faire un reporting global, dâauditer ce qui est vraiment sauvegardĂ©, ou dâindustrialiser
- Gouvernance impossible : tu veux durcir la sécurité ou faire évoluer une politique ? Tu dois le faire à la main sur chaque coffre
- RBAC ? On oublie. Soit les Ă©quipes ont tous les droits sur leur RSV (risquĂ©), soit elles ne peuvent rien faire (bloquant). Il nây a pas dâentre-deux simple.
Alors pose-toi les bonnes questions :
- Comment garder une vision claire quand chaque équipe fait ses propres choix ?
- JusquâoĂč on peut dĂ©lĂ©guer sans risquer des erreurs critiques ?
- Est-ce quâon protĂšge bien les bonnes machines, avec le bon niveau de service ?
- Et surtout : comment faire évoluer tout ça intelligemment dans le temps, sans tout casser ?
3. MODĂLE RECOMMANDĂ
Si tu veux garder le contrĂŽle tout en laissant de lâautonomie aux Ă©quipes, il te faut un socle commun.
Et ce socle, câest une stratĂ©gie centralisĂ©e des RSV⊠mais pensĂ©e intelligemment.
Le principe :
Tu ne crées pas un coffre par projet, par environnement ou par équipe.
Tu crées un RSV par type de criticité, basé sur la technologie de réplication utilisée :
- LRS (Locally Redundant Storage) : Réplication dans une seule zone, pour les workloads non critiques.
- ZRS (Zone-Redundant Storage) : RĂ©plication dans plusieurs zones dâune mĂȘme rĂ©gion, pour une rĂ©silience accrue.
- GRS (Geo-Redundant Storage) : Réplication dans une région secondaire, pour les workloads critiques.
Criticité | Niveau de Réplication | Type de RSV | Exemple |
---|---|---|---|
Minor | LRS (Local) | RSV-LRS | rsv-backup-lrs |
Standard | ZRS (Zone) | RSV-ZRS | rsv-backup-zrs |
Critique | GRS (Geo) | RSV-GRS | rsv-backup-grs |
Et pour faire fonctionner ça à grande échelle, on impose une politique de tags cohérente :
CriticiteSauvegarde = minor | standard | critique
BackupPolicy = daily | weekly | monthly
BackupHeure = 02h | 23h
, etc.BackupRetention = 7j | 30j | 90j
, etc.
Résultat ?
GrĂące Ă lâautomatisation (via script ou Azure Automation), chaque VM peut ĂȘtre :
- rattachée automatiquement au bon RSV
- assignée à la bonne policy en fonction des tags
- restaurée uniquement par les équipes autorisées
- protégée des suppressions accidentelles, grùce à un RBAC restrictif (Restore Only)
đĄ Tu gagnes une architecture de sauvegarde :
- homogĂšne
- lisible
- facilement gouvernable
Et surtout : tu poses les bases dâune stratĂ©gie dâentreprise claire et durable, pas un patchwork bricolĂ© par projet
4. AUTOMATISER
Tu veux ĂȘtre sĂ»r que chaque VM soit bien protĂ©gĂ©e ?
Alors nâattends pas que les Ă©quipes sâen souviennent.
On va automatiser le rattachement au RSV et l’application de la bonne stratĂ©gie de sauvegarde, Ă partir de simples tags.
Voici comment ça sâorganise :
Lecture des tags
Pour chaque VM, on lit les tags suivants :
Tag Azure | RĂŽle |
---|---|
CriticiteSauvegarde | Permet de dĂ©terminer dans quel RSV (LRS, ZRS, GRS) la VM doit ĂȘtre sauvegardĂ©e |
BackupPolicy | DĂ©finit la politique complĂšte Ă appliquer : heure de dĂ©clenchement, frĂ©quence (daily, weeklyâŠ), et durĂ©e de rĂ©tention |
Mapping CriticitĂ© â RSV
Criticité taguée | RSV cible à utiliser | Niveau de réplication |
---|---|---|
minor | rsv-backup-lrs | LRS |
standard | rsv-backup-zrs | ZRS |
critique | rsv-backup-grs | GRS |
Câest ce mapping qui permet de choisir dynamiquement le bon coffre
Script ou Runbook Automation
Un script PowerShell ou un runbook Azure Automation (avec System Assigned Identity) pourra :
- Lister toutes les VMs éligibles (ou filtrer via Azure Resource Graph)
- Lire leurs tags
- Vérifier si elles sont déjà protégées
- Les rattacher au RSV cible sâil manque la protection
- Appliquer la bonne
Backup Policy
selon les tags
Et si besoin, notifier lâĂ©quipe (via Teams, email, webhookâŠ) en cas de VM non conforme (tag manquant, erreur de policy, etc.)
Sécurisation RBAC
Dernier point souvent nĂ©gligĂ© : les droits dâaccĂšs.
- Les équipes ont le droit de restaurer leurs VMs
- Elles peuvent modifier leurs propres tags si besoin
- Mais elles nâont pas le droit de supprimer un backup ou de toucher aux paramĂštres critiques du RSV
đŻ On limite donc la casse tout en laissant un vrai degrĂ© dâautonomie.
5. AJOUTER UNE POLITIQUE
Automatiser câest bien.
Mais il faut aussi sâassurer que personne nâoublie de taguer ses VMs.
đ Câest lĂ quâAzure Policy entre en jeu
Exiger les bons tags sur chaque VM
On crée une politique de conformité qui impose la présence de :
CriticiteSauvegarde
BackupPolicy
Deux approches sont possibles :
đ„ Option stricte : Deny
Avec cette stratĂ©gie, aucune VM ne peut ĂȘtre créée sans ces deux tags.
Câest net, carrĂ©, efficace.
Mais⊠â ça peut aussi bloquer certaines Ă©quipes lors dâun dĂ©ploiement
{
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
{
"field": "tags['CriticiteSauvegarde']",
"exists": "false"
},
{
"field": "tags['BackupPolicy']",
"exists": "false"
}
]
},
"then": {
"effect": "Deny"
}
}
}
đš Option souple : DeployIfNotExists
Cette option rajoute les tags manquants automatiquement, avec des valeurs par défaut :
CriticiteSauvegarde = standard
BackupPolicy = daily-7d
Cela permet de ne bloquer personne, tout en garantissant un minimum de protection.
â ïž Attention cependant : Si tu utilises Terraform ou Bicep, cette stratĂ©gie peut entraĂźner un petit Ă©cart entre le code dâinfrastructure et la rĂ©alitĂ© du portail Azure. Les tags rajoutĂ©s par la policy ne sont pas pris en compte par Terraform ou Bicep , donc bien mettre a jour votre code |
6. ARCHITECTURE DE LâAUTOMATISATION
Tu veux une automatisation fiable, traçable, et facile à maintenir. Voici un schéma type basé sur une solution éprouvée :
Composant Azure | RĂŽle |
---|---|
Azure Automation Account | Contient le Runbook principal |
Managed Identity | Permet au Runbook dâagir sur les VMs et RSVs |
Runbook PowerShell | Logique principale de lecture des tags et affectation des backups |
Log Analytics / Azure Monitor | Centralise les logs dâexĂ©cution et les erreurs |
Azure Policy | Oblige les tags nécessaires (CriticiteSauvegarde et BackupPolicy) |
Fonctionnement détaillé
- Déclenchement
- Manuellement ou toutes les 12h via un schedule
- Option : déclenchement par événement (ex. création VM)
2. Lecture des VMs
- Liste toutes les VMs dans les scopes définis
- Ignore celles avec un tag
IgnoreBackup=true
si besoin
3. Analyse des tags
- Extrait les tags
CriticiteSauvegarde
etBackupPolicy
- Détermine le RSV cible (ex :
rsv-e2-pr-haut
) - Vérifie si la VM est déjà protégée avec la bonne policy
4. Affectation
- Si ce nâest pas le cas :
â Ajoute la VM dans le bon RSV
â Applique la policy correspondante
5. Journalisation
- Chaque action est logguée dans Log Analytics
- En cas dâerreur ou incohĂ©rence : alerte via Action Group
Exemple de début de script PowerShell
# Connexion avec Managed Identity
Connect-AzAccount -Identity
# Liste des VMs
$vmList = Get-AzVM -Status
foreach ($vm in $vmList) {
$tags = $vm.Tags
$criticite = $tags["CriticiteSauvegarde"]
$policy = $tags["BackupPolicy"]
if (-not $criticite -or -not $policy) {
Write-Output "â Tags manquants sur $($vm.Name)"
# Envoi d'une notification via Action Group (ex. : Teams, email)
continue
}
# Mapping CriticitĂ© â RSV
$rsvName = switch ($criticite) {
"minor" { "rsv-backup-lrs" }
"standard" { "rsv-backup-zrs" }
"critique" { "rsv-backup-grs" }
default { Write-Output "â CriticitĂ© inconnue pour $($vm.Name)"; continue }
}
# Vérifier si la VM est protégée
$backupItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM -VaultId (Get-AzRecoveryServicesVault -Name $rsvName).ID | Where-Object { $_.Name -eq $vm.Name }
if (-not $backupItem) {
# Activer la sauvegarde
$policyObject = Get-AzRecoveryServicesBackupProtectionPolicy -Name $policy -VaultId (Get-AzRecoveryServicesVault -Name $rsvName).ID
Enable-AzRecoveryServicesBackupProtection -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Policy $policyObject -VaultId (Get-AzRecoveryServicesVault -Name $rsvName).ID
Write-Output "â
VM $($vm.Name) ajoutée à $rsvName avec policy $policy"
}
}
8. LIMITATION DE LA SOLUTION
Voici les principales limites de lâapproche centralisĂ©e et automatisĂ©e pour la gestion des Recovery Services Vaults (RSV) :
- đŽ CoĂ»t des RSV GRS : La rĂ©plication gĂ©o-redondante (GRS) est plus coĂ»teuse que LRS ou ZRS. Pour les workloads non critiques, privilĂ©giez LRS ou ZRS pour optimiser les coĂ»ts
- đŽ Terraform/Bicep et Azure Policy : Les tags ajoutĂ©s par une policy DeployIfNotExists peuvent crĂ©er des incohĂ©rences avec le code dâinfrastructure si celui-ci nâest pas mis Ă jour
- đŽ Limite de 500 RSV par souscription par rĂ©gion : Azure autorise un maximum de 500 Recovery Services Vaults par souscription dans une rĂ©gion donnĂ©e
- đŽ Contraintes rĂ©gionales : Les RSV sont liĂ©s Ă une rĂ©gion Azure spĂ©cifique. Les donnĂ©es sauvegardĂ©es ne peuvent pas ĂȘtre dĂ©placĂ©es directement vers un autre RSV dans une rĂ©gion diffĂ©rente, ce qui peut compliquer les migrations ou les stratĂ©gies multi-rĂ©gions. De plus, la rĂ©plication GRS nĂ©cessite une rĂ©gion secondaire prĂ©dĂ©finie par Azure, limitant la flexibilitĂ© du choix
PROCHAIN ARTICLE
On vient de passer ensemble toute la mécanique du PCA/PRA cÎté machines virtuelles.
Mais dans Azure, ce nâest quâune partie du puzzle.
Dans le prochain article, on sâattaquera Ă la continuitĂ© dâactivitĂ© cĂŽtĂ© PaaS :
đŠ Azure SQL, App Service, Key Vault, Service BusâŠ
Tous ces services quâon utilise au quotidien, mais quâon oublie souvent de protĂ©ger correctement.
Comment les rendre résilients ?
Comment prévoir un plan de reprise sans galérer à tout reconstruire à la main ?
Et surtout, comment éviter les piÚges les plus fréquents ?
On verra tout ça trĂšs bientĂŽt đ