Maîtriser le flux d’identité managée avec PowerShell et Microsoft Graph
By Mirko Peters ·
Bienvenue dans le blog du podcast ! Si vous avez déjà ressenti la contrainte de coder en dur des mots de passe, de gérer de lourds secrets client ou de craindre une fuite d’identifiants dans vos scripts automatisés…
Automatically translated with AI from the original post. Read the English original
Bienvenue dans le blog du podcast ! Si vous avez déjà ressenti la contrainte de coder en dur des mots de passe, de gérer de lourds secrets client ou de craindre une fuite d’identifiants dans vos scripts automatisés, vous êtes au bon endroit. L’automatisation dans le cloud exige un changement de paradigme dans la manière dont nous envisageons la sécurité. Le temps où les administrateurs pouvaient ranger sereinement leurs identifiants dans des fichiers de configuration en clair ou des variables d’environnement, sans craindre d’être surpris, est révolu. Aujourd’hui, nous plongeons au cœur de l’authentification native au cloud, en examinant plus précisément comment utiliser les identités managées d’Azure au sein de vos scripts PowerShell pour vous authentifier auprès de Microsoft Graph en toute sécurité, sans stocker de données d’identification sensibles.
Automatiser votre environnement Microsoft 365 n’est plus une compétence accessoire ; c’est une nécessité opérationnelle absolue. Toutefois, associer PowerShell à l’API Microsoft Graph peut parfois ressembler à un labyrinthe de demandes d’autorisation, de limitations de débit et de flux complexes d’acquisition de jetons. En adoptant une approche moderne, centrée sur l’identité, nous pouvons supprimer totalement la gestion des identifiants pour les charges de travail exécutées dans Azure. Dans cet article, nous détaillons les composants essentiels de l’authentification native au cloud, en vous guidant à travers les prérequis, les inscriptions d’applications Azure AD, les flux d’acquisition de jetons et l’optimisation des scripts. Si vous souhaitez approfondir ce workflow précis, n’hésitez pas à écouter notre épisode de podcast associé, Use Managed Identity with PowerShell for Microsoft Graph.
Prérequis pour PowerShell et l’API Graph
Avant de commencer à automatiser des tâches Microsoft 365 avec PowerShell et l’API Graph, vous devez correctement préparer votre système et votre environnement. Cette préparation garantit une exécution fluide et un accès sécurisé aux ressources Microsoft Graph.
Installation des modules PowerShell
Vous devez installer les modules PowerShell appropriés pour interagir avec l’API Microsoft Graph. Le SDK PowerShell Microsoft Graph fournit l’ensemble des cmdlets nécessaires à cette intégration. Pour éviter les erreurs, vérifiez que votre système respecte ces configurations minimales :
| Exigence | Description |
|---|---|
| Version de PowerShell | PowerShell version 7 ou ultérieure est requis pour le scripting moderne dans le cloud. |
| .NET Framework | .NET Framework 4.7.2 ou ultérieur est nécessaire, en particulier dans les environnements Windows. |
| PowerShellGet | Mettez à jour PowerShellGet vers la dernière version afin de garantir la stabilité de la gestion des modules. |
| Stratégie d’exécution | Définissez la stratégie d’exécution sur RemoteSigned ou un niveau moins restrictif afin d’autoriser l’importation des scripts. |
Vous pouvez mettre à jour PowerShellGet en exécutant Install-Module PowerShellGet -Force, puis définir la stratégie d’exécution avec Set-ExecutionPolicy RemoteSigned. Ensuite, installez le module Microsoft Graph à l’aide de la commande suivante :
Install-Module Microsoft.Graph -Scope CurrentUserCette commande télécharge la dernière version stable du module, vous permettant d’appeler facilement les points de terminaison Microsoft Graph.
Configuration de l’environnement Microsoft 365
Une configuration correcte de votre environnement Microsoft 365 est essentielle pour l’automatisation. Suivez ces étapes pour commencer :
- Vérifiez que votre système respecte les exigences : PowerShell 7.2 ou ultérieur, .NET Framework 4.7.2 ou plus récent, et le dernier module PowerShellGet.
- Installez le module PowerShell Microsoft Graph comme indiqué ci-dessus.
- Connectez-vous à votre locataire Microsoft 365 en important le module et en vous authentifiant avec les autorisations nécessaires. Par exemple :
Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.ReadWrite.All"Cette commande vous demande de vous connecter et accorde à votre session les autorisations de lecture et d’écriture sur les données des utilisateurs et de l’annuaire. Vous pouvez ajuster les étendues en fonction de vos besoins d’automatisation.
Comprendre les autorisations et les étendues
Les autorisations et les étendues définissent ce que vos scripts peuvent consulter ou modifier dans Microsoft 365. L’API Microsoft Graph utilise deux principaux types d’autorisations :
- Autorisations déléguées : elles s’appliquent lorsque vous exécutez des scripts en tant qu’utilisateur connecté. Elles limitent l’accès aux données que l’utilisateur possède ou auxquelles il peut accéder.
- Autorisations d’application : elles permettent à votre application ou à votre script d’accéder aux données de l’ensemble de l’organisation sans utilisateur connecté, ce qui est typique des automatisations en arrière-plan et des flux d’identité managée.
Parmi les autorisations courantes figurent *.Read.All pour un accès en lecture seule et *.ReadWrite.All pour des capacités complètes de lecture et d’écriture. Par exemple, SecurityActions.Read.All vous permet de consulter les actions de sécurité, tandis que SecurityActions.ReadWrite.All vous permet de les modifier.
Les autorisations d’application nécessitent un consentement administrateur. Un administrateur du locataire doit approuver ces autorisations pour garantir la sécurité. Par ailleurs, les utilisateurs doivent disposer des rôles Microsoft Entra appropriés, comme Lecteur de sécurité, pour accéder aux données sensibles. Ce contrôle d’accès basé sur les rôles ajoute une couche de sécurité supplémentaire.
Lorsque vous vous connectez à l’aide du Kit de développement logiciel (SDK) Microsoft Graph PowerShell, spécifiez uniquement les étendues dont votre script a besoin. Cette pratique respecte le principe du moindre privilège et réduit les risques de sécurité. Gardez à l’esprit que les autorisations accordées à votre application s’appliquent à tous les utilisateurs de cette application ; examinez-les et gérez-les donc régulièrement.
Identité d’application dans Azure AD
Inscription d’une nouvelle application
Pour automatiser les tâches Microsoft 365 avec PowerShell et l’API Graph, vous devez d’abord inscrire une application dans Azure Active Directory (Azure AD). Cette application agit comme une identité que vos scripts utilisent pour accéder en toute sécurité à Microsoft Graph. Suivez ces étapes pour inscrire votre application :
- Ouvrez le portail Azure et accédez à Azure Active Directory > Inscriptions d’applications > Nouvelle inscription.
- Donnez à votre application un nom explicite, par exemple « My Graph Automation App ».
- Choisissez les types de comptes pris en charge :
- Locataire unique : seuls les utilisateurs de votre locataire Azure AD peuvent se connecter.
- Multilocataire : les utilisateurs de n’importe quel locataire Azure AD peuvent se connecter.
- Multilocataire et comptes personnels : inclut les utilisateurs Azure AD et les comptes Microsoft personnels.
- Définissez l’URI de redirection en fonction du type de votre application :
- Pour les applications web, utilisez une URL du type
https://yourapp.com/auth/callback. - Pour les applications monopage, utilisez
https://yourapp.com. - Pour les applications mobiles ou de bureau, utilisez
https://login.microsoftonline.com/common/oauth2/nativeclient.
- Pour les applications web, utilisez une URL du type
- Cliquez sur Inscrire pour créer votre application.
Cette opération crée une identité d’application unique dans votre locataire. Vous utiliserez cette identité pour demander des jetons et appeler l’API Microsoft Graph.
Configuration des autorisations d’API
Après avoir inscrit votre application, vous devez configurer les autorisations d’API dont elle a besoin. Ces autorisations déterminent ce que votre application peut consulter ou modifier dans Microsoft 365. Pour définir les autorisations :
- Dans l’inscription de votre application, accédez à Autorisations d’API > Ajouter une autorisation > Microsoft Graph.
- Choisissez Autorisations d’application si votre script s’exécute sans interface ou via un contexte d’identité managée, ou Autorisations déléguées s’il s’exécute de manière interactive.
- Sélectionnez les autorisations spécifiques dont votre application a besoin, par exemple
User.Read.AllouDirectory.Read.All. - Cliquez sur Ajouter des autorisations pour les appliquer.
⚠️ Appliquez systématiquement le principe du moindre privilège. N’attribuez que les autorisations dont votre application a besoin afin de réduire les risques de sécurité.
Certaines autorisations nécessitent un consentement administrateur avant que votre application puisse les utiliser. Vous pouvez accorder ce consentement en cliquant sur Accorder le consentement de l’administrateur pour [nom du locataire] dans le portail Azure. Examinez régulièrement les autorisations afin d’éviter de surdimensionner les privilèges de votre application.
Génération d’un secret client ou d’un certificat
Votre application a besoin d’identifiants pour s’authentifier de manière sécurisée auprès d’Azure AD, sauf si vous utilisez une identité managée. Vous pouvez utiliser soit un secret client, soit un certificat. Les deux méthodes prouvent l’identité de votre application lorsqu’elle demande des jetons.
| Méthode | Avantages | Inconvénients |
|---|---|---|
| Secret client | Facile à créer et à utiliser ; compatible avec de nombreux flux d’authentification. | Se comporte comme un mot de passe ; peut fuiter s’il n’est pas stocké de manière sécurisée ; aucune alerte automatique en cas de compromission. |
| Certificat | Plus sûr ; le certificat lui-même n’est pas envoyé lors de l’authentification ; permet une révocation immédiate. | Plus complexe à gérer ; nécessite un suivi rigoureux du cycle de vie. |
Pour créer un secret client, accédez à Certificats et secrets dans l’inscription de votre application, sélectionnez Nouveau secret client, ajoutez une description et définissez une période d’expiration. Pour les certificats, importez un fichier de certificat valide dans la même section.
Acquisition de jetons d’accès
Comprendre OAuth 2.0
OAuth 2.0 joue un rôle essentiel pour sécuriser votre accès à l’API Microsoft Graph lorsque vous utilisez PowerShell + Graph API. Il agit comme un gardien de confiance qui permet à vos applications de s’authentifier en toute sécurité et d’obtenir des jetons d’accès. Ces jetons servent de clés numériques, accordant à vos scripts l’autorisation d’appeler les points de terminaison de Microsoft Graph sans exposer directement vos identifiants.
Pour utiliser OAuth 2.0, vous devez d’abord inscrire votre application dans Azure Active Directory (Azure AD). Cette inscription fournit des identifiants client, tels qu’un identifiant d’application et un secret ou un certificat. Lorsque votre script demande un jeton d’accès, il présente ces identifiants à Azure AD. Azure AD vérifie alors votre identité et émet un jeton à courte durée de vie. Votre script inclut ce jeton dans les requêtes API pour prouver qu’il a le droit d’accéder aux ressources demandées.
Ce processus garantit un accès sécurisé et contrôlé aux données Microsoft 365. Il permet également des autorisations fines, de sorte que vos scripts n’obtiennent que l’accès dont ils ont besoin. En suivant les standards OAuth 2.0, vous protégez votre environnement contre les accès non autorisés tout en permettant une automatisation puissante avec PowerShell + Graph API.
Utiliser PowerShell pour les demandes de jetons
Vous pouvez acquérir des jetons d’accès à l’aide de plusieurs flux d’authentification adaptés à différents scénarios. Chaque flux établit un équilibre différent entre sécurité et facilité d’utilisation. L’API Microsoft Graph prend en charge les flux courants suivants :
- Flux de code d’appareil : idéal pour les appareils ou les scripts sans navigateur ni possibilité de saisie. Vous vous authentifiez sur un autre appareil, ce qui le rend sûr et convivial.
- Flux basé sur certificat : conçu pour l’automatisation sans interface, ce flux utilise des certificats au lieu de mots de passe, renforçant la sécurité des scripts non supervisés.
- Flux d’identité managée : particulièrement adapté aux environnements cloud natifs comme Azure Functions ou les machines virtuelles, ce flux exploite les identités managées d’Azure pour obtenir des jetons sans stocker de secrets.
Flux de code d’appareil
Le flux de code d’appareil convient parfaitement lorsque vous exécutez des scripts en local ou sur des appareils sans moyen de saisie aisé. Il vous permet de vous authentifier de manière interactive sur un autre appareil, comme votre téléphone ou le navigateur de votre PC.
Voici comment utiliser le flux de code d’appareil avec PowerShell :
- Exécutez la commande suivante pour démarrer l’authentification par code d’appareil :
Connect-MgGraph -Scopes "User.Read.All" -DeviceCode - PowerShell affiche un code et une URL. Ouvrez l’URL dans votre navigateur, sur n’importe quel appareil.
- Saisissez le code affiché dans PowerShell et connectez-vous avec votre compte Microsoft 365.
- Une fois l’authentification réussie, PowerShell obtient un jeton d’accès et connecte votre session.
💡 Le flux de code d’appareil équilibre sécurité et facilité d’utilisation. Il évite d’intégrer des identifiants dans les scripts et convient bien aux tâches manuelles ou semi-automatisées.
Flux basé sur certificat
Le flux basé sur certificat convient aux scripts automatisés s’exécutant sans interaction utilisateur. Au lieu d’un secret client, vous utilisez un certificat pour prouver l’identité de votre application. Cette méthode réduit les risques liés à la fuite de secrets.
Pour utiliser ce flux, suivez ces étapes :
- Inscrivez votre application dans Azure AD et importez un certificat sous Certificats et secrets.
- Stockez le certificat en toute sécurité sur la machine qui exécute votre script.
- Utilisez PowerShell pour demander un jeton en indiquant l’empreinte numérique du certificat, l’ID client et l’ID du locataire.
Voici un exemple simplifié de la manière d’obtenir un jeton à l’aide d’un certificat dans PowerShell :
$tenantId = "YOUR_TENANT_ID"
$clientId = "YOUR_CLIENT_ID"
$certThumbprint = "YOUR_CERT_THUMBPRINT"
$cert = Get-Item Cert:\CurrentUser\My\$certThumbprint
$body = @{
grant_type = "client_credentials"
client_id = $clientId
scope = "https://graph.microsoft.com/.default"
client_assertion_type = "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"
client_assertion = New-JwtToken -Certificate $cert -TenantId $tenantId -ClientId $clientId
}
$tokenResponse = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Body $body
$accessToken = $tokenResponse.access_token⚠️ La gestion des certificats exige de la prudence. Protégez les clés privées et renouvelez régulièrement les certificats pour maintenir la sécurité.
Flux d’identité managée
Le flux d’identité managée convient particulièrement bien lorsque vous exécutez des scripts PowerShell et Graph API dans des services Azure tels qu’Azure Virtual Machines, Azure Functions ou Azure Automation. Azure attribue automatiquement une identité à votre ressource, ce qui vous dispense de gérer manuellement les identifiants.
Pour obtenir un jeton d’accès à l’aide de l’identité managée, procédez comme suit :
- Activez l’identité managée (attribuée par le système ou par l’utilisateur) sur votre ressource Azure.
- Attribuez les autorisations Microsoft Graph API nécessaires à cette identité dans Azure AD, via Microsoft Graph PowerShell ou Graph Explorer.
- Utilisez PowerShell pour demander un jeton au service local de métadonnées d’instance Azure (IMDS).
Exemple d’extrait PowerShell pour obtenir un jeton via l’identité managée :
$resource = "https://graph.microsoft.com"
$tokenAuthUri = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=$resource"
$headers = @{ Metadata = "true" }
$response = Invoke-RestMethod -Method Get -Uri $tokenAuthUri -Headers $headers
$accessToken = $response.access_token🔐 Le flux d’identité managée élimine le besoin de stocker des secrets dans vos scripts. Il offre une authentification sécurisée et transparente dans les environnements Azure.
Effectuer des appels d’API avec PowerShell + Graph API

