Compliance-blinde vlekken in Microsoft 365 ontdekken met Microsoft Graph
By Mirko Peters ·
Welkom terug bij de podcast en ons bijbehorende technische blog! Als je ooit een standaard compliance-dashboard van Microsoft 365 hebt vertrouwd en ervan uitging dat alles volledig was meegenomen…
Automatically translated with AI from the original post. Read the English original
Welkom terug bij de podcast en ons bijbehorende technische blog! Als je ooit op een standaard compliance-dashboard van Microsoft 365 hebt vertrouwd en ervan uitging dat alles volledig was meegenomen, trap je misschien in een valse veiligheid. Standaard compliance-dashboards zijn bedoeld als samenvattingen, niet als de absolute waarheid. Kritieke signalen, zoals Data Loss Prevention (DLP)-hits, eDiscovery-acties en onderliggende beveiligingswaarschuwingen, staan vaak achter Microsoft Graph-endpoints die aparte machtigingen, geavanceerde queryparameters en een goede koppeling van gegevens vereisen. In deze diepe duik onderzoeken we waarom je ingebouwde rapporten cruciale informatie missen, brengen we in kaart welke exacte Graph-endpoints je moet bevragen, en laten we zien hoe je dat ruwe bewijsmateriaal rechtstreeks doorsluist naar Microsoft Purview voor heldere, verdedigbare rapportage. Wil je onze volledige discussie over dit onderwerp horen? Bekijk dan zeker de bijbehorende podcastaflevering: Find Missing Microsoft 365 Compliance Data with Graph.
Overzicht
Standaard compliancedashboards zijn samenvattingen, geen waarheid. Cruciale signalen (DLP-hits, eDiscovery-acties, beveiligingswaarschuwingen) staan vaak achter Graph-endpoints met aparte machtigingen. We brengen de exacte API's, scopes en scriptpatronen in kaart om bewijs met volledige detailgraad op te halen en dit centraal in Purview onder te brengen voor helder en verdedigbaar rapporteren.
Voor wie dit nuttig is
Eigenaars van compliance, juridische zaken en risicobeheer die auditklaar bewijs nodig hebben
M365- en Entra-beheerders die rapportage en automatisering bouwen
Beveiligingsteams die DLP-, eDiscovery- en waarschuwingsgegevens met elkaar correleren
De blinde vlekken (waarom ingebouwde dashboards iets missen)
Aggregatie en vertraging: UI-samenvattingen laten geneste incidentdetails en recente activiteit weg
Gaten in de scope: eDiscovery-acties en DLP-matches kunnen buiten de standaardexports vallen
Gesplitste machtigingen: de /security- en /compliance-endpoints vereisen verschillende scopes
Geen koppelingen: dashboards correleren zelden incidenten met gebruikers, custodians of casusstappen
De waardevolle Graph-endpoints (kopieer deze lijst)
Beveiligingswaarschuwingen (breedte)
Endpoint:
/security/alertsof/security/alerts_v2App-machtigingen (voorbeelden):
SecurityEvents.Read.All(of Alerts.Read.All in nieuwere modellen)Gebruik voor: tijdlijnen van waarschuwingen, ernst, status en toewijzingen
DLP-beleid en -activiteit (gegevensverlies)
Endpoints (per tenant verschillend, afhankelijk van beschikbaarheid):
/security/dataLossPreventionPolicies(overzicht van beleid)/security/dlpIncidentsof geavanceerde DLP-incidentendpoints in de security-namespace (afhankelijk van de tenant)
App-machtigingen:
SecurityEvents.Read.All(en/of specifieke DLP-leesscopes indien beschikbaar)Gebruik voor: matches, locaties (Exchange/SharePoint/Teams) en afhandeling
eDiscovery (casussen en acties)
/compliance/ediscovery/casesSubpaden:
/custodians,/searches,/reviewSets,/noncustodialDataSources,/operationsApp-machtigingen:
eDiscovery.Read.All(en schrijfrechten als je casussen beheert)Gebruik voor: casusstatus, bewaringen (holds), custodians, exports en acties van reviewers
Audit- en aanmeldingscontext (ondersteunend bewijs)
/auditLogs/directoryAudits,/auditLogs/signInsApp-machtigingen:
AuditLog.Read.All,Directory.Read.AllGebruik voor: wie wat wanneer heeft gewijzigd, en sessiecontext
Tip: veel compliancepayloads zijn diep genest. Houd rekening met het gebruik van
$expand, pagineer via@odata.nextLinken koppel met/users/{id}voor weergavenamen en afdelingen.
Authenticatie en machtigingen (de rustige route)
Gebruik applicatiemachtigingen (service principal) voor onbewaakte taken
Registreer afzonderlijke apps voor security en de kern van Graph als je organisatie gesplitste privileges vereist
Geef alleen de minimale benodigde scopes toestemming en bewaar geheimen/certificaten in Key Vault
Implementeer exponentiële backoff voor 429/503-fouten en leg
x-ms-request-idvast in logs
Scriptpatronen (PowerShell of Python)
Selecteren en uitklappen: vraag alleen de benodigde velden op,
$select=…,$expand=…voor geneste entiteitenFilter & tijdvenster:
$filter=createdDateTime ge {ISO8601}voor delta'sPagineer: loop door
@odata.nextLink; ga nooit uit van resultaten op één paginaNormaliseer: koppel gebruikers- en object-ID's vooraf aan namen en afdelingen, zodat de output leesbaar is
Verrijk met context: verrijk incidenten met gebruikers-, site-, team- of zaakmetadata voordat je exporteert
Zo koppel je het aan Purview (maak van data beslissingen)
Standaardiseer de output: CSV/JSON met consistente veldnamen (tenant, incidentId, workload, userId, userUPN, severity, status, created, lastAction, caseId)
Ingest: zet bestanden op een beveiligde opslaglocatie die Purview kan lezen (bijvoorbeeld ADLS Gen2)
Tag & label: pas vertrouwelijkheidslabels of aangepaste tags toe (bijvoorbeeld “DLP-PII-High”) voor routering
Dashboards: Purview (of Power BI op Purview-gegevens) voor trends, eigenaren en SLA-veroudering
Automatiseringen: regels om zaakeigenaren te informeren bij herhalingen of escalaties; wekelijkse PDF-samenvattingen
Pilot van 30 minuten (stap voor stap)
0–10 min: app-registratie +
SecurityEvents.Read.All/eDiscovery.Read.All; maak een geheim of certificaat aan10–20 min: scripteer één endpoint (waarschuwingen of zaken) met paginering +
$filtervoor de laatste 7 dagen20–30 min: verrijk met
/users, exporteer naar CSV, zet het bestand op het ADLS-pad en visualiseer een eenvoudige grafiek
KPI's die de waarde aantonen
% incidenten met ingevulde eigenaar en afhandeling
Gemiddelde tijd van incident tot zaak (of beoordelaar)
Accounts/locaties met herhaalde overtredingen per 30 dagen
Verschil met de aantallen van het standaarddashboard (gesloten gaten)
Doorlooptijd van audits (bespaarde uren voor het verzamelen van bewijs)
Veelvoorkomende valkuilen (en oplossingen)
Lege resultaten → verkeerde scopes of Gedelegeerd gebruikt waar Toepassing vereist is
Ontbrekende details →
$expandvergeten / geneste verzamelingen niet uitgelezenOnvolledige data → geen paginering; alleen de eerste pagina opgehaald
Naamafwijkingen → geen verrijking via een join met
/usersof HR-gegevensVerouderde dashboards → geen geplande runs; voeg een taak toe en waarschuwingen bij fouten
Snelle winst deze week
Haal de laatste 7 dagen op uit
/security/alertsen vergelijk de aantallen met het portaalExporteer open eDiscovery-zaken + bewaarplichtigen en deel ze met Juridische Zaken ter validatie
Voer een DLP-incidentcontrole uit, tag herhalingen en open vervolgacties in Purview
Plan een wekelijks bewijspakket (CSV + PDF) naar een compliance-mailbox
Veelgestelde vragen
Moet ik developer zijn? Nee – PowerShell of korte Python-scripts zijn voldoende.
Waarom app-machtigingen? De meeste /security- en /compliance-endpoints vereisen headless toegang met een hoog vertrouwensniveau.
Kan ik bij PowerShell blijven? Ja – gebruik de Microsoft Graph PowerShell SDK en werk met
$top,$filter,$expanden paginering.Is Purview verplicht? Niet strikt – maar het zet ruwe JSON om in controleerbare workflows en dashboards.
Conclusie
Dashboards geven een samenvatting; Graph vertelt het hele verhaal. Haal de juiste endpoints op, regel de authenticatie, pagineer en breid uit, en centraliseer daarna in Purview. Je gaat van afvinkbare compliance naar aantoonbaar, realtime inzicht – zonder te verdrinken in handmatige exports. Voor een diepgaand gesprek en experttips over het aanpakken van deze blinde vlekken kun je onze podcastaflevering beluisteren: Find Missing Microsoft 365 Compliance Data with Graph. Blijf je scripts verfijnen, beveilig je app-machtigingen en ga aan de slag met de data die je dashboards tot nu toe verborgen hielden!