DIDOES ITEndpoint Engineering← Tous les articles

Recommandation / Endpoint & Automation

Microsoft Graph : choisir entre certificat et Managed Identity pour l’automatisation

Une automatisation ne devrait pas dépendre du mot de passe d’un administrateur. Lorsque le runtime le permet, je privilégie une Managed Identity ; sinon j’utilise un certificat protégé, avec une rotation testée et des permissions Graph limitées au besoin réel.

À propos des exemples

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.

01

Position recommandée

L’accès app-only utilise l’identité propre de l’application et des application permissions consenties par un administrateur. Il convient aux traitements sans utilisateur, mais son rayon d’action peut couvrir le tenant.

Une Managed Identity supprime le stockage et la rotation d’un secret dans le code. L’identité system-assigned suit le cycle de vie de la ressource ; une user-assigned peut être partagée ou déplacée, au prix d’une gouvernance séparée.

Un certificat reste adapté aux runtimes non compatibles avec Managed Identity. Sa clé privée doit être protégée, sa date d’expiration surveillée et sa rotation réalisée avec une période de chevauchement contrôlée.

L’accès app-only utilise l’identité propre de l’application et des application permissions consenties par un administrateur. Il convient aux traitements sans utilisateur, mais son rayon d’action peut couvrir le tenant.
02

Besoin, cas d’usage et périmètre de la recommandation

Le flux client credentials obtient un token pour le scope https://graph.microsoft.com/.default. Le token contient les rôles applicatifs déjà consentis ; demander .default n’ajoute aucune permission par lui-même.

Une system-assigned Managed Identity crée un service principal lié à la ressource Azure. Supprimer la ressource supprime l’identité, ce qui simplifie le cycle de vie mais rend le partage impossible.

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, Managed Identity, Certificate authentication, App-only
  • 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
03

Critères de décision et options possibles

Pour « Authentification Graph sans secret », 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.

04

Architecture cible et répartition des responsabilités

Le flux client credentials obtient un token pour le scope https://graph.microsoft.com/.default. Le token contient les rôles applicatifs déjà consentis ; demander .default n’ajoute aucune permission par lui-même.

Une system-assigned Managed Identity crée un service principal lié à la ressource Azure. Supprimer la ressource supprime l’identité, ce qui simplifie le cycle de vie mais rend le partage impossible.

Une user-assigned Managed Identity existe indépendamment et peut être attachée à plusieurs ressources. Je l’utilise lorsque plusieurs runtimes doivent partager exactement le même rôle et le même cycle de révocation, jamais seulement par commodité.

FLUXChaîne fonctionnelle — Authentification Graph sans secret
  1. RuntimeAzure ou autre héberge le workload.
  2. IdentityManaged Identity ou application avec certificat.
  3. ConsentApp roles Graph minimaux sont accordés.
  4. TokenGraph vérifie aud, roles, tenant et expiration.

Chaque étape doit produire sa propre preuve. Un succès en amont ne garantit pas que les étapes suivantes ont terminé leur traitement.

05

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 endpoints et permissions
  • runtime identifié
  • rôle d’approbation séparé
  • app registration si certificat
  • coffre ou magasin de certificats
  • logs sans token
  • rotation et révocation testées
06

Fonctionnement détaillé et responsabilités

Le flux client credentials obtient un token pour le scope https://graph.microsoft.com/.default. Le token contient les rôles applicatifs déjà consentis ; demander .default n’ajoute aucune permission par lui-même.

Une system-assigned Managed Identity crée un service principal lié à la ressource Azure. Supprimer la ressource supprime l’identité, ce qui simplifie le cycle de vie mais rend le partage impossible.

Une user-assigned Managed Identity existe indépendamment et peut être attachée à plusieurs ressources. Je l’utilise lorsque plusieurs runtimes doivent partager exactement le même rôle et le même cycle de révocation, jamais seulement par commodité.

  • matrice endpoints et permissions
  • runtime identifié
  • rôle d’approbation séparé
  • app registration si certificat
07

Configuration, exploitation et cas limites

Les permissions Graph sont accordées directement au service principal de l’identité managée. Cette opération exige des rôles très privilégiés ; elle est exécutée par un processus d’approbation distinct du runbook consommateur.

Avec un certificat, l’application prouve la possession de la clé privée. Le certificat public est enregistré dans l’app registration, tandis que la clé privée reste dans un magasin ou coffre protégé et n’entre jamais dans le dépôt.

La rotation de certificat ajoute le nouveau credential, valide un run complet, bascule le runtime puis retire l’ancien. Je conserve une courte période de chevauchement, une alerte d’expiration et un test de révocation.

  • Tester une lecture et un refus attendu
  • Exercer rotation ou remplacement
  • Révoquer l’ancienne identité puis contrôler
08

Interpréter les résultats sans raccourci