Effectuer des appels d’API avec PowerShell + Graph API vous permet d’interagir efficacement avec les services Microsoft 365. Comprendre comment construire des requêtes HTTP est essentiel pour une communication réussie avec l’API.
Construction des requêtes HTTP
Lorsque vous interagissez avec l’API Microsoft Graph, vous devez construire correctement vos requêtes HTTP. Voici les composants clés d’une requête HTTP :
- Récupération du jeton d’accès : utilisez le jeton obtenu dans l’en-tête.
- Configuration des en-têtes : définissez les en-têtes nécessaires, notamment
Content-Type: application/jsonetAuthorization: Bearer $accessToken. - Requête GET/POST : effectuez une requête explicite vers le point de terminaison Microsoft Graph API souhaité.
Utiliser Invoke-RestMethod
L’applet de commande Invoke-RestMethod simplifie la communication avec l’API Microsoft Graph. Elle vous permet d’envoyer des requêtes HTTP et de recevoir les réponses de manière directe. Voici un aperçu rapide de son comportement et de ses limites :
| Limite / Facteur | Description |
|---|---|
| Nombre maximal de résultats par appel | Microsoft recommande de demander moins de 120 résultats par appel sur les points de terminaison lourds afin d’éviter les erreurs. |
| Gestion des erreurs | L’applet de commande peut renvoyer une erreur 400 Bad Request si la syntaxe du filtre de requête est incorrecte. |
| Performance | La récupération des journaux d’annuaire ou des données d’activité de connexion peut être gourmande en ressources, d’où la nécessité d’une pagination appropriée. |
Points de terminaison d’API courants
Plusieurs points de terminaison de Microsoft Graph API sont fréquemment utilisés pour les tâches de gestion de Microsoft 365. Voici les plus courants :
| Point de terminaison | Cas d’utilisation |
|---|---|
| Get Office 365 Groups Activity Counts | Établir un rapport sur les groupes Microsoft 365 et identifier les collaborations actives. |
| List Plans for a Group | Trouver les plans associés à un groupe Microsoft 365. |
| Post Conversations | Démarrer une nouvelle conversation au sein d’un groupe Microsoft 365. |
| Get Default Notebook | Récupérer le bloc-notes par défaut d’un groupe. |
Gestion de la sortie de l’API
Comprendre les réponses JSON
Lorsque vous interagissez avec l’API Microsoft Graph, celle-ci renvoie les données au format JSON. JSON (JavaScript Object Notation) est léger et facile à lire. Comprendre les réponses JSON est essentiel pour manipuler efficacement les données. Une réponse JSON typique se présente comme suit :
{
"id": "1",
"displayName": "John Doe",
"mail": "john.doe@example.com"
}Convertir du JSON en objets PowerShell
Pour travailler avec des données JSON dans PowerShell, vous devez les convertir en objets PowerShell. Cette conversion vous permet de manipuler les données facilement. Vous pouvez utiliser l’applet de commande ConvertFrom-Json à cet effet. Voici son fonctionnement :
$jsonData = '{"id": "1", "displayName": "John Doe", "mail": "john.doe@example.com"}'
$powerShellObject = $jsonData | ConvertFrom-JsonDésormais, $powerShellObject contient des propriétés auxquelles vous pouvez accéder directement, comme $powerShellObject.displayName.
Filtrer et mettre en forme les données
Une fois vos données disponibles sous forme d’objets PowerShell, vous pouvez les filtrer et les mettre en forme selon vos besoins. PowerShell propose diverses techniques pour affiner le résultat de vos données. Par exemple, vous pouvez utiliser des paramètres de requête OData lors des appels à l’API pour filtrer directement les résultats depuis l’API Microsoft Graph.
| Paramètre de requête | Description | Exemple |
|---|---|---|
| $expand | Renvoie les ressources associées. | /groups?$expand=members |
| $filter | Filtre les résultats (lignes). | /users?$filter=startswith(givenName,'J') |
| $orderby | Trie les résultats. | /users?$orderby=displayName desc |
| $select | Filtre les propriétés (colonnes). | /users?$select=givenName,surname |
| $top | Définit la taille de page des résultats. | /users?$top=2 |
Exporter les résultats
Exporter les résultats de vos scripts PowerShell est indispensable pour une gestion efficace des données. Vous pouvez enregistrer votre sortie dans différents formats, tels que CSV, JSON ou XML. Par exemple, vous pouvez exporter les détails des utilisateurs de cette manière :
$users = Get-MgUser -All
$users | Select-Object DisplayName, Mail | Export-Csv -Path "Users.csv" -NoTypeInformationBonnes pratiques et dépannage
Gérer les erreurs et les limites d’API
Lorsque vous travaillez avec l’API Microsoft Graph, les erreurs proviennent souvent de paramètres propres au locataire ou de problèmes d’autorisations. Beaucoup d’utilisateurs exécutent des scripts téléchargés sur Internet sans les adapter à leur environnement, ce qui provoque des échecs. Par ailleurs, Microsoft Graph applique des limites de débit pour protéger ses services. Si votre script envoie trop de requêtes en peu de temps, l’API renvoie un code d’état 429. Vous devez respecter l’en-tête Retry-After et attendre le délai indiqué avant de relancer la requête.
| Périmètre | Type | Limite | Remarques |
|---|---|---|---|
| Global (tous les services) | Tous | 130 000 par période de 10 secondes et par application | Plafond absolu pour l’ensemble des services Graph |
| Intune (général) | Tous | 1 000 par application et par locataire toutes les 20 secondes | Limite de votre application pour l’ensemble des opérations |

