Managed Identity-flow beheersen met PowerShell en Microsoft Graph
By Mirko Peters ·
Welkom terug bij de podcastblog! Als je ooit last hebt gehad van hardgecodeerde wachtwoorden, lastige clientgeheimen die je moet beheren, of zorgen over lekkende inloggegevens in je geautomatiseerde scripts, ben je hier aan het juiste adres.
Automatically translated with AI from the original post. Read the English original
Welkom terug bij de podcastblog! Als je ooit last hebt gehad van hardgecodeerde wachtwoorden, lastige clientgeheimen die je moet beheren, of zorgen over inloggegevens die lekken uit je geautomatiseerde scripts, ben je hier aan het juiste adres. Cloudautomatisering vraagt om een andere manier van denken over beveiliging. De tijd dat beheerders inloggegevens veilig in platte-tekstconfiguratiebestanden of omgevingsvariabelen konden verstoppen zonder over hun schouder te kijken, is voorbij. Vandaag duiken we diep in de wereld van cloudnative authenticatie. We kijken specifiek naar hoe je de managed identities van Azure in je PowerShell-scripts kunt gebruiken om je veilig aan te melden bij Microsoft Graph, zonder gevoelige inloggegevens op te slaan.
Het automatiseren van je Microsoft 365-omgeving is niet langer een prettige extra vaardigheid; het is een absolute operationele noodzaak. Het combineren van PowerShell met de Microsoft Graph API kan echter soms aanvoelen als navigeren door een doolhof van machtigingsvragen, throttlinglimieten en complexe tokenverkrijgingsflows. Door onze denkwijze te verschuiven naar moderne, identiteitsgerichte workflows kunnen we het beheer van inloggegevens voor workloads die in Azure draaien volledig elimineren. In deze post behandelen we de essentiële onderdelen van cloudnative authenticatie. We lopen de voorvereisten door, app-registraties in Azure AD, tokenverkrijgingsflows en scriptoptimalisatie. Wil je deze workflow nog verder uitdiepen? Luister dan zeker naar onze bijbehorende podcastaflevering: Use Managed Identity with PowerShell for Microsoft Graph.
Voorvereisten voor PowerShell + Graph API
Voordat je begint met het automatiseren van Microsoft 365-taken met PowerShell en de Graph API, moet je je systeem en omgeving goed voorbereiden. Deze voorbereiding zorgt voor een soepele uitvoering en veilige toegang tot Microsoft Graph-resources.
PowerShell-modules installeren
Je moet de juiste PowerShell-modules installeren om met de Microsoft Graph API te kunnen werken. De Microsoft Graph PowerShell SDK biedt alle benodigde cmdlets voor deze integratie. Om fouten te voorkomen, controleer je of je systeem aan deze minimumvereisten voldoet:
| Vereiste | Beschrijving |
|---|---|
| PowerShell-versie | PowerShell versie 7 of hoger is vereist voor moderne cloudscripting. |
| .NET Framework | .NET Framework 4.7.2 of later is nodig, vooral in Windows-omgevingen. |
| PowerShellGet | Werk PowerShellGet bij naar de nieuwste versie voor stabiel modulebeheer. |
| Uitvoeringsbeleid | Stel het uitvoeringsbeleid in op RemoteSigned of minder restrictief zodat scripts geïmporteerd kunnen worden. |
Je kunt PowerShellGet bijwerken door Install-Module PowerShellGet -Force uit te voeren en het uitvoeringsbeleid instellen met Set-ExecutionPolicy RemoteSigned. Installeer daarna de Microsoft Graph-module met:
Install-Module Microsoft.Graph -Scope CurrentUserDit commando downloadt de nieuwste stabiele versie van de module, zodat je eenvoudig Microsoft Graph-endpoints kunt aanroepen.
Microsoft 365-omgeving instellen
Het correct configureren van je Microsoft 365-omgeving is cruciaal voor automatisering. Volg deze stappen om te beginnen:
- Controleer of je systeem aan de vereisten voldoet: PowerShell 7.2 of hoger, .NET Framework 4.7.2 of nieuwer, en de nieuwste PowerShellGet-module.
- Installeer de Microsoft Graph PowerShell-module zoals hierboven getoond.
- Maak verbinding met je Microsoft 365-tenant door de module te importeren en je aan te melden met de benodigde scopes. Bijvoorbeeld:
Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.ReadWrite.All"Dit commando vraagt je om in te loggen en geeft je sessie machtigingen om gebruikers- en directorygegevens te lezen en te schrijven. Je kunt de scopes aanpassen aan de behoeften van je automatisering.
Machtigingen en scopes begrijpen
Machtigingen en scopes bepalen wat je scripts in Microsoft 365 kunnen openen of wijzigen. De Microsoft Graph API gebruikt twee hoofdtypen machtigingen:
- Gedelegeerde machtigingen: Deze gelden wanneer je scripts uitvoert als aangemelde gebruiker. Ze beperken de toegang tot gegevens die de gebruiker bezit of kan benaderen.
- Toepassingsmachtigingen: Deze geven je app of script toegang tot gegevens binnen de hele organisatie, zonder aangemelde gebruiker. Dat is typisch voor achtergrondautomatisering en beheerde identiteitsstromen.
Veelgebruikte machtigingen zijn *.Read.All voor alleen-lezen toegang en *.ReadWrite.All voor volledige lees- en schrijfrechten. Met SecurityActions.Read.All kun je bijvoorbeeld beveiligingsacties bekijken, terwijl SecurityActions.ReadWrite.All je ze ook laat wijzigen.
Toepassingsmachtigingen vereisen toestemming van een beheerder. Een tenantbeheerder moet deze machtigingen goedkeuren om de beveiliging te waarborgen. Daarnaast hebben gebruikers de juiste Microsoft Entra-rollen nodig, zoals Security Reader, om toegang te krijgen tot gevoelige gegevens. Deze op rollen gebaseerde toegang vormt een extra beveiligingslaag.
Wanneer je verbinding maakt via de Microsoft Graph PowerShell SDK, geef dan alleen de scopes op die je script nodig heeft. Dit volgt het principe van least privilege en verkleint de beveiligingsrisico's. Houd er rekening mee dat machtigingen die aan je app zijn toegekend, gelden voor alle gebruikers van die app. Controleer en beheer ze daarom regelmatig.
App-identiteit in Azure AD
Een nieuwe app registreren
Om Microsoft 365-taken te automatiseren met PowerShell en de Graph API, moet je eerst een toepassing registreren in Azure Active Directory (Azure AD). Deze app fungeert als identiteit waarmee je scripts veilig toegang krijgen tot Microsoft Graph. Volg deze stappen om je app te registreren:
- Open de Azure-portal en ga naar Azure Active Directory > App-registraties > Nieuwe registratie.
- Geef je app een duidelijke naam, zoals “My Graph Automation App”.
- Kies de ondersteunde accounttypen:
- Eén tenant: alleen gebruikers in je Azure AD-tenant kunnen zich aanmelden.
- Meerdere tenants: gebruikers uit elke Azure AD-tenant kunnen zich aanmelden.
- Meerdere tenants en persoonlijke accounts: omvat Azure AD-gebruikers en persoonlijke Microsoft-accounts.
- Stel de omleidings-URI in op basis van je app-type:
- Gebruik voor webapps een URL zoals
https://yourapp.com/auth/callback. - Gebruik voor single-page apps
https://yourapp.com. - Gebruik voor mobiele of desktop-apps
https://login.microsoftonline.com/common/oauth2/nativeclient.
- Gebruik voor webapps een URL zoals
- Klik op Registreren om je app aan te maken.
Dit proces maakt een unieke toepassingsidentiteit in je tenant aan. Met deze identiteit vraag je tokens aan en roep je de Microsoft Graph API aan.
API-machtigingen configureren
Nadat je je app hebt geregistreerd, moet je de API-machtigingen instellen die de app nodig heeft. Deze machtigingen bepalen wat je app in Microsoft 365 mag benaderen of wijzigen. Zo stel je machtigingen in:
- Ga in je app-registratie naar API-machtigingen > Een machtiging toevoegen > Microsoft Graph.
- Kies Toepassingsmachtigingen als je script headless of via een beheerde identiteit draait, of Gedelegeerde machtigingen als het interactief draait.
- Selecteer de specifieke machtigingen die je app nodig heeft, zoals
User.Read.AllofDirectory.Read.All. - Klik op Machtigingen toevoegen om ze toe te passen.
⚠️ Pas altijd het principe van least privilege toe. Ken alleen de machtigingen toe die je app nodig heeft om beveiligingsrisico's te beperken.
Sommige machtigingen vereisen toestemming van een beheerder voordat je app ze kan gebruiken. Je kunt die toestemming verlenen door in de Azure-portal op Beheerderstoestemming verlenen voor [tenantnaam] te klikken. Controleer machtigingen regelmatig om te voorkomen dat je app meer rechten heeft dan nodig.
Clientgeheim of certificaat genereren
Je app heeft referenties nodig om zich veilig bij Azure AD te authenticeren, tenzij je een beheerde identiteit gebruikt. Je kunt een clientgeheim of een certificaat gebruiken. Beide methoden bewijzen de identiteit van je app wanneer er tokens worden aangevraagd.
| Methode | Voordelen | Nadelen |
|---|---|---|
| Clientgeheim | Eenvoudig aan te maken en te gebruiken; werkt met veel authenticatiestromen. | Werkt als een wachtwoord; kan lekken als het niet veilig wordt opgeslagen; geen automatische melding bij compromittering. |
| Certificaat | Veiliger; het eigenlijke certificaat wordt niet verzonden tijdens authenticatie; ondersteunt directe intrekking. | Complexer om te beheren; vereist een robuuste levenscyclusbewaking. |
Om een clientgeheim aan te maken, ga je in je app-registratie naar Certificaten en geheimen, selecteer je Nieuw clientgeheim, voeg je een beschrijving toe en stel je een vervaldatum in. Voor certificaten upload je een geldig certificaatbestand onder dezelfde sectie.
Toegangstokens verkrijgen
OAuth 2.0 begrijpen
OAuth 2.0 speelt een cruciale rol bij het beveiligen van je toegang tot de Microsoft Graph API wanneer je PowerShell + Graph API gebruikt. Het fungeert als een betrouwbare poortwachter waarmee je applicaties veilig kunnen authenticeren en toegangstokens kunnen verkrijgen. Deze tokens werken als digitale sleutels en geven je scripts toestemming om Microsoft Graph-eindpunten aan te roepen zonder dat je inloggegevens rechtstreeks worden blootgesteld.
Om OAuth 2.0 te gebruiken, moet je eerst je applicatie registreren in Azure Active Directory (Azure AD). Bij deze registratie krijg je clientreferenties, zoals een application-ID en een geheim of certificaat. Wanneer je script een toegangstoken aanvraagt, legt het deze referenties voor aan Azure AD. Azure AD verifieert vervolgens je identiteit en geeft een tijdelijk geldig token uit. Je script voegt dit token toe aan API-aanvragen om aan te tonen dat het toegang heeft tot de gevraagde resources.
Dit proces zorgt voor veilige, gecontroleerde toegang tot Microsoft 365-gegevens. Het ondersteunt ook fijnmazige machtigingen, zodat je scripts alleen de toegang krijgen die ze nodig hebben. Door de OAuth 2.0-standaarden te volgen, bescherm je je omgeving tegen ongeautoriseerde toegang en maak je tegelijkertijd krachtige automatisering met PowerShell + Graph API mogelijk.
Tokenaanvragen doen met PowerShell
Je kunt toegangstokens verkrijgen via verschillende authenticatiestromen, elk afgestemd op een ander scenario. Elke stroom vindt een andere balans tussen beveiliging en gebruiksgemak. Microsoft Graph API ondersteunt de volgende veelgebruikte stromen:
- Device Code Flow: ideaal voor apparaten of scripts zonder browser of invoermogelijkheden. Je authenticeert op een apart apparaat, wat veilig en gebruiksvriendelijk is.
- Certificaatgebaseerde flow: ontworpen voor headless automatisering; deze flow gebruikt certificaten in plaats van wachtwoorden, wat de beveiliging van scripts zonder toezicht verbetert.
- Managed Identity-flow: het beste voor cloudnative omgevingen zoals Azure Functions of virtuele machines; deze flow maakt gebruik van de beheerde identiteiten van Azure om tokens te verkrijgen zonder geheimen op te slaan.
Device Code Flow
Device Code Flow werkt goed wanneer je scripts lokaal of op apparaten zonder eenvoudige invoermogelijkheden uitvoert. Hiermee authenticeer je interactief op een ander apparaat, zoals je telefoon of de browser van je pc.
Zo gebruik je Device Code Flow met PowerShell:
- Voer de volgende opdracht uit om de device code-authenticatie te starten:
Connect-MgGraph -Scopes "User.Read.All" -DeviceCode - PowerShell toont een code en een URL. Open de URL in je browser op een willekeurig apparaat.
- Voer de code in die in PowerShell wordt getoond en meld je aan met je Microsoft 365-account.
- Na geslaagde authenticatie haalt PowerShell een toegangstoken op en koppelt het je sessie.
💡 Device Code Flow vindt een balans tussen beveiliging en gebruiksgemak. Het voorkomt dat inloggegevens in scripts worden opgenomen en werkt goed voor handmatige of semi-geautomatiseerde taken.
Certificaatgebaseerde flow
Certificaatgebaseerde flow is geschikt voor geautomatiseerde scripts die zonder gebruikersinteractie draaien. In plaats van een clientgeheim gebruik je een certificaat om de identiteit van je app aan te tonen. Deze methode verkleint de risico's die samenhangen met gelekte geheimen.
Volg deze stappen om deze flow te gebruiken:
- Registreer je app in Azure AD en upload een certificaat onder Certificaten en geheimen.
- Sla het certificaat veilig op op de computer waarop je script draait.
- Gebruik PowerShell om een token aan te vragen door de certificaatvingerafdruk, client-ID en tenant-ID op te geven.
Hieronder staat een vereenvoudigd voorbeeld van hoe je met een certificaat in PowerShell een token ophaalt:
$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⚠️ Het beheren van certificaten vraagt om zorg. Bescherm private sleutels en vernieuw certificaten regelmatig om de beveiliging op peil te houden.
Managed Identity-flow
De Managed Identity-flow werkt het best wanneer je PowerShell- en Graph API-scripts uitvoert binnen Azure-services, zoals Azure Virtual Machines, Azure Functions of Azure Automation. Azure wijst automatisch een identiteit toe aan je resource, zodat je zelf geen referenties hoeft te beheren.
Volg deze stappen om met Managed Identity een toegangstoken op te halen:
- Schakel Managed Identity (systeemtoegewezen of gebruikerstoegewezen) in op je Azure-resource.
- Ken de benodigde Microsoft Graph API-machtigingen toe aan deze identiteit in Azure AD via Microsoft Graph PowerShell of Graph Explorer.
- Gebruik PowerShell om een token op te vragen bij de lokale Azure Instance Metadata Service (IMDS).
Voorbeeld van een PowerShell-snippet om via Managed Identity een token op te halen:
$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🔐 De Managed Identity-flow maakt het opslaan van geheimen in je scripts overbodig. Het biedt veilige, naadloze authenticatie binnen Azure-omgevingen.
API-aanroepen maken met PowerShell + Graph API

