Je publie les diagnostics en niveau 1 et les exemples de remédiation au minimum en niveau 2. Ils restent pédagogiques, non testés et ne doivent pas être utilisés tels quels. Avant tout essai réel, adaptez-les au contexte, utilisez la simulation quand elle existe et validez le rollback sur un pilote représentatif.
Position recommandée
Les permissions delegated agissent au nom d’un utilisateur et restent bornées par ses droits ; les application permissions permettent un accès sans utilisateur et portent souvent un impact tenant-wide. Le choix dépend du scénario, pas de la facilité du code.
Je pars de l’endpoint et de l’opération exacts, puis je sélectionne la permission la moins privilégiée dans la documentation. Directory.Read.All ou DeviceManagementConfiguration.ReadWrite.All ne sont pas des permissions génériques à accorder par défaut.
Chaque identité applicative possède un propriétaire, une finalité, un environnement, des permissions, une méthode d’authentification, une date de revue et un runbook de révocation. Les consentements sont audités dans les oauth2PermissionGrants et appRoleAssignments.
Les permissions delegated agissent au nom d’un utilisateur et restent bornées par ses droits ; les application permissions permettent un accès sans utilisateur et portent souvent un impact tenant-wide. Le choix dépend du scénario, pas de la facilité du code.
Besoin, cas d’usage et périmètre de la recommandation
En delegated, l’application reçoit des scopes et agit dans le contexte d’un utilisateur connecté. La permission Graph et les droits effectifs de l’utilisateur peuvent tous deux limiter l’opération.
En application, le service principal reçoit des app roles et fonctionne sans utilisateur. Le consentement administrateur est requis et l’exposition peut couvrir toutes les ressources associées à la permission.
Je définis l’objectif opérationnel avant de choisir le profil ou l’outil. Cette discipline sépare le besoin de sécurité, l’expérience utilisateur, l’autorité de gestion et la preuve attendue. Elle évite aussi qu’un paramètre soit activé uniquement parce qu’il apparaît dans la console.
Je compare toujours l’intention cloud, l’applicabilité, l’état reçu par Windows et le résultat réellement observé. Une affectation réussie, un état vert ou une requête HTTP acceptée ne prouve pas à lui seul que tout le parcours fonctionne.
- Résultat recherché : comprendre l’architecture, les dépendances et les limites
- Résultat recherché : mettre en œuvre un pilote mesurable et reproductible
- Résultat recherché : construire un diagnostic et un rollback utilisables par l’exploitation
- Dans le périmètre : Microsoft Graph, Permissions, Consent, Service principal
- Dans le périmètre : postes Windows gérés et services Microsoft officiellement documentés
- Dans le périmètre : validation en laboratoire puis pilote représentatif avant généralisation
Critères de décision et options possibles
Pour « Gouvernance des permissions Microsoft Graph », je formule une position recommandée, mais pas une valeur prétendument universelle. Je la confronte aux licences, au niveau de risque, aux dépendances réseau, aux responsabilités de support, aux populations visées et à la maturité opérationnelle de l’organisation.
Lorsque plusieurs méthodes sont supportées, je compare leur simplicité, leur réversibilité, leur observabilité et le risque d’autorités concurrentes. La méthode retenue doit rendre explicites la propriété du paramètre, les exceptions acceptées et la façon de prouver le résultat.
Le déploiement suit des anneaux avec critères GO et NO-GO, durée d’observation, seuils mesurables et responsable de décision. Une recommandation n’est validée qu’après un pilote représentatif et un rollback réellement exercé.
Je sépare aussi la valeur recommandée de la politique qui permet de la distribuer. Une même intention peut être portée par le Settings Catalog, Endpoint Security, une baseline, un CSP, une GPO ou un autre outil. Le bon choix dépend de l’autorité qui doit rester propriétaire, de la granularité de reporting et du risque de conflit. Je documente la méthode écartée lorsque sa présence future créerait une ambiguïté.
Les exceptions ne sont pas des oublis de ciblage. Elles disposent d’un motif, d’un responsable, d’une mesure compensatoire, d’une date d’expiration ou de revue et d’un moyen de les retrouver. Cette gouvernance évite qu’un pilote temporaire ou une exclusion de dépannage ne devienne silencieusement la configuration permanente du parc.
Architecture cible et répartition des responsabilités
En delegated, l’application reçoit des scopes et agit dans le contexte d’un utilisateur connecté. La permission Graph et les droits effectifs de l’utilisateur peuvent tous deux limiter l’opération.
En application, le service principal reçoit des app roles et fonctionne sans utilisateur. Le consentement administrateur est requis et l’exposition peut couvrir toutes les ressources associées à la permission.
Je ne mélange pas delegated et application dans la même identité sauf justification forte. Séparer une collecte read-only, une remédiation et une interface interactive réduit le rayon d’impact et simplifie la révocation.
- WorkloadDéfinit opérations et données nécessaires.
- IdentityUtilisateur, application ou managed identity.
- ConsentScopes ou app roles autorisés.
- TokenPorte les claims vérifiés par Graph.
Chaque étape doit produire sa propre preuve. Un succès en amont ne garantit pas que les étapes suivantes ont terminé leur traitement.
Prérequis, gouvernance et préparation
Avant de créer la configuration, je définis le propriétaire fonctionnel, le propriétaire technique, la population pilote, les exclusions, la durée d’observation et la personne habilitée à déclencher le rollback.
Je capture aussi l’état initial : licences, versions, affectations, autorités, dépendances et métriques. Cette baseline rend la recommandation mesurable et évite de confondre amélioration réelle et variation naturelle du parc.
- matrice opérations/endpoints
- inventaire app registrations/service principals
- rôles d’approbation séparés
- vault ou managed identity
- journalisation des sign-ins
- procédure de rotation
- runbook de révocation
Fonctionnement détaillé et responsabilités
En delegated, l’application reçoit des scopes et agit dans le contexte d’un utilisateur connecté. La permission Graph et les droits effectifs de l’utilisateur peuvent tous deux limiter l’opération.
En application, le service principal reçoit des app roles et fonctionne sans utilisateur. Le consentement administrateur est requis et l’exposition peut couvrir toutes les ressources associées à la permission.
Je ne mélange pas delegated et application dans la même identité sauf justification forte. Séparer une collecte read-only, une remédiation et une interface interactive réduit le rayon d’impact et simplifie la révocation.
- matrice opérations/endpoints
- inventaire app registrations/service principals
- rôles d’approbation séparés
- vault ou managed identity
Configuration, exploitation et cas limites
La documentation de chaque méthode Graph indique les permissions minimales selon delegated/application. Je vérifie aussi les rôles Entra ou Intune additionnels, car certaines API exigent une autorisation RBAC en plus du token.
Une managed identity supprime la gestion d’un secret applicatif lorsqu’un runtime Azure compatible est utilisé. Sinon, un certificat avec clé privée protégée est généralement préférable à un client secret longue durée.
Les credentials ont une expiration, un propriétaire et une rotation testée avant l’échéance. Aucun secret, certificat privé, token ou deltaLink n’est écrit dans le dépôt, la ligne de commande ou les logs.
- Inspecter token et résultat
- Auditer grants et credentials
- Programmer revue et expiration
Interpréter les résultats sans raccourci
Le consentement produit des objets distincts : oauth2PermissionGrant pour les scopes delegated et appRoleAssignment pour les application permissions. Je les inventorie avec l’app registration et le service principal.
Les changements de permissions exigent souvent un nouveau consentement. Ajouter une permission dans le manifeste sans reconsent ne garantit pas qu’elle figure dans le token ; je contrôle les claims et l’objet de grant.
La revue périodique supprime permissions inutilisées, credentials expirés, applications sans propriétaire et grants historiques. Le rollback révoque le grant ou désactive le service principal avant de supprimer définitivement l’identité.
Je distingue une donnée de configuration, une donnée d’inventaire et une preuve d’exécution. La première décrit ce qui devrait arriver, la deuxième décrit un état observé à un instant donné et la troisième montre ce qu’un composant a réellement tenté. Leur horodatage et leur contexte doivent converger avant toute conclusion.
Je documente les états non applicable, pending, conflict, error et success séparément. Un poste absent d’un rapport n’est pas nécessairement sain ou en échec : il peut être hors ligne, non éligible, non ciblé, en retard de télémétrie ou exclu par la politique de collecte.
Pilote, généralisation et maintien en conditions opérationnelles
Le pilote couvre plusieurs modèles matériels, versions de Windows, profils réseau, populations utilisateur et exceptions métier. Je conserve une cohorte témoin afin de différencier l’effet du changement d’une évolution globale du service, d’une mise à jour applicative ou d’un incident réseau.
Les critères GO sont définis avant le début : couverture, taux de succès, délai de convergence, incidents, tickets support, régressions et temps de rollback. Une moyenne satisfaisante ne masque pas un sous-groupe en échec ; les résultats sont donc segmentés par version, modèle, site et mode de gestion.
Les cas négatifs sont testés volontairement : appareil hors ligne, licence absente, identité non éligible, règle non applicable, réseau filtré et retour arrière. Un design exploitable doit échouer de manière visible, sûre et compréhensible pour le support.
Après généralisation, je programme une revue des exceptions, des permissions, des versions de profil et des dépendances. Le service cloud et Windows évoluent ; une décision correcte aujourd’hui doit rester traçable et être revalidée lorsqu’un prérequis ou une interface change.
Configuration recommandée et déploiement par étapes
La procédure applique la méthode recommandée sur un périmètre pilote. Chaque étape précise où agir, quoi configurer, le résultat attendu, la façon de le vérifier, l’impact et la méthode de retour arrière.
Je ne poursuis pas si le résultat attendu manque. Une extension réalisée sur un état partiellement compris rendrait les écarts plus coûteux à isoler et à corriger.
- 01Établir l’état initial
- Emplacement
- Portails Microsoft et poste témoin
- Commande / configuration
Lister les opérations Graph exactes.- Résultat attendu
- Les versions, identités, affectations, autorités et écarts sont documentés.
- Vérification
- Comparer l’inventaire local, les portails et les sources techniques.
- Impact
- Lecture seule.
- Retour arrière
- Aucun.
- 02Configurer le pilote
- Emplacement
- Groupe, profil ou service pilote
- Commande / configuration
Choisir delegated ou application.- Résultat attendu
- Une configuration unique et bornée est appliquée à une audience stable.
- Vérification
- Relire les inclusions, exclusions, filtres, licences et permissions.
- Impact
- Impact limité au pilote.
- Retour arrière
- Retirer l’affectation et restaurer l’état précédent.
- 03Observer le parcours complet
- Emplacement
- Rapports cloud et journaux locaux
- Commande / configuration
Accorder la permission minimale.- Résultat attendu
- Chaque couche produit une preuve datée et les écarts sont expliqués.
- Vérification
- Rejouer le scénario nominal et au moins un cas négatif.
- Impact
- Collecte de preuves minimisées.
- Retour arrière
- Aucun pour la collecte.
- 04Décider la vague suivante
- Emplacement
- Dossier de changement et runbook
- Commande / configuration
Tester sans rôle parasite.- Résultat attendu
- Les critères GO sont atteints ou le changement reste explicitement en NO-GO.
- Vérification
- Contrôler les KPI, les incidents, le support et le rollback.
- Impact
- Extension contrôlée ou arrêt.
- Retour arrière
- Suspendre la vague et appliquer le runbook de retour arrière.
La généralisation reste conditionnée aux critères d’acceptation et à la stabilité observée sur le pilote.
Paramètres, commandes et automatisation
Les commandes présentées servent à vérifier ou illustrer la configuration. Les diagnostics sont des exemples non testés de niveau 1. Toute remédiation est au minimum de niveau 2 avec simulation lorsque l’action s’y prête, puis doit être adaptée et testée avant usage réel.
Je documente le contexte utilisateur ou SYSTEM, les permissions, les valeurs attendues et les effets de bord. Un extrait ne doit jamais introduire un paramètre implicite ou masquer une modification d’état.
# Exemple pédagogique non testé — niveau 1
$ErrorActionPreference = 'Stop'
try {
$servicePrincipalId = '<ServicePrincipalObjectId>'
$appRoles = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/servicePrincipals/$servicePrincipalId/appRoleAssignments"
$delegated = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/oauth2PermissionGrants?%24filter=clientId eq '$servicePrincipalId'"
[pscustomobject]@{ApplicationRoles=$appRoles.value;DelegatedGrants=$delegated.value}
} catch { Write-Error "Inventaire des consentements impossible : $($_.Exception.Message)"; exit 1 }Utiliser une identité de lecture dédiée. Ne pas exporter les credentials ou tokens.
Validation, indicateurs et critères GO / NO-GO
La validation combine un contrôle technique local, la donnée de service et un indicateur d’usage ou d’exploitation adapté. Un état vert dans le portail ne prouve pas à lui seul que le besoin initial est satisfait.
Le passage à la vague suivante exige des seuils atteints, aucune régression critique, des exceptions documentées et un rollback disponible. Toute divergence inexpliquée maintient la décision en NO-GO.
- Lister les opérations Graph exactes.
- Choisir delegated ou application.
- Accorder la permission minimale.
- Tester sans rôle parasite.
- Inspecter token et résultat
- Auditer grants et credentials
- Programmer revue et expiration
Exploitation, journaux et contrôle continu
Je construis une chronologie unique avec l’heure de la demande, le check-in, l’événement local, la décision du composant et la remontée dans le portail. Je conserve UTC et heure locale, mais j’anonymise UPN, DeviceId, TenantId, noms internes, certificats, adresses et contenus métiers avant partage.
La collecte initiale reste en lecture seule. Je ne vide pas un cache, ne supprime pas une clé, ne réinitialise pas un agent et ne force pas un enrôlement avant d’avoir capturé les preuves. Ces actions changent l’état et peuvent rendre la cause première impossible à démontrer.
Les scripts publiés ici sont des exemples pédagogiques non testés de niveau 1. Toute remédiation réelle doit être au minimum de niveau 2, proposer une simulation, limiter sa cible, expliquer son impact et restaurer l’état précédent. Les opérations privilégiées ou à grande échelle exigent un niveau supérieur et une approbation formelle.
- Lister les opérations Graph exactes.
- Choisir delegated ou application.
- Accorder la permission minimale.
- Tester sans rôle parasite.
- Inspecter token et résultat
- Auditer grants et credentials
- Programmer revue et expiration
| Couche | Question | Preuve | Décision |
|---|---|---|---|
| Ciblage | Le poste devait-il recevoir la configuration ? | Groupe, filtre, licence et affectation | Corriger le ciblage avant le client |
| Transport | La demande a-t-elle atteint sa destination ? | Check-in, événement, request-id ou téléchargement | Traiter identité, réseau ou service |
| Traitement | Le composant a-t-il évalué la demande ? | Journal, état par paramètre ou résultat API | Corriger la valeur ou le composant |
| Résultat | L’objectif final est-il atteint ? | Contrôle fonctionnel et rapport corrélé | Valider ou maintenir NO-GO |
Exceptions, erreurs connues et traitement
Une recommandation exploitable doit prévoir les exceptions et les échecs. Je relie chaque symptôme à une cause à confirmer et à une preuve ; la correction n’est appliquée que lorsque cette preuve est obtenue.
Les exceptions durables ont un propriétaire, une justification, une date de révision et une mesure compensatoire. Elles ne sont pas dissimulées dans un groupe d’exclusion sans gouvernance.
| Symptôme | Cause à confirmer | Preuve recherchée | Correction ciblée |
|---|---|---|---|
| 403 malgré scope | Rôle/RBAC ou consent absent | Token claims et documentation | Accorder le minimum manquant |
| Permission ajoutée mais inactive | Reconsent non effectué | Grant et token | Reconsentir avec approbation |
| Automation trop puissante | Permission tenant-wide | App roles | Séparer et réduire |
| Secret expiré | Rotation non testée | Credential endDate | Basculer credential secondaire |
| Application orpheline | Owner absent | Owners et sign-ins | Désactiver puis retirer |
Une cause reste une hypothèse tant qu’elle n’est pas confirmée par une preuve locale ou une donnée de service corrélée.
Rollback, gestion du changement et points de vigilance
Le rollback est préparé avant le pilote et restaure explicitement la valeur, l’affectation ou l’autorité précédente. Je vérifie ensuite la convergence locale et la remontée du nouvel état au lieu de m’arrêter à la suppression de la configuration.
La recommandation doit être réévaluée lors d’une évolution de licence, de version, de support ou de responsabilité. Une validation locale ne constitue jamais une qualification de production.
- Rollback : révoquer le grant concerné
- Rollback : désactiver le service principal avant suppression
- Rollback : restaurer le credential précédent uniquement pendant la fenêtre de rotation
- Point de vigilance : ne jamais journaliser de token
- Point de vigilance : éviter Directory.ReadWrite.All par confort
- Point de vigilance : séparer lecture et écriture
- Point de vigilance : tester avec identité dédiée
Repères d’utilisation
Cette analyse propose une méthode opérationnelle et un cadre de décision. Avant toute application à grande échelle, vérifiez les versions, les licences et les comportements sur un environnement pilote représentatif de votre contexte.
Références techniques publiques
J’ai privilégié la documentation Microsoft pour les comportements contractuels. Les retours terrain complètent l’observation, sans remplacer la documentation de support.
- MicrosoftConcepts d’authentification Graph
- MicrosoftVue d’ensemble des permissions Graph
- MicrosoftRéférence des permissions Graph
- MicrosoftBonnes pratiques des permissions Graph