Introduction
La surveillance des dérives de configuration représente un défi majeur pour les administrateurs Microsoft 365. Les modifications non autorisées ou accidentelles peuvent compromettre la sécurité et la conformité de votre environnement. Microsoft répond à ce besoin avec Unified Tenant Configuration Management (UTCM), une solution native qui révolutionne la gestion des configurations.
Bon à savoir
UTCM est actuellement en preview publique et permet de surveiller plus de 300 types de ressources différentes dans votre tenant Microsoft 365.
Cet article vous guide pas à pas dans l'implémentation d'UTCM à l'aide de PowerShell, depuis la configuration initiale jusqu'à la détection des dérives.
Architecture et composants d'UTCM
Avant de plonger dans la configuration, comprenons l'architecture d'UTCM qui repose sur trois piliers fondamentaux :
Les snapshots (instantanés)
Les snapshots capturent l'état de vos ressources à un instant donné. Ils constituent votre référence, votre état désiré. Pensez-y comme une photographie de vos politiques d'accès conditionnel ou de vos règles Exchange à un moment où tout est parfaitement configuré.
Les monitors (moniteurs)
Les monitors sont le moteur de surveillance. Ils comparent périodiquement l'état actuel de votre tenant avec le snapshot de référence. Par défaut, cette vérification s'exécute toutes les 6 heures.
Les drifts (dérives)
Les drifts représentent les écarts détectés entre l'état actuel et l'état de référence. Par exemple, si le nom d'une politique d'accès conditionnel a été modifié, UTCM le signalera comme une dérive.
Attention
Les limites actuelles de l'API UTCM sont documentées sur Microsoft Learn. Assurez-vous de les consulter avant de planifier votre implémentation à grande échelle.
Prérequis techniques
Avant de commencer l'implémentation, assurez-vous de disposer des éléments suivants :
- PowerShell 7 ou version supérieure installé sur votre poste de travail
- Un compte avec le rôle Global Administrator dans votre tenant
- Les modules PowerShell Microsoft Graph installés
Installation de PowerShell 7
Si PowerShell 7 n'est pas déjà installé, téléchargez-le depuis le site officiel de Microsoft. La documentation complète d'installation est disponible sur Microsoft Learn.
Connexion à Microsoft Graph
Connectez-vous à Microsoft Graph avec les permissions nécessaires :
1Connect-MgGraph -Scopes 'ConfigurationMonitoring.ReadWrite.All'Configuration de l'authentification UTCM
UTCM utilise un principal de service dédié qui lui permet d'accéder aux ressources à surveiller. Cette approche garantit une séparation claire des privilèges et une sécurité renforcée.
Astuce
Pendant la phase de preview publique, vous devez créer manuellement ce principal de service. Cette étape sera probablement automatisée dans la version finale.
Installation des modules requis
Installez le module d'authentification Microsoft Graph :
1Install-Module Microsoft.Graph.AuthenticationConnexion avec les permissions appropriées
Connectez-vous avec les permissions nécessaires à la création du principal de service :
1Connect-MgGraph -Scopes 'Application.ReadWrite.All'Création du principal de service UTCM
Exécutez le script suivant pour créer le principal de service et lui attribuer les permissions requises :
1# Création du principal de service2$body = @{3 appId = "03b07b79-c5bc-4b5e-9bfa-13acf4a99998"4}5Invoke-MgGraphRequest -Uri "v1.0/servicePrincipals" -Method POST -Body $body6 7# Attribution des permissions8$permissions = @('Policy.Read.All', 'Policy.ReadWrite.ConditionalAccess')9$graph = Invoke-MgGraphRequest -Uri "v1.0/servicePrincipals?`$filter=appId eq '00000003-0000-0000-c000-000000000000'" -Method GET -OutputType PSObject | Select -Expand Value10$utcm = Invoke-MgGraphRequest -Uri "v1.0/servicePrincipals?`$filter=appId eq '03b07b79-c5bc-4b5e-9bfa-13acf4a99998'" -Method GET -OutputType PSObject | Select -Expand Value11 12foreach ($requestedPermission in $permissions) {13 $AppRole = $Graph.AppRoles | Where-Object { $_.Value -eq $requestedPermission }14 $body = @{15 appRoleId = $AppRole.Id16 resourceId = $Graph.Id17 principalId = $UTCM.Id18 } | ConvertTo-Json 19 20 Invoke-MgGraphRequest -Uri "/v1.0/servicePrincipals/$($UTCM.Id)/appRoleAssignments" -Method POST -Body $body21}Création d'un snapshot de référence
Le snapshot constitue votre ligne de base, votre état de référence. Il est crucial de le capturer lorsque vos ressources sont dans l'état souhaité.
Important
Assurez-vous que vos configurations sont dans l'état désiré avant de créer le snapshot. Toute dérive future sera mesurée par rapport à cet état de référence.
Capture des politiques d'accès conditionnel
Pour créer un snapshot de vos politiques d'accès conditionnel actuelles :
1$uri = "beta/admin/configurationManagement/configurationSnapshots/createSnapshot"2$body = @{3 displayName = "Conditional Access Baseline"4 description = "Criticial CA policies"5 resources = @(6 "microsoft.entra.conditionalaccesspolicy"7 )8}9Invoke-MgGraphRequest -Uri $uri -Method POST -Body $bodyCapture de multiples types de ressources
Pour capturer plusieurs types de ressources simultanément, étendez simplement le tableau des ressources :
1resources = @(2 "microsoft.entra.conditionalaccesspolicy",3 "microsoft.entra.authenticationmethodpolicy"4)Attention
Chaque type de ressource supplémentaire nécessite des permissions spécifiques pour le principal de service UTCM. Par exemple, la surveillance des méthodes d'authentification requiert la permission Policy.Read.AuthenticationMethod.
Mise en place du monitoring
Une fois le snapshot créé, configurez le monitoring pour surveiller activement les dérives.
Récupération du snapshot
Récupérez d'abord les informations du snapshot créé :
1# Filtrage pour localiser le snapshot désiré2$filter = "displayName eq 'Conditional Access Baseline'"3$uri = "beta/admin/configurationManagement/configurationSnapshotJobs/?`$filter=$filter"4# Récupération du snapshot5$snapshot = Invoke-MgGraphRequest -Uri $uri -Method GET -OutputType PSObject | Select -Expand Value6# Obtention de l'URI des configurations7$resourceLocation = $snapshot[0].resourceLocation8# Récupération de la configuration complète9$resources = Invoke-MgGraphRequest -Uri $resourceLocation -Method GET10$fineResources = $resources | Select displayName, description, resourcesCréation du monitor
Créez le monitor en utilisant les informations du snapshot :
1$uri = "beta/admin/configurationManagement/configurationMonitors"2$body = @{3 displayName = "Conditional Access Monitor"4 description = "Criticial CA policies Monitor"5 baseline = @{6 displayName = $fineResources.displayName7 description = $fineResources.description8 resources = ($fineResources.resources | Select-Object -Property displayName, resourceType, properties)9 }10} | ConvertTo-Json -Depth 1011Invoke-MgGraphRequest -Uri $uri -Method POST -Body $bodySurveillance et analyse des résultats
Vérification du statut des jobs
Les monitors s'exécutent automatiquement toutes les 6 heures. Pour consulter les résultats :
1# Recherche de l'ID du monitor2$filter = "displayName eq 'Conditional Access Monitor'"3$uri = "beta/admin/configurationManagement/configurationMonitors/?`$filter=$filter"4$monitorJob = Invoke-MgGraphRequest -Uri $uri -Method GET -OutputType PSObject | Select -Expand Value5 6# Récupération des résultats7$filter = "monitorId eq '$($monitorJob[0].id)'"8$uri = "/beta/admin/configurationManagement/configurationMonitoringResults?`$filter=$filter"9$monitorResults = Invoke-MgGraphRequest -Uri $uri -Method GET -OutputType PSObject | Select -expand Value
Analyse des dérives détectées
Lorsque des dérives sont signalées, examinez-les en détail :
1$filter = "monitorId eq '$($monitorJob[0].id)'"2$uri = "/beta/admin/configurationManagement/configurationDrifts/?`$filter=$filter"3$configurationDrifts = Invoke-MgGraphRequest -Uri $uri -Method GET -OutputType PSObject | Select -expand Value
Pour une visualisation détaillée des changements :
1$configurationDrifts | ConvertTo-Json -Depth 10
Astuce
Convertir les résultats en JSON permet d'explorer facilement les objets imbriqués et d'identifier précisément les changements détectés.
Recommandations et bonnes pratiques
Automatisation et intégration
Bien qu'UTCM soit puissant, il reste actuellement un ensemble d'APIs. Pour une utilisation optimale :
- Automatisez la récupération et l'analyse des dérives via des runbooks Azure Automation
- Intégrez les alertes dans votre système de ticketing ou de notification
- Documentez chaque snapshot avec des descriptions détaillées pour faciliter le suivi
Gestion des permissions
| Type de ressource | Permission requise | Scope |
|---|---|---|
| Conditional Access | Policy.ReadWrite.ConditionalAccess | Entra ID |
| Authentication Methods | Policy.Read.AuthenticationMethod | Entra ID |
| Exchange Transport Rules | Exchange.ManageAsApp | Exchange Online |
Planification de la surveillance
- Créez des snapshots distincts pour différentes catégories de ressources
- Établissez une routine de revue hebdomadaire des dérives
- Documentez les changements légitimes pour éviter les faux positifs récurrents
Conclusion
UTCM représente une avancée significative dans la gestion proactive des configurations Microsoft 365. En implémentant cette solution, vous transformez la surveillance réactive en une approche préventive, garantissant la stabilité et la conformité de votre environnement.
La clé du succès réside dans une implémentation méthodique, une documentation rigoureuse et une automatisation intelligente. Alors qu'UTCM évolue vers sa version finale, les fondations que vous posez aujourd'hui vous permettront de tirer pleinement parti de ses futures capacités.