API-aanroepen maken met PowerShell + Graph API geeft je de mogelijkheid om effectief met Microsoft 365-diensten te werken. Weten hoe je HTTP-verzoeken opbouwt, is essentieel voor een succesvolle communicatie met de API.
HTTP-verzoeken opbouwen
Wanneer je met de Microsoft Graph API werkt, moet je HTTP-verzoeken correct opbouwen. Dit zijn de belangrijkste onderdelen van een HTTP-verzoek:
- Ophalen van het toegangstoken: gebruik je verkregen token in de header.
- Headers instellen: stel de benodigde headers in, inclusief
Content-Type: application/jsonenAuthorization: Bearer $accessToken. - GET/POST-verzoek: doe een expliciet verzoek naar het gewenste Microsoft Graph API-eindpunt.
Invoke-RestMethod gebruiken
De cmdlet Invoke-RestMethod vereenvoudigt de communicatie met de Microsoft Graph API. Je kunt er HTTP-verzoeken mee versturen en op een eenvoudige manier antwoorden ontvangen. Hieronder volgt een kort overzicht van het gedrag en de beperkingen:
| Beperking / factor | Beschrijving |
|---|---|
| Maximaal aantal resultaten per aanroep | Microsoft raadt aan om bij zware eindpunten minder dan 120 resultaten per aanroep op te vragen om fouten te voorkomen. |
| Foutafhandeling | De cmdlet kan een 400 Bad Request-fout teruggeven als de syntaxis van het queryfilter onjuist is. |
| Prestaties | Het ophalen van directory-logboeken of gegevens over aanmeldingsactiviteit kan veel resources kosten, vandaar dat goede paginering nodig is. |
Veelgebruikte API-eindpunten
Een aantal Microsoft Graph API-eindpunten wordt vaak gebruikt voor beheertaken binnen Microsoft 365. Dit zijn enkele van de meest voorkomende:
| Eindpunt | Toepassing |
|---|---|
| Get Office 365 Groups Activity Counts | Een rapport draaien over Microsoft 365-groepen en actieve samenwerkingen identificeren. |
| List Plans for a Group | De plannen vinden die bij een Microsoft 365-groep horen. |
| Post Conversations | Een nieuwe conversatie starten binnen een Microsoft 365-groep. |
| Get Default Notebook | Het standaardnotitieboek van een groep ophalen. |
API-output beheren
JSON-antwoorden begrijpen
Wanneer je met de Microsoft Graph API werkt, retourneert deze gegevens in JSON-formaat. JSON (JavaScript Object Notation) is lichtgewicht en eenvoudig te lezen. Het begrijpen van JSON-antwoorden is cruciaal voor het effectief bewerken van gegevens. Een typisch JSON-antwoord ziet er als volgt uit:
{
"id": "1",
"displayName": "John Doe",
"mail": "john.doe@example.com"
}JSON omzetten naar PowerShell-objecten
Om met JSON-gegevens in PowerShell te werken, moet je deze omzetten naar PowerShell-objecten. Deze conversie maakt het eenvoudig om de gegevens te bewerken. Hiervoor gebruik je de cmdlet ConvertFrom-Json. Dit is hoe het werkt:
$jsonData = '{"id": "1", "displayName": "John Doe", "mail": "john.doe@example.com"}'
$powerShellObject = $jsonData | ConvertFrom-JsonNu bevat $powerShellObject eigenschappen waar je direct bij kunt, zoals $powerShellObject.displayName.
Gegevens filteren en opmaken
Zodra je gegevens in PowerShell-objecten staan, kun je ze filteren en opmaken naar wat je nodig hebt. PowerShell biedt verschillende technieken om je gegevensuitvoer te verfijnen. Bij het aanroepen van API's kun je bijvoorbeeld OData-queryparameters gebruiken om resultaten direct vanuit de Microsoft Graph API te filteren.
| Queryparameter | Beschrijving | Voorbeeld |
|---|---|---|
| $expand | Retourneert gerelateerde resources. | /groups?$expand=members |
| $filter | Filtert resultaten (rijen). | /users?$filter=startswith(givenName,'J') |
| $orderby | Sorteert resultaten. | /users?$orderby=displayName desc |
| $select | Filtert eigenschappen (kolommen). | /users?$select=givenName,surname |
| $top | Stelt het paginaformaat van resultaten in. | /users?$top=2 |
Resultaten exporteren
Het exporteren van resultaten uit je PowerShell-scripts is essentieel voor goed gegevensbeheer. Je kunt je uitvoer opslaan in verschillende formaten, zoals CSV, JSON of XML. Zo kun je bijvoorbeeld gebruikersgegevens als volgt exporteren:
$users = Get-MgUser -All
$users | Select-Object DisplayName, Mail | Export-Csv -Path "Users.csv" -NoTypeInformationBest practices en probleemoplossing
Fouten en API-limieten afhandelen
Bij het werken met de Microsoft Graph API ontstaan fouten vaak door tenantspecifieke instellingen of machtigingsproblemen. Veel gebruikers draaien scripts die van internet zijn gedownload zonder ze aan te passen aan hun omgeving, waardoor ze mislukken. Daarnaast past Microsoft Graph limieten voor het aantal aanvragen toe om de services te beschermen. Als je script te veel aanvragen te snel verstuurt, retourneert de API een statuscode 429. Respecteer de Retry-After-header en wacht de voorgestelde tijd voordat je opnieuw probeert.
| Bereik | Type | Limiet | Opmerkingen |
|---|---|---|---|
| Globaal (alle services) | Alle | 130.000 per 10 seconden per app | Absoluut maximum voor alle Graph-services |
| Intune (algemeen) | Alle | 1.000 per app per tenant per 20 seconden | Limiet van je app voor alle bewerkingen |