Sécuriser les identifiants
La protection de vos identifiants est essentielle lorsque vous automatisez des tâches Microsoft 365. Utilisez des inscriptions d’applications et des identités managées pour créer des identités sécurisées pour vos applications. Évitez autant que possible de stocker les secrets client en clair dans vos scripts.
Optimiser les scripts
Des scripts efficaces permettent de gagner du temps et de réduire la consommation de ressources. Utilisez la récupération sélective des propriétés en appliquant le paramètre de requête $select, exploitez les mécanismes de traitement par lots et concevez vos boucles d’automatisation avec des gestionnaires de pagination bien structurés.
Maîtriser les flux d’identité managée avec PowerShell et l’API Microsoft Graph transforme fondamentalement votre approche de l’automatisation cloud. En supprimant les secrets statiques et en adoptant des identités natives du cloud, vous construisez des flux de travail résilients et hautement sécurisés, qui protègent votre entreprise. Pour en savoir plus sur ces stratégies et écouter des échanges pratiques sur l’administration cloud moderne, n’hésitez pas à écouter l’épisode associé : Use Managed Identity with PowerShell for Microsoft Graph. Testez ces exemples dès aujourd’hui dans votre locataire de test et passez votre cadre d’automatisation au niveau supérieur !
Questions fréquentes
Qu’est-ce que PowerShell ?
PowerShell est un cadre d’automatisation des tâches développé par Microsoft, qui associe un interpréteur de commandes et un langage de script afin de simplifier l’administration système et les opérations cloud.
Qu’est-ce que l’API Microsoft Graph ?
L’API Microsoft Graph est un point de terminaison RESTful unifié permettant d’accéder aux données et aux services de Microsoft 365, notamment les utilisateurs, les groupes, la messagerie et les configurations de l’annuaire.
Comment installer le module Microsoft Graph PowerShell ?
Vous pouvez installer le module en exécutant Install-Module Microsoft.Graph -Scope CurrentUser dans votre environnement PowerShell 7.
Qu’est-ce que les autorisations déléguées et les autorisations d’application ?
Les autorisations déléguées permettent à votre application d’agir au nom d’un utilisateur connecté, tandis que les autorisations d’application autorisent une exécution en arrière-plan sans contexte utilisateur actif.
Comment gérer les limites de débit de l’API ?
Vérifiez systématiquement la valeur de l’en-tête Retry-After lorsque vous recevez un code d’état 429, et implémentez une logique de nouvelle tentative avec backoff exponentiel dans vos scripts.
Qu’est-ce qu’OAuth 2.0 ?
OAuth 2.0 est un cadre d’autorisation qui permet aux applications d’obtenir en toute sécurité des jetons d’accès pour appeler des API protégées, sans exposer les identifiants sous-jacents de l’utilisateur.
Puis-je utiliser PowerShell sous Linux ?
Oui ! PowerShell est entièrement multiplateforme et fonctionne nativement sous Windows, macOS et Linux.
Comment exporter des données depuis PowerShell ?
Vous pouvez exporter facilement des données structurées à l’aide d’applets de commande comme Export-Csv ou ConvertTo-Json, selon les exigences de votre format de rapport.