Connect-MgGraph -Identity utilise la Managed Identity du runtime compatible ; le ClientId permet de sélectionner une user-assigned identity. Pour un certificat, tenant ID, client ID et empreinte ou objet certificat doivent être explicités.

Le token n’est jamais écrit en clair. Pour le diagnostic, je contrôle le contexte Graph, le tenant, le mode AuthType et les permissions attendues, puis j’utilise request-id et date pour les erreurs de ressource.

Le choix final documente portabilité, séparation dev/test/prod, permissions, propriétaire, coût d’exploitation, récupération et délai de révocation. Une identité par workload critique réduit le rayon d’impact.

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.

09

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.

10

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.

PROCÉDUREDéploiement contrôlé de la recommandation
  1. 01Établir l’état initial
    Emplacement
    Portails Microsoft et poste témoin
    Commande / configuration
    Lister les appels Graph exacts.
    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.
  2. 02Configurer le pilote
    Emplacement
    Groupe, profil ou service pilote
    Commande / configuration
    Choisir Managed Identity si le runtime la supporte.
    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.
  3. 03Observer le parcours complet
    Emplacement
    Rapports cloud et journaux locaux
    Commande / configuration
    Créer une identité dédiée par environnement.
    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.
  4. 04Décider la vague suivante
    Emplacement
    Dossier de changement et runbook
    Commande / configuration
    Accorder les app roles minimaux.
    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.

11

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.

POWERSHELLValidation d’une Managed Identity Graph — niveau 1
# Exemple pédagogique non testé — niveau 1
$ErrorActionPreference = 'Stop'
try {
  Connect-MgGraph -Identity -NoWelcome
  $context = Get-MgContext
  $organization = Invoke-MgGraphRequest -Method GET -Uri 'https://graph.microsoft.com/v1.0/organization?%24select=id,displayName'
  [pscustomobject]@{TenantId=$context.TenantId;AuthType=$context.AuthType;AppName=$context.AppName;Organization=$organization.value.displayName}
} catch { Write-Error "Validation Graph impossible : $($_.Exception.Message)"; exit 1 }
finally { Disconnect-MgGraph -ErrorAction SilentlyContinue }

Exécuter uniquement depuis un runtime possédant l’identité et une permission de lecture minimale. Ne pas afficher AccessToken ou ClientSecret.

12

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 appels Graph exacts.
  • Choisir Managed Identity si le runtime la supporte.
  • Créer une identité dédiée par environnement.
  • Accorder les app roles minimaux.
  • Tester une lecture et un refus attendu
  • Exercer rotation ou remplacement
  • Révoquer l’ancienne identité puis contrôler
13

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 appels Graph exacts.
  • Choisir Managed Identity si le runtime la supporte.
  • Créer une identité dédiée par environnement.
  • Accorder les app roles minimaux.
  • Tester une lecture et un refus attendu
  • Exercer rotation ou remplacement
  • Révoquer l’ancienne identité puis contrôler
MATRICELecture structurée des preuves
CoucheQuestionPreuveDécision
CiblageLe poste devait-il recevoir la configuration ?Groupe, filtre, licence et affectationCorriger le ciblage avant le client
TransportLa demande a-t-elle atteint sa destination ?Check-in, événement, request-id ou téléchargementTraiter identité, réseau ou service
TraitementLe composant a-t-il évalué la demande ?Journal, état par paramètre ou résultat APICorriger la valeur ou le composant
RésultatL’objectif final est-il atteint ?Contrôle fonctionnel et rapport corréléValider ou maintenir NO-GO
14

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.

MATRICEMatrice de diagnostic
SymptômeCause à confirmerPreuve recherchéeCorrection ciblée
403 ForbiddenApp role absent ou RBAC ressourceToken roles et documentationAccorder seulement le rôle requis
Connect Identity échoueIdentité non attachéeResource identity et ClientIdCorriger l’attachement
Certificat introuvableStore ou empreinteCert store et expirationDéployer le nouveau certificat
Mauvais tenantContexte impliciteGet-MgContextRendre TenantId explicite
Automatisation orphelineOwner absentService principal et runbookDésactiver puis réattribuer

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.

15

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 l’app role nouvellement accordé
  • Rollback : réattacher l’identité précédente pendant la fenêtre de bascule
  • Rollback : réactiver temporairement l’ancien certificat seulement s’il reste protégé et valide
  • Point de vigilance : ne jamais journaliser le token
  • Point de vigilance : séparer identité et compte d’approbation
  • Point de vigilance : éviter les permissions tenant-wide inutiles
  • Point de vigilance : tester la révocation
R

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.

Microsoft GraphManaged IdentityCertificate authenticationApp-onlyMicrosoft Entra IDLeast privilege

Continuer la lecture

Modern Workplace LabOMA-DM et WinDC en double inscriptionEndpoint LabDiagnostic complet des applications Win32