Credentials beveiligen
Het beschermen van je credentials is cruciaal bij het automatiseren van Microsoft 365-taken. Gebruik app-registraties en beheerde identiteiten om veilige identiteiten voor je applicaties te maken. Vermijd waar mogelijk het opslaan van clientgeheimen in platte tekst in je scripts.
Scripts optimaliseren
Efficiënte scripts besparen tijd en beperken het resourcegebruik. Gebruik selectief ophalen van eigenschappen door de queryparameter $select toe te passen, maak gebruik van batchverwerking en ontwerp je automatiseringslussen met goed opgezette paginering.
Met beheerde identiteitsstromen in PowerShell en de Microsoft Graph API pak je cloudautomatisering fundamenteel anders aan. Door statische geheimen te verwijderen en cloudnative identiteiten te omarmen, bouw je veerkrachtige, zeer veilige workflows die je organisatie beschermen. Wil je meer horen over deze strategieën en praktische discussies over moderne cloudbeheer beluisteren? Bekijk dan zeker onze gerelateerde aflevering: Use Managed Identity with PowerShell for Microsoft Graph. Probeer deze voorbeelden vandaag nog uit in je sandbox-tenant en til je automatiseringsframework naar het volgende niveau!
Veelgestelde vragen
Wat is PowerShell?
PowerShell is een taakautomatiseringsframework van Microsoft dat een opdrachtregelshell combineert met een scripttaal om systeembeheer en cloudbewerkingen te stroomlijnen.
Wat is de Microsoft Graph API?
De Microsoft Graph API is een uniform RESTful-eindpunt voor toegang tot gegevens en services binnen Microsoft 365, waaronder gebruikers, groepen, e-mail en directoryconfiguraties.
Hoe installeer ik de Microsoft Graph PowerShell-module?
Je installeert de module door Install-Module Microsoft.Graph -Scope CurrentUser uit te voeren in je PowerShell 7-omgeving.
Wat zijn gedelegeerde en applicatiemachtigingen?
Gedelegeerde machtigingen stellen je app in staat te handelen namens een aangemeld gebruiker, terwijl applicatiemachtigingen achtergronduitvoering mogelijk maken zonder actieve gebruikerscontext.
Hoe ga ik om met API-limieten?
Controleer bij elke 429-statuscode altijd de headers van het antwoord op de waarde van Retry-After, en implementeer in je scripts exponentiële backoff-logica voor opnieuw proberen.
Wat is OAuth 2.0?
OAuth 2.0 is een autorisatieframework waarmee applicaties veilig toegangstokens kunnen verkrijgen om beschermde API's aan te roepen, zonder de onderliggende gebruikersgegevens bloot te geven.
Kan ik PowerShell op Linux gebruiken?
Ja! PowerShell is volledig cross-platform en draait native op Windows, macOS en Linux.
Hoe exporteer ik gegevens vanuit PowerShell?
Je kunt gestructureerde gegevens eenvoudig exporteren met cmdlets zoals Export-Csv of ConvertTo-Json, afhankelijk van de eisen die je aan je rapportageformaat stelt.