Graph Explorer onder de knie krijgen: een gebruikersvoetafdruk end-to-end traceren
By Mirko Peters ·
Welkom terug bij de podcast-companion blog! In de post van vandaag gaan we veel verder dan de gefragmenteerde beheerinterfaces die we allemaal kennen en soms lastig vinden…
Automatically translated with AI from the original post. Read the English original
Welkom terug bij de podcast-companion blog! In de post van vandaag gaan we veel verder dan de gefragmenteerde beheerinterfaces die we allemaal kennen en soms lastig vinden. Als je ooit hebt geprobeerd een volledig auditspoor samen te stellen van wat een specifieke gebruiker in Microsoft 365 heeft geopend, gedeeld of aangeraakt, weet je al hoe onsamenhangend de ingebouwde beheercentra kunnen aanvoelen. Daarom duiken we diep in Microsoft Graph. Met de Graph API kunnen we soepel schakelen van individuele gebruikers naar groepen, SharePoint-sites, bestanden, externe links en zelfs actieve bekijkers. Wil je de audiodiscussie volgen die direct bij deze gids hoort, bekijk dan ook de bijbehorende aflevering Map Microsoft 365 Users, Groups, Files, and Shares with Graph.
Waarom M365 niet geïsoleerd is
Een van de hardnekkigste misverstanden bij beheerders en securityteams is dat afzonderlijke Microsoft 365-services werken als veilige, op zichzelf staande silo’s. In werkelijkheid zijn Teams-chats, SharePoint-documentbibliotheken en OneDrive-mappen continu met elkaar verweven via onderliggende groepslidmaatschappen en het overerven van machtigingen.
- Teams-chats, SharePoint-bibliotheken en OneDrive-mappen zijn via groepslidmaatschap met elkaar verweven.
- Een simpele actie als ‘één gebruiker aan één groep toevoegen’ kan stilletjes talloze onderliggende sites, kanalen en externe delingen ontsluiten, zonder dat dit in standaardweergaven duidelijk zichtbaar is in het auditspoor.
- Je compliancerisico komt voort uit deze onzichtbare paden, zoals gastlinks die in privéchats belanden, bestanden die in meerdere bibliotheken worden gespiegeld en achtergebleven delingen die blijven bestaan lang nadat projecten zijn afgerond.
Voetafdruk in kaart brengen met Graph Explorer (van gebruiker naar bestandsraakpunten)
Om echt te begrijpen hoe toegang zich door je tenant verspreidt, heb je een herhaalbaar querypatroon nodig. In Graph Explorer kunnen we een gerichte keten van API-aanroepen uitvoeren om een volledige voetafdruk van gebruikersraakpunten in kaart te brengen:
- Begin bij de doelgebruiker:
GET /v1.0/users/{userPrincipalName}?$select=id,displayName,userPrincipalName - Breng hun directe en indirecte lidmaatschappen in kaart:
GET /v1.0/users/{id}/memberOf?$select=id,displayName - Ga vervolgens van die groepen terug naar de resources. Voor Microsoft 365-groepen en Teams richt je je op de onderliggende SharePoint-site:
GET /v1.0/groups/{groupId}/drive/root/children?$select=id,name,lastModifiedDateTime,webUrl
Of breng sitedrives en bibliotheken direct in kaart:
GET /v1.0/sites/{siteId}/drives - Haal itemmachtigingen en deelkoppelingen op:
GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$select=id,grantedToV2,link,roles,shareId - Traceer waar mogelijk wie wanneer wat heeft geopend, met behulp van auditlogs en aanmeldingslogs:
GET /v1.0/auditLogs/signIns of /security/alerts, gekoppeld aan bestands-, site- of delingscontext. - Sluit de lus met Teams-berichten en kanaalberichten:
GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="filename" (vereist bètaendpoints en passende machtigingen).
Ruisfilters die je echt gaat gebruiken
Ruwe data ophalen uit Microsoft Graph kan snel aanvoelen als drinken uit een brandslang. Om enorme datasets om te zetten in bruikbare inzichten moet je precieze queryparameters gebruiken.
- Isoleer externe delingen die in de afgelopen 7 dagen zijn aangemaakt door scopefilters toe te passen:
GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$filter=link/scope eq 'anonymous' or link/scope eq 'organization'&$select=… - Isoleer risicovolle bestandstypen door bestandsextensies toe te voegen:
Voeg toe: $filter=endsWith(resourceReference/name,'.xlsm') or endsWith(resourceReference/name,'.pst') - Houd vermeldingen van gevoelige termen buiten werktijd in Teams-kanalen bij:
GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="confidential", filter de resultaten daarna op createdDateTime buiten de normale werktijden. - Houd je payloads slank en efficiënt door altijd $select toe te voegen, zodat alleen ID’s, namen, webURL’s, tijdstempels van laatste wijziging en minimale machtigingsvelden worden teruggegeven.
- Beperk je resultaten voor snelle triage met $top=50 voor snelle steekproeven, maar verwijder deze beperking wanneer je gegevens exporteert naar een permanente opslag.
Essentiële aandachtspunten op enterprise-schaal (paginering en throttling)
Wanneer je deze queries opschaalt van één testgebruiker naar een enterprise-tenant met honderdduizenden objecten, worden prestaties en betrouwbaarheid van doorslaggevend belang.
- Een gegevensophaling is pas klaar wanneer je voor elke pagina met resultaten expliciet de eigenschap @odata.nextLink volgt.
- Respecteer HTTP 429-antwoorden voor rate limiting door exponential backoff-routines te implementeren en ervoor te zorgen dat je script veilig kan hervatten waar het gebleven was.
- Bundel je queries slim. Kies voor minder, grotere en goed gestructureerde requests in plaats van een lawine aan kleine calls, en cache group-naar-site-mappings agressief.
- Splits zeer grote tenant-crawls op in specifieke SharePoint-site-ID's of datumbereiken om timeouts te voorkomen, en plan deze zware bewerkingen buiten piekuren.
Veelvoorkomende valkuilen (en snelle oplossingen)
Ook ervaren beheerders lopen tegen obstakels aan wanneer ze geautomatiseerde Graph-querypijplijnen bouwen. Houd deze veelvoorkomende valkuilen en de snelle oplossingen ervoor in gedachten:
- Valkuil: CSV-exports lopen uit de pas en breken wanneer de onderliggende schema's na verloop van tijd veranderen.
Oplossing: Gebruik de Graph API rechtstreeks met geversioneerde transformaties en een robuuste verwerking van "onbekende" velden. - Valkuil: Gemengde identifiers, zoals GUID's versus User Principal Names, breken databasekoppelingen (joins).
Oplossing: Normaliseer je gegevens naar een samenhangend semantisch model met Users, Groups, Sites, Drives, Items en Permissions. - Valkuil: "Page 1 bias" verblindt je monitoring en verbergt ernstige beveiligingsincidenten die op diepere pagina's verborgen zitten.
Oplossing: Registreer altijd het totale aantal verwerkte pagina's en activeer waarschuwingen wanneer het verwachte aantal records onverwacht daalt. - Valkuil: Overspoeld worden door een onbeheersbare hoeveelheid irrelevante bestanden.
Oplossing: Filter expliciet op linkscopes, specifieke tijdvensters voor aanmaak- of wijzigingsdatum, en gerichte lijsten met gevoelige termen. - Valkuil: Teams-shares die niet terug te herleiden zijn naar de onderliggende bestanden.
Oplossing: Koppel webURL's van kanaalberichten rechtstreeks aan drive-items en sla beide unieke identifiers op.
Kpi's op managementniveau die hiermee mogelijk worden
Door ruwe Graph API-output om te zetten in gestructureerde metrics krijgt het management het inzicht dat het hard nodig heeft. Kernprestatie-indicatoren die je kunt ontsluiten, zijn onder meer:
- Snelheid van externe blootstelling: het aantal nieuwe gastlinks per week, uitgesplitst per site of team.
- Aantal toegangen tot gevoelige bestanden: het aantal unieke kijkers van gelabelde content, met onderscheid tussen interne gebruikers en externe gasten.
- Risico door groepsverspreiding: bestanden identificeren die binnen 24 uur toegankelijk worden na een wijziging van het groepslidmaatschap.
- Ongecontroleerde verspreiding: gevoelige bestanden volgen die binnen één sprint over meerdere teams en sites worden verspreid.
- Effectiviteit van opschoning: het aantal ingetrokken deellinks tellen en de totale tijd tot herstel meten.
Snelstartrecept voor queries (kopiëren en plakken)
Wil je nu meteen je eerste end-to-end onderzoek opzetten in Graph Explorer, gebruik dan deze opeenvolgende werkwijze met kopiëren en plakken:
- Basisgegevens van de gebruiker en groepen opvragen:
/users/{upn}?$select=id,displayName
/users/{id}/memberOf?$select=id,displayName - Haal voor elke Microsoft 365-groep die je vindt de drive-children op:
/groups/{groupId}/drive/root/children?$select=id,name,webUrl,lastModifiedDateTime&$top=200
Zorg dat je @odata.nextLink volgt - Controleer voor elk bestandsitem de machtigingen:
/drives/{driveId}/items/{itemId}/permissions?$select=id,roles,grantedToV2,link
Filter zo dat link/scope voorkomt in ('anonymous','organization') - Exporteer je schone rijen naar je datawarehouse, inclusief tenanttijd, site-ID, drive-ID, item-ID, webURL, eigenaar, scope en vervaldatumgegevens.
- Visualiseer de geaggregeerde gegevens in Power BI voor doorlopend toezicht binnen de organisatie.
Dit omzetten in een levend dashboard
Eenmalige queries in Graph Explorer zijn fantastisch voor onderzoek, maar echt governance vraagt om automatisering. Maak van je queries een levend operationeel dashboard door robuuste dataflows op te zetten, tabellen voor gebruikers, groepen, sites, drives, items, machtigingen en berichten te normaliseren, en een sterrenschema te bouwen rond je bestandsitems. Stel incrementele gegevensverversingen in op basis van wijzigingsdatums en configureer realtime waarschuwingen die afgaan zodra er nieuwe externe links verschijnen op zeer gevoelige, gelabelde content.
Plan voor 30 dagen
Klaar om dit in de praktijk te brengen binnen je organisatie? Volg dit gestructureerde implementatiekader van vier weken:
- Week 1: Voltooi je app-registratie, ken Graph API-machtigingen met minimale rechten toe en stel basisqueries op met precieze $select- en $filter-parameters.
- Week 2: Bouw de paginatiescripts uit, implementeer de normalisatie van identifiers van ID's naar UPN's en voer je allereerste geslaagde gegevensexport uit.
- Week 3: Bouw je Power BI-gegevensmodel en de fundamentele KPI's, inclusief het bijhouden van externe blootstelling en een analyse van het effect van verspreiding (ripple risk).
- Week 4: Automatiseer je gegevensverversingen, configureer waarschuwingen voor afwijkingen en documenteer standaardwerkprocedures voor je beveiligings- en compliance-teams.
Voor wie is dit bedoeld
Deze methodiek is speciaal ontworpen voor specifieke rollen binnen je organisatie:
- Microsoft 365-beheerders en SecOps-leads die vermoeden dat hun standaard beheerdashboards kritieke grijze gebieden verbergen.
- Compliance-teams die end-to-end zicht op delen nodig hebben zonder extra te moeten investeren in dure software van derden.
- Samenwerkingsverantwoordelijken die uiteindelijk verantwoordelijk zijn voor veilig en gecontroleerd extern delen.
Praktische tips
Houd deze praktische tips bij de hand terwijl je aan je Graph-automatiseringstraject bouwt:
- Start je onderzoek altijd vanuit de gebruiker of het bestand en kijk vervolgens in beide richtingen verder om blinde vlekken weg te nemen.
- Beschouw elke actie "toevoegen aan groep" als een wijziging met een hoog risico en beoordeel de gevolgen voor de toegang binnen 24 uur.
- Houd een actuele shortlist bij van gevoelige termen om te zoeken in Teams-berichten en bestandsnamen, en evalueer die lijst regelmatig.
- Registreer het aantal verwerkte pagina's en de gegevensvolumes zorgvuldig; soms is totale stilte in je logs juist het signaal dat een pipelinetaak is vastgelopen.
Conclusie
Microsoft Graph beheersen om gebruikerssporen end-to-end in kaart te brengen overbrugt de kloof tussen gefragmenteerde beheeroverzichten en werkelijk inzicht in de hele organisatie. Door je denkwijze te verschuiven van losse silo's naar relationele toegangsmapping, kun je gevoelige gegevens proactief beveiligen, ongecontroleerde verspreiding uitbannen en leidinggevenden voorzien van de bruikbare KPI's die ze nodig hebben. Wil je meer deskundige toelichtingen, praktijkvoorbeelden en diepgaande verhalen over scenario's zoals dit horen? Luister dan naar de volledige aflevering via Map Microsoft 365 Users, Groups, Files, and Shares with Graph.
Abonneren
Voor diepgaande verhalen en praktische Graph-recepten: nieuwe afleveringen vind je op m365.show/subscribe