Une suppression massive dans Microsoft Entra ID, anciennement Azure Active Directory, ne se traite pas comme la restauration d’un fichier. Selon l’objet, son autorité et le type de suppression, la reprise peut passer par la sauvegarde native, la corbeille logique, Active Directory Domain Services (AD DS) ou une reconstruction externe.
Ce guide permet de cartographier ces chemins, d’attribuer les rôles minimaux et de produire les preuves nécessaires à un runbook réellement exploitable en situation de crise.
Ce que Microsoft Entra Backup protège réellement
Depuis juin 2026, Microsoft Entra Backup and Recovery est en disponibilité générale et actif par défaut sur les tenants workforce éligibles. La fonction crée une sauvegarde quotidienne à une heure fixe, non configurable par l’administrateur, puis la conserve pendant 7 jours.
La période de 30 jours parfois associée à cette fonction correspond à la suppression logique, ou soft delete, et non à la rétention des sauvegardes. La documentation Microsoft Learn sur Microsoft Entra Backup and Recovery distingue clairement ces deux mécanismes.
Mars 2026
Préversion publique
Microsoft Entra Backup and Recovery entre en préversion publique avec une rétention initiale de 5 jours.
Juin 2026
Disponibilité générale
La rétention passe à 7 jours et les identités managées rejoignent la liste des objets pris en charge.
Octobre 2026
Audit de la couverture
Les organisations doivent distinguer les objets couverts, les propriétés restaurables et les ressources qui exigent une autre stratégie.
Les prérequis documentés sont un tenant workforce et des licences Microsoft Entra ID P1 ou P2. Microsoft External ID et Azure AD B2C ne sont pas pris en charge.
Sept jours de sauvegarde, pas trente
Cartographier les objets avant d’écrire le runbook
Une matrice de restaurabilité ne doit pas se limiter à une colonne « sauvegardé ». Elle doit répondre à quatre questions : l’objet est-il couvert, quelles propriétés peuvent revenir, où se trouve son autorité et quelle équipe peut lancer la reprise ?
La liste de prise en charge évolue. Il faut donc la confronter à la documentation officielle au moment de chaque revue, plutôt que de figer une liste dans une procédure qui deviendra obsolète.
| Situation | Sauvegarde native | Voie de reprise | Décision de runbook |
|---|---|---|---|
| Objet cloud pris en charge | Oui, pour le sous-ensemble documenté | Microsoft Entra Backup and Recovery | Comparer la sauvegarde et l’état courant avant restauration |
| Identité managée prise en charge | Oui depuis la disponibilité générale | Microsoft Entra Backup and Recovery | Tester les propriétés nécessaires au scénario applicatif |
| Objet synchronisé depuis AD DS | Non lorsque l’autorité reste locale | Restauration dans AD DS puis synchronisation | Transférer l’incident à l’équipe en charge de l’annuaire local |
| Objet supprimé définitivement | Non | Reconstruction externe ou solution tierce | Déclencher le scénario de recréation documenté |
| Propriété hors du sous-ensemble couvert | Non garantie | État connu et sain exporté | Réappliquer la configuration depuis le dépôt versionné |
Pour chaque famille d’objets, le registre d’audit devrait contenir au minimum :
- l’autorité de référence : cloud ou AD DS ;
- le propriétaire opérationnel et son suppléant ;
- la couverture par la sauvegarde native ;
- la couverture par la suppression logique ;
- les propriétés indispensables au retour en service ;
- l’emplacement des exports externes ;
- le rôle autorisé à consulter et celui autorisé à restaurer ;
- le temps de reprise observé lors du dernier exercice.
Le guide Microsoft consacré à la récupérabilité d’un tenant recommande de compléter la sauvegarde native par un état de configuration connu et sain, conservé dans un dépôt externe versionné.
Séparer la lecture des sauvegardes de la restauration
Microsoft fournit deux rôles dédiés. Cette séparation permet d’autoriser les équipes d’audit à examiner la couverture sans leur donner le droit de modifier l’annuaire.
| Rôle | Capacité | Affectation recommandée |
|---|---|---|
| Backup Reader | Consulter les sauvegardes et les rapports de différences | Audit, sécurité et opérateurs préparant le diagnostic |
| Backup Administrator | Lancer les restaurations | Équipe de reprise restreinte et soumise à approbation |
| Aucun rôle de sauvegarde | Aucune consultation ou restauration native | Comptes ordinaires et équipes sans responsabilité de reprise |
Le flux opérationnel doit suivre un ordre stable : identifier l’incident, sélectionner une sauvegarde quotidienne, produire le rapport de différences, vérifier les objets et propriétés concernés, obtenir l’approbation puis restaurer. La validation après restauration doit être réalisée par le propriétaire du service, pas seulement par l’équipe identité.
Une restauration modifie l’annuaire
Microsoft recommande également de protéger les suppressions définitives avec les Protected Actions. Cette mesure ne rend pas un objet supprimé définitivement restaurable ; elle réduit le risque qu’une opération critique soit exécutée sans les contrôles prévus.
Auditer la capacité de reprise en cinq étapes
L’audit doit produire des éléments vérifiables : un inventaire daté, une décision de reprise par type d’objet, des exports intègres et le résultat d’un exercice. Une simple capture indiquant que la fonction est active ne démontre pas que le tenant peut être restauré.
Valider l’éligibilité du tenant
Confirmez qu’il s’agit d’un tenant workforce disposant de licences Microsoft Entra ID P1 ou P2. External ID et Azure AD B2C doivent être classés hors périmètre de la sauvegarde native.
Attribuer le rôle de lecture minimal
Utilisez Backup Reader pour consulter les sauvegardes et générer les rapports de différences. Réservez Backup Administrator aux opérateurs autorisés à exécuter une restauration.
Classer chaque famille d’objets
Documentez l’autorité, la prise en charge native, les propriétés critiques, la voie de reprise secondaire et le propriétaire métier ou technique.
Conserver un état externe connu et sain
Exportez les configurations nécessaires à la reconstruction, placez-les dans un stockage externe versionné et conservez des journaux d’audit sur une période supérieure à 30 jours, conformément à la recommandation Microsoft.
Exécuter un exercice contrôlé
Mesurez la génération du rapport, l’analyse, l’approbation, la restauration et la validation applicative. Inscrivez les durées observées dans le runbook au lieu d’utiliser une estimation générique.
À titre d’illustration, une organisation peut exploiter des comptes cloud, des objets synchronisés depuis AD DS et des identités managées. Son runbook ne doit pas prévoir un bouton unique : les objets cloud pris en charge suivent la sauvegarde native, les objets synchronisés reviennent depuis AD DS et les configurations non couvertes sont réappliquées depuis le dépôt versionné.
Avec Backup Reader, relevez l’horodatage des sauvegardes disponibles et archivez le rapport de différences. Associez chaque élément du rapport à une ligne de la matrice de restaurabilité avant de demander une restauration.
Mise en œuvre
Le script suivant ne modifie pas Microsoft Entra ID. Il transforme des exports déjà collectés en un dossier de preuves versionnable comprenant un manifeste SHA-256, un résumé JSON, une trame de runbook et une archive ZIP.
Aucun module externe n’est requis : Get-FileHash, Import-Csv, Export-Csv et Compress-Archive sont des commandes PowerShell natives. Le traitement local ne demande aucun rôle Microsoft Entra ; les permissions nécessaires à la collecte initiale dépendent des objets exportés et doivent respecter le principe du moindre privilège.
Commencez par préparer l’arborescence et le catalogue de décision :
1$Root = 'C:\EntraRecovery'2$ExportPath = Join-Path $Root 'Exports'3$OutputPath = Join-Path $Root 'Evidence'4$CatalogPath = Join-Path $Root 'recovery-catalog.csv'5 6New-Item -ItemType Directory -Path $ExportPath -Force | Out-Null7New-Item -ItemType Directory -Path $OutputPath -Force | Out-Null8 9$Catalog = @(10 [pscustomobject]@{11 ObjectType = 'ManagedIdentities'12 NativeBackup = 'Oui'13 SoftDelete = 'A_documenter'14 Authority = 'Cloud'15 RecoveryOwner = 'EquipeIdentite'16 RunbookDecision = 'Valider_objet_et_proprietes_avant_restauration'17 }18 [pscustomobject]@{19 ObjectType = 'SyncedFromADDS'20 NativeBackup = 'Non'21 SoftDelete = 'Voie_non_autoritative'22 Authority = 'ADDS'23 RecoveryOwner = 'EquipeAD'24 RunbookDecision = 'Restaurer_dans_ADDS_puis_synchroniser'25 }26 [pscustomobject]@{27 ObjectType = 'OtherCloudObjects'28 NativeBackup = 'A_verifier'29 SoftDelete = 'A_verifier'30 Authority = 'Cloud'31 RecoveryOwner = 'EquipeIdentite'32 RunbookDecision = 'Verifier_la_documentation_en_vigueur'33 }34)35 36$Catalog | Export-Csv -LiteralPath $CatalogPath -NoTypeInformation -Encoding utf8Placez ensuite les exports dans des sous-dossiers dont le nom correspond à ObjectType, par exemple C:\EntraRecovery\Exports\ManagedIdentities. Enregistrez le script ci-dessous sous C:\EntraRecovery\New-EntraRecoveryEvidence.ps1.
1[CmdletBinding()]2param(3 [Parameter(Mandatory)]4 [string]$ExportPath,5 6 [Parameter(Mandatory)]7 [string]$CatalogPath,8 9 [Parameter(Mandatory)]10 [string]$OutputPath11)12 13Set-StrictMode -Version Latest14$ErrorActionPreference = 'Stop'15 16# Vérifie les entrées avant de créer les preuves.17if (-not (Test-Path -LiteralPath $ExportPath -PathType Container)) {18 throw "Le répertoire d'exports est introuvable : $ExportPath"19}20if (-not (Test-Path -LiteralPath $CatalogPath -PathType Leaf)) {21 throw "Le catalogue est introuvable : $CatalogPath"22}23 24New-Item -ItemType Directory -Path $OutputPath -Force | Out-Null25 26$ResolvedExport = (Resolve-Path -LiteralPath $ExportPath).Path.TrimEnd(27 [IO.Path]::DirectorySeparatorChar,28 [IO.Path]::AltDirectorySeparatorChar29)30$ResolvedCatalog = (Resolve-Path -LiteralPath $CatalogPath).Path31$ResolvedOutput = (Resolve-Path -LiteralPath $OutputPath).Path32 33$Catalog = Import-Csv -LiteralPath $ResolvedCatalog34$RequiredColumns = @(35 'ObjectType',36 'NativeBackup',37 'SoftDelete',38 'Authority',39 'RecoveryOwner',40 'RunbookDecision'41)42 43foreach ($Column in $RequiredColumns) {44 if ($Catalog.Count -gt 0 -and $Column -notin $Catalog[0].PSObject.Properties.Name) {45 throw "Colonne obligatoire absente du catalogue : $Column"46 }47}48 49# Calcule une empreinte SHA-256 pour chaque export et applique la décision du catalogue.50$Files = Get-ChildItem -LiteralPath $ResolvedExport -File -Recurse51$Manifest = foreach ($File in $Files) {52 $RelativePath = $File.FullName.Substring($ResolvedExport.Length).TrimStart(53 [char[]]@([IO.Path]::DirectorySeparatorChar, [IO.Path]::AltDirectorySeparatorChar)54 )55 $ObjectType = ($RelativePath -split '[\\/]')[0]56 $CatalogEntry = $Catalog |57 Where-Object { $_.ObjectType -eq $ObjectType } |58 Select-Object -First 159 60 if ($null -eq $CatalogEntry) {61 $CatalogEntry = [pscustomobject]@{62 ObjectType = $ObjectType63 NativeBackup = 'NON_CLASSE'64 SoftDelete = 'NON_CLASSE'65 Authority = 'NON_CLASSEE'66 RecoveryOwner = 'NON_ASSIGNE'67 RunbookDecision = 'REVUE_OBLIGATOIRE'68 }69 }70 71 $Hash = Get-FileHash -LiteralPath $File.FullName -Algorithm SHA25672 73 [pscustomobject]@{74 ObjectType = $ObjectType75 RelativePath = $RelativePath76 SizeBytes = $File.Length77 LastWriteUtc = $File.LastWriteTimeUtc.ToString('o')78 SHA256 = $Hash.Hash79 NativeBackup = $CatalogEntry.NativeBackup80 SoftDelete = $CatalogEntry.SoftDelete81 Authority = $CatalogEntry.Authority82 RecoveryOwner = $CatalogEntry.RecoveryOwner83 RunbookDecision = $CatalogEntry.RunbookDecision84 }85}86 87$Timestamp = Get-Date -Format 'yyyyMMdd-HHmmss'88$ManifestPath = Join-Path $ResolvedOutput "manifest-$Timestamp.csv"89$SummaryPath = Join-Path $ResolvedOutput "summary-$Timestamp.json"90$RunbookPath = Join-Path $ResolvedOutput "runbook-$Timestamp.md"91$ArchivePath = Join-Path $ResolvedOutput "entra-recovery-evidence-$Timestamp.zip"92 93$Manifest | Export-Csv -LiteralPath $ManifestPath -NoTypeInformation -Encoding utf894 95$UnclassifiedCount = @($Manifest | Where-Object { $_.NativeBackup -eq 'NON_CLASSE' }).Count96$Summary = [pscustomobject]@{97 GeneratedUtc = (Get-Date).ToUniversalTime().ToString('o')98 ExportRoot = $ResolvedExport99 TotalFiles = @($Manifest).Count100 UnclassifiedFiles = $UnclassifiedCount101 ObjectTypes = @($Manifest.ObjectType | Sort-Object -Unique)102 Manifest = $ManifestPath103}104$Summary | ConvertTo-Json -Depth 4 | Out-File -LiteralPath $SummaryPath -Encoding utf8105 106$Runbook = @(107 '# Runbook de reprise Microsoft Entra ID'108 ''109 "Généré le : $($Summary.GeneratedUtc)"110 "Nombre de fichiers : $($Summary.TotalFiles)"111 "Éléments non classés : $($Summary.UnclassifiedFiles)"112 ''113 '## Contrôles avant restauration'114 '- Confirmer la date et l’heure de la sauvegarde.'115 '- Archiver le rapport de différences.'116 '- Vérifier l’autorité de chaque objet.'117 '- Obtenir l’approbation du propriétaire de service.'118 '- Confirmer l’identité du Backup Administrator.'119 ''120 '## Contrôles après restauration'121 '- Vérifier la présence des objets attendus.'122 '- Valider les propriétés critiques avec le propriétaire.'123 '- Contrôler les dépendances applicatives.'124 '- Archiver les journaux et la durée observée.'125)126$Runbook | Out-File -LiteralPath $RunbookPath -Encoding utf8127 128# Assemble les exports et les preuves sans modifier les données sources.129$ArchiveInputs = @(130 $ResolvedExport,131 $ResolvedCatalog,132 $ManifestPath,133 $SummaryPath,134 $RunbookPath135)136Compress-Archive -Path $ArchiveInputs -DestinationPath $ArchivePath -Force137 138[pscustomobject]@{139 Manifest = $ManifestPath140 Summary = $SummaryPath141 Runbook = $RunbookPath142 Archive = $ArchivePath143 UnclassifiedFiles = $UnclassifiedCount144}Exécutez-le avec des paramètres nommés :
1C:\EntraRecovery\New-EntraRecoveryEvidence.ps1 `2 -ExportPath 'C:\EntraRecovery\Exports' `3 -CatalogPath 'C:\EntraRecovery\recovery-catalog.csv' `4 -OutputPath 'C:\EntraRecovery\Evidence'La valeur de retour doit contenir les chemins de Manifest, Summary, Runbook et Archive. Vérifiez ensuite qu’aucun fichier ne reste sans décision :
1$LatestSummary = Get-ChildItem 'C:\EntraRecovery\Evidence\summary-*.json' |2 Sort-Object LastWriteTimeUtc -Descending |3 Select-Object -First 14 5$Result = Get-Content -LiteralPath $LatestSummary.FullName -Raw | ConvertFrom-Json6$Result7 8if ($Result.UnclassifiedFiles -ne 0) {9 throw "Audit incomplet : $($Result.UnclassifiedFiles) fichier(s) non classé(s)."10}Mesurer le délai réel de reprise
Une sauvegarde quotidienne impose un objectif de point de reprise dépendant de l’heure fixe de création. Microsoft recommande donc de planifier les changements à grande échelle juste après la création d’une sauvegarde, afin de disposer d’un point cohérent avant les modifications suivantes.
Les durées de traitement doivent être mesurées sur votre tenant. Lors de ses tests de la préversion, Tony Redmond a observé qu’un rapport de différences pouvait dépasser 75 minutes sur un petit tenant. Il indique également qu’une restauration portant sur 500 000 changements pouvait demander jusqu’à 30 heures.
Ces observations ne constituent pas un engagement de service. Elles montrent toutefois qu’un rapport en attente ne signifie pas nécessairement qu’il a échoué et qu’un objectif de temps de reprise doit intégrer le volume de changements, l’analyse humaine et la validation applicative.
Contrôles après chaque exercice
- Le point de sauvegarde utilisé a été consigné avec son horodatage
- Le rapport de différences est archivé hors du tenant
- Aucun objet synchronisé n’a été traité comme un objet cloud autoritatif
- Les propriétés critiques ont été validées par leur propriétaire
- Les fichiers exportés possèdent une empreinte SHA-256
- Les éléments non classés ont été ramenés à zéro
- Le temps de génération du rapport et le temps de restauration sont documentés
- Le runbook indique un titulaire et un suppléant pour chaque action
Dépannage des échecs les plus courants
| Symptôme | Cause probable | Résolution |
|---|---|---|
| Aucune sauvegarde visible | Tenant non pris en charge, licence absente, rôle insuffisant ou sauvegarde quotidienne pas encore disponible | Vérifier le type de tenant, Microsoft Entra ID P1 ou P2 et l’affectation de Backup Reader |
| Un objet attendu manque dans le rapport | Type d’objet non pris en charge ou propriété hors du sous-ensemble couvert | Contrôler la liste Microsoft Learn et basculer vers l’export externe si nécessaire |
| La restauration d’un objet synchronisé échoue | L’autorité de l’objet reste dans AD DS | Restaurer ou recréer l’objet dans AD DS puis laisser la synchronisation réappliquer l’état |
| Un objet supprimé définitivement est introuvable | Le hard delete n’est pas récupérable par la sauvegarde native | Utiliser l’état externe ou une solution tierce et renforcer les Protected Actions |
| Le rapport de différences reste longtemps en traitement | Le calcul peut être long même sur un tenant de petite taille | Attendre la fin du traitement, consigner la durée et l’intégrer au temps de reprise mesuré |
| Le manifeste contient NON_CLASSE | Le nom du sous-dossier ne correspond à aucune entrée du catalogue | Ajouter la famille d’objets au catalogue puis régénérer les preuves |
| L’archive existe mais la reprise reste impossible | Les exports ne contiennent pas les propriétés nécessaires à la reconstruction | Réviser le périmètre des exports et tester une restauration fonctionnelle, pas seulement l’intégrité des fichiers |
Construire un runbook utilisable en production
Commencez par un audit en lecture seule avec Backup Reader, puis classez les objets selon leur autorité et leur voie de reprise. N’accordez Backup Administrator qu’après avoir défini l’approbation, les critères d’arrêt et les validations post-restauration.
Plan d’action prioritaire
- Confirmer les licences Microsoft Entra ID P1 ou P2 et le type workforce du tenant
- Identifier les titulaires de Backup Reader et Backup Administrator
- Relever l’heure de création de la sauvegarde quotidienne
- Construire la matrice des objets, propriétés, autorités et propriétaires
- Exporter un état connu et sain dans un dépôt externe versionné
- Vérifier la conservation des journaux d’audit au-delà de 30 jours
- Protéger les suppressions définitives avec les Protected Actions
- Mesurer un rapport de différences et un scénario de restauration contrôlé
- Faire approuver le runbook par les équipes identité, AD DS, sécurité et applications
Si votre tenant dépend surtout d’objets cloud pris en charge, la sauvegarde native peut devenir le premier chemin de reprise. Si vous devez dépasser 7 jours, recréer des objets supprimés définitivement ou restaurer des propriétés non couvertes, prévoyez dès la conception un dépôt externe et évaluez une solution tierce.
Pour aller plus loin
- Microsoft Entra Backup and Recovery overview — les prérequis, rôles, objets pris en charge et limites actuelles.
- Microsoft Entra Backup and Recovery en disponibilité générale — les évolutions apportées depuis la préversion publique.
- Plan for tenant recoverability — la stratégie de reprise en couches, les exports et la conservation des journaux.
- Retour d’expérience sur Entra ID Backup and Recovery — les durées observées pour les rapports et restaurations.
- Microsoft 365 : nouveautés de juillet 2026 — le contexte des évolutions Microsoft 365 suivant la disponibilité générale.
