M365Con 2027 – gratis online conferentie · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Managed Identity-flow beheersen met PowerShell en Microsoft Graph

By ·

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:

VereisteBeschrijving
PowerShell-versiePowerShell versie 7 of hoger is vereist voor moderne cloudscripting.
.NET Framework.NET Framework 4.7.2 of later is nodig, vooral in Windows-omgevingen.
PowerShellGetWerk PowerShellGet bij naar de nieuwste versie voor stabiel modulebeheer.
UitvoeringsbeleidStel 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 CurrentUser

Dit 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:

  1. 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.
  2. Installeer de Microsoft Graph PowerShell-module zoals hierboven getoond.
  3. 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:

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:

  1. Open de Azure-portal en ga naar Azure Active Directory > App-registraties > Nieuwe registratie.
  2. Geef je app een duidelijke naam, zoals “My Graph Automation App”.
  3. 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.
  4. 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.
  5. 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:

  1. Ga in je app-registratie naar API-machtigingen > Een machtiging toevoegen > Microsoft Graph.
  2. Kies Toepassingsmachtigingen als je script headless of via een beheerde identiteit draait, of Gedelegeerde machtigingen als het interactief draait.
  3. Selecteer de specifieke machtigingen die je app nodig heeft, zoals User.Read.All of Directory.Read.All.
  4. 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.

MethodeVoordelenNadelen
ClientgeheimEenvoudig 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.
CertificaatVeiliger; 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

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:

  1. Voer de volgende opdracht uit om de device code-authenticatie te starten:
    Connect-MgGraph -Scopes "User.Read.All" -DeviceCode
  2. PowerShell toont een code en een URL. Open de URL in je browser op een willekeurig apparaat.
  3. Voer de code in die in PowerShell wordt getoond en meld je aan met je Microsoft 365-account.
  4. 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:

  1. Registreer je app in Azure AD en upload een certificaat onder Certificaten en geheimen.
  2. Sla het certificaat veilig op op de computer waarop je script draait.
  3. 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:

  1. Schakel Managed Identity (systeemtoegewezen of gebruikerstoegewezen) in op je Azure-resource.
  2. Ken de benodigde Microsoft Graph API-machtigingen toe aan deze identiteit in Azure AD via Microsoft Graph PowerShell of Graph Explorer.
  3. 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

Making API Calls with 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:

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 / factorBeschrijving
Maximaal aantal resultaten per aanroepMicrosoft raadt aan om bij zware eindpunten minder dan 120 resultaten per aanroep op te vragen om fouten te voorkomen.
FoutafhandelingDe cmdlet kan een 400 Bad Request-fout teruggeven als de syntaxis van het queryfilter onjuist is.
PrestatiesHet 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:

EindpuntToepassing
Get Office 365 Groups Activity CountsEen rapport draaien over Microsoft 365-groepen en actieve samenwerkingen identificeren.
List Plans for a GroupDe plannen vinden die bij een Microsoft 365-groep horen.
Post ConversationsEen nieuwe conversatie starten binnen een Microsoft 365-groep.
Get Default NotebookHet 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-Json

Nu 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.

QueryparameterBeschrijvingVoorbeeld
$expandRetourneert gerelateerde resources./groups?$expand=members
$filterFiltert resultaten (rijen)./users?$filter=startswith(givenName,'J')
$orderbySorteert resultaten./users?$orderby=displayName desc
$selectFiltert eigenschappen (kolommen)./users?$select=givenName,surname
$topStelt 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" -NoTypeInformation

Best 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.

BereikTypeLimietOpmerkingen
Globaal (alle services)Alle130.000 per 10 seconden per appAbsoluut maximum voor alle Graph-services
Intune (algemeen)Alle1.000 per app per tenant per 20 secondenLimiet van je app voor alle bewerkingen

Bar chart comparing Microsoft Graph API rate limits across different scopes and types

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.

Microsoft Graph .NET Microsoft 365 Microsoft Entra ID

Related articles

RSS