Beheer Van Risico's Van Derde Partijen In Microsoft 365

💼 Management Samenvatting

Het beheer van risico's van derde partijen vormt een essentieel onderdeel van een volwassen informatiebeveiligings- en complianceprogramma binnen Nederlandse overheidsorganisaties die Microsoft 365 gebruiken. Wanneer een organisatie Microsoft 365 inzet, maakt zij niet alleen gebruik van de diensten van Microsoft zelf, maar indirect ook van een uitgebreid ecosysteem van derde partijen: leveranciers van aanvullende software, integraties, apps uit de Microsoft AppSource, externe consultants die toegang hebben tot de omgeving, en andere serviceproviders die ondersteuning bieden bij implementatie, migratie of beheer. Elke derde partij die toegang heeft tot de Microsoft 365-omgeving, gegevens kan inzien of wijzigen, of integreert met Microsoft 365-services, introduceert potentiële risico's op het gebied van beveiliging, privacy, compliance en continuïteit. Dit artikel beschrijft hoe Nederlandse overheidsorganisaties een gestructureerd proces inrichten voor het identificeren, beoordelen, monitoren en beheersen van risico's van derde partijen binnen hun Microsoft 365-omgeving.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
100u (tech: 40u)
Van toepassing op:
M365
Publieke Sector
Overheidsorganisaties

De noodzaak voor effectief beheer van risico's van derde partijen wordt gedreven door meerdere factoren. Ten eerste stellen wet- en regelgeving zoals de Algemene Verordening Gegevensbescherming (AVG), de Baseline Informatiebeveiliging Overheid (BIO) en de NIS2-richtlijn expliciete eisen aan organisaties om risico's van derde partijen te identificeren en te beheersen. De AVG vereist bijvoorbeeld dat organisaties contractuele waarborgen hebben met verwerkers en subverwerkers, en dat zij kunnen aantonen dat derde partijen voldoen aan dezelfde beveiligings- en privacyvereisten als de organisatie zelf. De BIO stelt dat organisaties zicht moeten hebben op de volledige keten van gegevensverwerking, inclusief alle derde partijen, en dat risico's moeten worden beheerst. De NIS2-richtlijn voegt hieraan toe dat essentiële en belangrijke entiteiten specifieke eisen moeten naleven voor supply-chain beveiliging, waarbij risico's van leveranciers en serviceproviders moeten worden geïdentificeerd en beheerst. Ten tweede vormen derde partijen een aanzienlijk deel van het totale aanvalsoppervlak van een organisatie. Onderzoek toont aan dat een groot percentage van beveiligingsincidenten en datalekken wordt veroorzaakt door of via derde partijen, bijvoorbeeld doordat een leverancier onvoldoende beveiligingsmaatregelen heeft, een gecompromitteerd account heeft, of per ongeluk gegevens blootstelt. Wanneer een derde partij toegang heeft tot de Microsoft 365-omgeving, kan een beveiligingsincident bij die partij directe gevolgen hebben voor de organisatie. Ten derde kan het ontbreken van goed beheer van risico's van derde partijen leiden tot niet-naleving van compliance-vereisten, reputatieschade wanneer blijkt dat gegevens zijn blootgesteld via een onvoldoende beveiligde derde partij, en financiële gevolgen in de vorm van boetes, schadeclaims of verlies van vertrouwen van burgers en stakeholders.

PowerShell Modules Vereist
Primary API: Microsoft Graph API
Connection: Connect-MgGraph
Required Modules: Microsoft.Graph

Implementatie

Dit artikel beschrijft een gestructureerde aanpak voor het beheer van risico's van derde partijen binnen Microsoft 365. We beginnen met de juridische en compliance-achtergrond: welke eisen stellen de AVG, BIO en NIS2 aan risicobeheer van derde partijen, en hoe verhoudt dit zich tot de verantwoordelijkheden van de organisatie. Vervolgens gaan we in op de praktische uitvoering: hoe identificeert u alle derde partijen die toegang hebben tot of integreren met uw Microsoft 365-omgeving, welke informatiebronnen zijn beschikbaar en hoe stelt u een centraal register in. We behandelen risicobeoordeling: hoe beoordeelt u het risicoprofiel van een derde partij op basis van factoren zoals het type toegang, het niveau van toegang tot gegevens, de beveiligingsstandaarden van de partij, en de geografische locatie. Daarnaast bespreken we contractuele waarborgen: welke clausules moeten worden opgenomen in overeenkomsten met derde partijen, welke certificeringen en audits zijn vereist, en hoe worden deze waarborgen periodiek geverifieerd. Tot slot behandelen we monitoring en continu beheer: hoe monitort u actieve toegang van derde partijen, hoe detecteert u onbevoegde of ongebruikelijke activiteiten, en hoe wordt het risicoprofiel periodiek herbeoordeeld. Het resultaat is een volwassen proces waarin de organisatie proactief en aantoonbaar omgaat met risico's van derde partijen en daarmee voldoet aan haar verantwoordelijkheden onder wet- en regelgeving.

De juridische basis voor beheer van risico's van derde partijen binnen Microsoft 365 is gelegen in meerdere wet- en regelgevingskaders die van toepassing zijn op Nederlandse overheidsorganisaties. De Algemene Verordening Gegevensbescherming (AVG) stelt in artikel 28 expliciete eisen aan de relatie tussen verwerkingsverantwoordelijken en verwerkers, waarbij vereist wordt dat verwerkers voldoen aan dezelfde beveiligings- en privacyvereisten als de verwerkingsverantwoordelijke zelf. Hoewel artikel 28 primair gericht is op verwerkers zoals Microsoft, strekt de verantwoordelijkheid van de organisatie zich uit tot alle derde partijen die toegang hebben tot of verwerken van persoonsgegevens, inclusief leveranciers van aanvullende software, integraties, apps en serviceproviders. Artikel 32 van de AVG voegt hieraan toe dat organisaties passende technische en organisatorische maatregelen moeten treffen om persoonsgegevens te beveiligen, waarbij rekening moet worden gehouden met de risico's die voortvloeien uit verwerking door derde partijen. Voor Nederlandse overheidsorganisaties betekent dit dat zij niet alleen contractuele waarborgen moeten hebben met derde partijen, maar ook moeten kunnen aantonen dat zij de beveiligingsstandaarden van derde partijen hebben beoordeeld, dat zij periodiek monitoren of derde partijen nog steeds voldoen aan de gestelde eisen, en dat zij maatregelen hebben genomen om risico's te beperken.

De Baseline Informatiebeveiliging Overheid (BIO) stelt aanvullende eisen aan risicomanagement van derde partijen. BIO-norm 12.04 vereist dat organisaties zicht hebben op de volledige keten van gegevensverwerking, inclusief alle derde partijen, en dat risico's worden geïdentificeerd en beheerst. BIO-norm 18.01 voegt hieraan toe dat organisaties moeten zorgen voor adequate beveiliging bij uitbesteding van informatievoorziening, waarbij contractuele waarborgen moeten worden vastgelegd en periodiek moeten worden geverifieerd. De BIO benadrukt dat de verantwoordelijkheid voor informatiebeveiliging niet kan worden uitbesteed: ook wanneer een derde partij bepaalde diensten levert, blijft de organisatie verantwoordelijk voor de beveiliging van gegevens en systemen. Dit betekent dat organisaties niet alleen moeten zorgen voor contractuele waarborgen, maar ook moeten monitoren of derde partijen daadwerkelijk voldoen aan deze waarborgen, en moeten kunnen ingrijpen wanneer dit niet het geval is. De NIS2-richtlijn, die in Nederland is geïmplementeerd via de Wet beveiliging netwerk- en informatiesystemen (Wbni), stelt specifieke eisen aan supply-chain beveiliging voor essentiële en belangrijke entiteiten. Artikel 21 van NIS2 vereist dat organisaties risico's van leveranciers en serviceproviders identificeren en beheersen, en dat zij maatregelen treffen om de beveiliging van de supply chain te waarborgen. Dit omvat onder meer due diligence bij selectie van leveranciers, contractuele beveiligingsvereisten, periodieke beveiligingsassessments, en monitoring van leveranciersprestaties.

Naast deze primaire wet- en regelgevingskaders spelen ook sectorale richtlijnen en best practices een rol. De ISO 27001-norm voor informatiebeveiligingsmanagementsystemen bevat specifieke controls voor leveranciersrelaties (A.15.1 en A.15.2), waarbij vereist wordt dat organisaties risico's van leveranciers identificeren, contractuele beveiligingsvereisten vastleggen, en leveranciersprestaties monitoren. De Nederlandse overheidspraktijk, zoals vastgelegd in richtlijnen van het Nationaal Cyber Security Centrum (NCSC) en de Informatiebeveiligingsdienst voor Rijk en IOP (IBD), benadrukt het belang van due diligence bij selectie van leveranciers, het gebruik van standaardcontracten met beveiligingsclausules, en periodieke beveiligingsassessments. Voor Nederlandse overheidsorganisaties betekent dit dat beheer van risico's van derde partijen niet alleen een compliancekwestie is, maar ook een integraal onderdeel van het informatiebeveiligings- en risicomanagementproces. Het proces moet daarom worden afgestemd met de CISO, de Functionaris Gegevensbescherming, de risicomanager, de contractmanager en eventueel de procurement-afdeling die verantwoordelijk is voor leveranciersselectie en contractbeheer. Door deze verschillende perspectieven te combineren ontstaat een holistische benadering waarin juridische verplichtingen, beveiligingsrisico's en praktische haalbaarheid met elkaar in balans worden gebracht.

Identificatie en inventarisatie van derde partijen

De eerste stap in effectief beheer van risico's van derde partijen is het identificeren en inventariseren van alle derde partijen die toegang hebben tot of integreren met de Microsoft 365-omgeving. Dit is vaak complexer dan het op het eerste gezicht lijkt, omdat derde partijen op verschillende manieren kunnen interacteren met Microsoft 365. Ten eerste zijn er derde partijen die directe toegang hebben tot de Microsoft 365-omgeving via gebruikersaccounts, bijvoorbeeld externe consultants, auditors, ondersteuningsmedewerkers van leveranciers, of tijdelijke medewerkers. Deze accounts kunnen worden geïdentificeerd via Azure Active Directory, waarbij gezocht wordt naar accounts met externe e-maildomeinen, gastaccounts, of accounts die zijn gekoppeld aan externe organisaties. Ten tweede zijn er derde partijen die toegang hebben via applicaties of integraties, bijvoorbeeld apps uit de Microsoft AppSource die zijn geïnstalleerd in de tenant, OAuth-applicaties die zijn geregistreerd in Azure AD, of API-integraties met externe systemen. Deze kunnen worden geïdentificeerd via de Azure AD App registrations, Enterprise applications, en via Microsoft Graph API. Ten derde zijn er derde partijen die indirect toegang hebben via gedeelde resources, bijvoorbeeld externe gebruikers die toegang hebben tot SharePoint-sites of Teams-kanalen, of externe organisaties die deel uitmaken van een B2B-samenwerking. Deze kunnen worden geïdentificeerd via SharePoint-admin, Teams-admin, en via rapportages over externe toegang.

Het bijbehorende PowerShell-script ondersteunt dit identificatieproces door automatisch verschillende informatiebronnen te doorzoeken en een geconsolideerd overzicht te genereren van alle derde partijen. Het script doorzoekt Azure Active Directory op gastaccounts en externe accounts, inventariseert alle geregistreerde applicaties en OAuth-apps, controleert geïnstalleerde apps uit de AppSource, analyseert externe toegang tot SharePoint-sites en Teams-kanalen, en identificeert API-integraties en service principals. Het resultaat is een centraal register waarin per derde partij wordt vastgelegd: de naam van de organisatie of persoon, het type toegang (gebruikersaccount, applicatie, integratie, gedeelde resource), het niveau van toegang (welke gegevens kunnen worden ingezien of gewijzigd), de datum waarop toegang is verleend, de verantwoordelijke binnen de organisatie die de toegang heeft goedgekeurd, en de contractuele basis (welke overeenkomst of procedure rechtvaardigt de toegang). Dit register vormt de basis voor risicobeoordeling en periodieke monitoring, en kan worden gebruikt voor rapportages aan bestuur, CISO en compliance-officers.

Naast technische identificatie via Microsoft 365 is het ook belangrijk om organisatorische processen te doorlopen om derde partijen te identificeren. Dit omvat het raadplegen van contractdatabases om te identificeren welke leveranciers contracten hebben die betrekking hebben op Microsoft 365, het doorlopen van procurement-processen om te zien welke leveranciers recent zijn geselecteerd voor Microsoft 365-gerelateerde diensten, en het raadplegen van projectdocumentatie om te identificeren welke externe partijen betrokken zijn bij implementatie, migratie of beheerprojecten. Het is aan te raden om dit identificatieproces periodiek – bijvoorbeeld jaarlijks of bij significante wijzigingen in de Microsoft 365-omgeving – te herhalen, zodat nieuwe derde partijen tijdig worden geïdentificeerd en toegevoegd aan het register. Het register moet worden beheerd door een centrale verantwoordelijke, bijvoorbeeld de CISO, de compliance-officer of de contractmanager, en moet worden geïntegreerd met andere systemen zoals het leveranciersregister, het risicoregister en het compliancemanagementsysteem.

Risicobeoordeling en classificatie

Zodra alle derde partijen zijn geïdentificeerd en geregistreerd, moet voor elke derde partij een risicobeoordeling worden uitgevoerd om te bepalen welk risicoprofiel de partij heeft en welke beheersmaatregelen nodig zijn. Deze risicobeoordeling moet gestructureerd en gedocumenteerd worden uitgevoerd, zodat bij een audit of toezicht kan worden aangetoond dat de organisatie haar verantwoordelijkheden heeft genomen. Een praktische aanpak begint met een risicoclassificatie op basis van meerdere factoren. Ten eerste het type toegang: heeft de derde partij directe toegang tot gebruikersaccounts met mogelijkheid tot inzien of wijzigen van gegevens, of is de toegang beperkt tot specifieke applicaties of API's met beperkte rechten? Directe toegang via gebruikersaccounts vormt typisch een hoger risico dan toegang via gecontroleerde API's met beperkte scopes. Ten tweede het niveau van toegang tot gegevens: heeft de derde partij toegang tot gevoelige persoonsgegevens, vertrouwelijke bedrijfsinformatie, of alleen tot algemene of publieke informatie? Toegang tot gevoelige gegevens vereist strengere beheersmaatregelen dan toegang tot algemene informatie. Ten derde de beveiligingsstandaarden van de derde partij: beschikt de partij over relevante certificeringen zoals ISO 27001, ISO 27018, SOC 2 Type II, of NEN 7510? Heeft de partij recent beveiligingsincidenten gehad? Zijn er bekende beveiligingskwetsbaarheden of reputatierisico's? Partijen zonder adequate certificeringen of met een geschiedenis van beveiligingsincidenten vormen een hoger risico.

Ten vierde de geografische locatie en datatransfers: worden gegevens verwerkt binnen de Europese Unie of daarbuiten? Verwerking buiten de EU zonder adequate waarborgen vormt een compliance-risico onder de AVG. Ten vijfde de omvang en kritikaliteit: hoeveel gegevens worden verwerkt, hoe kritiek is de dienst die de derde partij levert, en wat is de impact wanneer de dienst uitvalt of wanneer er een beveiligingsincident plaatsvindt? Grote volumes gegevens of kritieke diensten vereisen strengere beheersmaatregelen. Op basis van deze factoren kunnen derde partijen worden geclassificeerd als laag, middel of hoog risico. Laagrisico partijen zijn bijvoorbeeld partijen met beperkte toegang tot niet-gevoelige gegevens, binnen de EU, met adequate certificeringen, en zonder bekende beveiligingsincidenten. Middelrisico partijen hebben bijvoorbeeld toegang tot gevoelige gegevens maar binnen de EU en met basis certificeringen. Hoogrisico partijen hebben bijvoorbeeld toegang tot zeer gevoelige gegevens, opereren buiten de EU zonder adequate waarborgen, hebben geen relevante certificeringen, of hebben een geschiedenis van beveiligingsincidenten.

Voor elke risicoclassificatie moeten passende beheersmaatregelen worden gedefinieerd. Voor laagrisico partijen kunnen basis maatregelen volstaan, zoals een standaard contract met beveiligingsclausules, verificatie van basis certificeringen, en jaarlijkse herbeoordeling. Voor middelrisico partijen zijn aanvullende maatregelen nodig, zoals uitgebreidere contractuele waarborgen, periodieke beveiligingsassessments, en halfjaarlijkse herbeoordeling. Voor hoogrisico partijen zijn strenge maatregelen vereist, zoals gedetailleerde beveiligingsassessments, continue monitoring van toegang en activiteiten, kwartaalherbeoordeling, en mogelijk beperkingen op het type toegang of gegevens. Het PowerShell-script ondersteunt dit risicobeoordelingsproces door automatisch risicofactoren te analyseren – bijvoorbeeld door te controleren of een derde partij toegang heeft tot gevoelige gegevens, of de partij binnen of buiten de EU opereert, of er ongebruikelijke activiteiten zijn gedetecteerd – en door risicoscores te berekenen op basis van configuratiebeleid. Het script genereert rapportages die aangeven welke derde partijen mogelijk aandacht vereisen, welke partijen periodieke herbeoordeling nodig hebben, en welke partijen mogelijk niet meer voldoen aan de gestelde criteria.

Contractuele waarborgen en verificatie

Contractuele waarborgen vormen een essentieel onderdeel van risicobeheer van derde partijen, omdat zij de juridische basis leggen voor beveiligings- en privacyvereisten en voor de verantwoordelijkheden van beide partijen. Voor Nederlandse overheidsorganisaties is het van belang om standaard contractclausules te hebben die worden opgenomen in alle overeenkomsten met derde partijen die toegang hebben tot of integreren met Microsoft 365. Deze clausules moeten ten minste de volgende elementen bevatten. Ten eerste beveiligingsvereisten: de derde partij moet voldoen aan dezelfde beveiligingsstandaarden als de organisatie zelf, moet passende technische en organisatorische maatregelen treffen om gegevens te beveiligen, en moet relevante certificeringen hebben en onderhouden. Ten tweede privacy- en AVG-vereisten: wanneer de derde partij persoonsgegevens verwerkt, moet een verwerkersovereenkomst worden gesloten die voldoet aan artikel 28 van de AVG, waarbij de derde partij contractueel gebonden is aan dezelfde privacyvereisten als de organisatie. Ten derde toegangsbeheer: de derde partij moet passende maatregelen treffen om toegang te beperken tot geautoriseerde personen, moet gebruik maken van sterke authenticatie en autorisatie, en moet logging en monitoring implementeren. Ten vierde incident response: de derde partij moet onmiddellijk melden wanneer er een beveiligingsincident of datalek plaatsvindt, moet samenwerken bij incident response, en moet maatregelen treffen om herhaling te voorkomen.

Ten vijfde audit en verificatie: de organisatie moet het recht hebben om periodiek te verifiëren of de derde partij voldoet aan de contractuele waarborgen, bijvoorbeeld door middel van beveiligingsassessments, audits of certificeringsverificatie. Ten zesde geografische beperkingen: wanneer vereist door compliance-vereisten, moet de derde partij gegevens alleen verwerken binnen de Europese Unie, tenzij er adequate waarborgen zijn zoals Standard Contractual Clauses. Ten zevende beëindiging en data return: bij beëindiging van de overeenkomst moet de derde partij alle gegevens retourneren of vernietigen, en moet toegang worden beëindigd. Deze contractuele waarborgen moeten worden vastgelegd in standaard contracten die kunnen worden aangepast aan specifieke situaties, en moeten worden beoordeeld door juridische afdeling, CISO en Functionaris Gegevensbescherming voordat zij worden gebruikt. Het is aan te raden om gebruik te maken van standaard contracten die zijn goedgekeurd door de Nederlandse overheid, zoals de Model Verwerkersovereenkomst van de Autoriteit Persoonsgegevens, of sectorale standaard contracten die zijn ontwikkeld voor de publieke sector.

Contractuele waarborgen zijn alleen effectief wanneer zij periodiek worden geverifieerd om te controleren of de derde partij daadwerkelijk voldoet aan de gestelde eisen. Deze verificatie kan plaatsvinden op verschillende manieren. Ten eerste certificeringsverificatie: controleer of de derde partij nog steeds beschikt over relevante certificeringen zoals ISO 27001, SOC 2 Type II of NEN 7510, en of deze certificeringen nog geldig zijn. Certificeringen kunnen worden geverifieerd via publieke registers of door inzicht te vragen in certificaatdocumenten. Ten tweede beveiligingsassessments: voer periodiek – bijvoorbeeld jaarlijks voor hoogrisico partijen, tweejaarlijks voor middelrisico partijen – een beveiligingsassessment uit waarbij wordt gecontroleerd of de derde partij voldoet aan de contractuele beveiligingsvereisten. Dit kan bestaan uit een vragenlijst, een zelfassessment, of een uitgebreidere audit. Ten derde monitoring van activiteiten: gebruik het PowerShell-script en Microsoft 365 logging om te monitoren of de toegang en activiteiten van de derde partij binnen de verwachte parameters blijven, en of er geen onbevoegde of ongebruikelijke activiteiten plaatsvinden. Ten vierde incident monitoring: monitor of de derde partij beveiligingsincidenten heeft gehad die mogelijk impact hebben op de organisatie, bijvoorbeeld door te abonneren op security advisories, door periodiek te zoeken naar nieuws over beveiligingsincidenten bij de partij, of door direct contact te onderhouden met de partij over beveiligingsstatus.

Monitoring en continu beheer

Gebruik PowerShell-script third-party-risk-management.ps1 (functie Invoke-ThirdPartyRiskMonitoring) – Monitort actieve toegang van derde partijen tot Microsoft 365, detecteert onbevoegde of ongebruikelijke activiteiten, en genereert rapportages over risico's en compliance-status. Ondersteunt zowel veilige lokale debug-tests als live monitoring via Microsoft Graph API..

Effectief beheer van risico's van derde partijen vereist continue monitoring en periodieke herbeoordeling, omdat risico's kunnen veranderen wanneer nieuwe derde partijen worden toegevoegd, bestaande partijen wijzigen in toegang of dienstverlening, of wanneer beveiligingsincidenten plaatsvinden. Het bijbehorende PowerShell-script `third-party-risk-management.ps1` is ontworpen om dit proces te automatiseren. Het script monitort periodiek – bijvoorbeeld wekelijks of maandelijks – alle actieve toegang van derde partijen tot Microsoft 365, analyseert toegangspatronen en activiteiten, en genereert rapportages over risico's en compliance-status. Het script doorzoekt Azure Active Directory op gastaccounts en externe accounts, inventariseert alle geregistreerde applicaties en OAuth-apps, controleert externe toegang tot SharePoint-sites en Teams-kanalen, analyseert API-aanroepen en service principal activiteiten, en vergelijkt de actuele situatie met een eerder opgeslagen baseline om wijzigingen te detecteren.

Het script detecteert verschillende typen risico's en aandachtspunten. Ten eerste onbevoegde toegang: toegang die niet is geregistreerd in het centrale register, toegang die is verleend zonder juiste goedkeuring, of toegang die niet meer nodig is maar nog actief is. Ten tweede ongebruikelijke activiteiten: activiteiten die afwijken van het normale patroon, bijvoorbeeld ongebruikelijke tijden, ongebruikelijke locaties, of ongebruikelijke volumes van gegevensaccess. Ten derde wijzigingen in risicoprofiel: nieuwe toegang tot gevoelige gegevens, wijzigingen in geografische locatie, of wijzigingen in certificeringsstatus. Ten vierde compliance-issues: toegang die niet voldoet aan contractuele waarborgen, toegang zonder juiste verwerkersovereenkomst, of toegang die niet is gedocumenteerd. Het script genereert gedetailleerde rapportages die aangeven welke derde partijen mogelijk aandacht vereisen, welke partijen periodieke herbeoordeling nodig hebben, en welke partijen mogelijk niet meer voldoen aan de gestelde criteria. Deze rapportages kunnen worden gebruikt voor periodieke reviews met CISO, Functionaris Gegevensbescherming en risicomanager, en kunnen worden gearchiveerd voor auditdoeleinden.

Naast geautomatiseerde monitoring is het ook belangrijk om periodieke herbeoordeling uit te voeren waarbij het risicoprofiel van elke derde partij wordt geëvalueerd en bijgewerkt. Deze herbeoordeling moet plaatsvinden op basis van de risicoclassificatie: hoogrisico partijen moeten bijvoorbeeld kwartaalherbeoordeling ondergaan, middelrisico partijen halfjaarlijkse herbeoordeling, en laagrisico partijen jaarlijkse herbeoordeling. Tijdens de herbeoordeling wordt gecontroleerd of de risicofactoren nog actueel zijn, of de contractuele waarborgen nog voldoen, of er nieuwe beveiligingsincidenten zijn geweest, en of de toegang nog nodig is. Wanneer blijkt dat een derde partij niet meer voldoet aan de gestelde criteria, of wanneer de toegang niet meer nodig is, moeten passende maatregelen worden genomen, zoals het beperken of beëindigen van toegang, het aanvragen van aanvullende waarborgen, of het escaleren naar management voor besluitvorming. Het proces van monitoring en herbeoordeling moet worden gedocumenteerd, zodat bij een audit of toezicht kan worden aangetoond dat de organisatie proactief omgaat met risico's van derde partijen en dat besluiten zijn genomen op basis van gestructureerde beoordelingen.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# .SYNOPSIS Beheer van risico's van derde partijen in Microsoft 365 .DESCRIPTION Monitort actieve toegang van derde partijen tot Microsoft 365, detecteert onbevoegde of ongebruikelijke activiteiten, en genereert rapportages over risico's en compliance-status. Het script identificeert alle derde partijen die toegang hebben tot of integreren met de Microsoft 365-omgeving, beoordeelt risicoprofielen, en monitort continu toegang en activiteiten. Het script ondersteunt zowel lokale debug-tests als live monitoring via Microsoft Graph API. .NOTES Filename: third-party-risk-management.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-27 Version: 1.0 Related JSON: content/m365/compliance/third-party-risk-management.json Category: compliance Workload: m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\third-party-risk-management.ps1 -Monitoring -DebugMode Voert een lokale debug-run uit zonder verbinding met Microsoft en toont voorbeeldresultaten. .EXAMPLE .\third-party-risk-management.ps1 -Monitoring Monitort alle actieve toegang van derde partijen en genereert een risicorapportage. .EXAMPLE .\third-party-risk-management.ps1 -RemediationGuidance Toont richtlijnen voor risicobeoordeling en beheer van derde partijen. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(HelpMessage = "Monitor actieve toegang van derde partijen en genereer risicorapportage")] [switch]$Monitoring, [Parameter(HelpMessage = "Toon richtlijnen voor risicobeoordeling en beheer van derde partijen")] [switch]$RemediationGuidance, [Parameter(HelpMessage = "Toon welke acties u zou nemen zonder wijzigingen in de tenant")] [switch]$WhatIf, [Parameter(HelpMessage = "Voer een veilige lokale test uit zonder verbinding met Microsoft")] [switch]$DebugMode, [Parameter(HelpMessage = "Pad naar configuratiebestand met risicocriteria")] [string]$ConfigPath = "$PSScriptRoot\third-party-risk-config.json", [Parameter(HelpMessage = "Pad naar registerbestand met geregistreerde derde partijen")] [string]$RegisterPath = "$PSScriptRoot\third-party-register.json" ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Beheer Risico's Derde Partijen – M365" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Get-ThirdPartyRiskConfig { <# .SYNOPSIS Laadt configuratie met risicocriteria voor derde partijen. .DESCRIPTION Leest een JSON-bestand met configuratie voor risicoclassificatie, acceptatiecriteria en monitoring-instellingen. Als het bestand niet bestaat, wordt een standaardconfiguratie gebruikt. .OUTPUTS PSCustomObject met configuratie-instellingen. #> [CmdletBinding()] param() $defaultConfig = @{ HighRiskDataTypes = @("Persoonsgegevens", "Vertrouwelijke informatie", "Financiële gegevens") AllowedRegions = @("EU", "EEA", "Nederland", "Duitsland", "Frankrijk", "Ierland") RequiredCertifications = @("ISO 27001", "ISO 27018", "SOC 2 Type II", "NEN 7510") HighRiskAccessTypes = @("Directe gebruikersaccount toegang", "Onbeperkte API-toegang", "SharePoint site owner") AutoApproveLowRisk = $true RequireManualReviewForNonEU = $true RequireManualReviewForHighRiskData = $true MonitoringFrequency = "Monthly" } if (Test-Path $ConfigPath) { try { $config = Get-Content $ConfigPath -Raw | ConvertFrom-Json Write-Host "Configuratie geladen van: $ConfigPath" -ForegroundColor Gray return $config } catch { Write-Host "Waarschuwing: kon configuratiebestand niet lezen, gebruik standaardinstellingen." -ForegroundColor Yellow return $defaultConfig } } else { Write-Host "Geen configuratiebestand gevonden, gebruik standaardinstellingen." -ForegroundColor Gray Write-Host "Maak een configuratiebestand aan op: $ConfigPath" -ForegroundColor Gray return $defaultConfig } } function Get-ThirdPartyRegister { <# .SYNOPSIS Laadt het centrale register van geregistreerde derde partijen. .DESCRIPTION Leest een JSON-bestand met het register van alle derde partijen die toegang hebben tot Microsoft 365, inclusief risicoclassificatie en beheersmaatregelen. .OUTPUTS Array van PSCustomObject met derde partij informatie. #> [CmdletBinding()] param() if (Test-Path $RegisterPath) { try { $register = Get-Content $RegisterPath -Raw | ConvertFrom-Json Write-Host "Register geladen van: $RegisterPath" -ForegroundColor Gray return $register } catch { Write-Host "Waarschuwing: kon register niet lezen." -ForegroundColor Yellow return @() } } else { Write-Host "Geen register gevonden. Maak een register aan op: $RegisterPath" -ForegroundColor Gray return @() } } function Get-ThirdPartyAccess { <# .SYNOPSIS Haalt alle actieve toegang van derde partijen op uit Microsoft 365. .DESCRIPTION In productie zou dit toegang ophalen via Microsoft Graph API. In DebugMode worden voorbeeldgegevens gebruikt. .OUTPUTS Array van PSCustomObject met toegangsinformatie. #> [CmdletBinding()] param() if ($DebugMode) { Write-Host "DebugMode: gebruik voorbeeldgegevens voor derde partijen." -ForegroundColor Yellow Write-Host "In productie wordt toegang opgehaald via Microsoft Graph API.`n" -ForegroundColor Yellow # Voorbeeldgegevens die typische derde partijen representeren return @( [PSCustomObject]@{ Name = "Externe Consultant BV" Type = "Gastaccount" AccessType = "Directe gebruikersaccount toegang" DataAccess = "Persoonsgegevens" Region = "EU" Country = "Nederland" LastAccess = (Get-Date).AddDays(-5) Services = @("Exchange Online", "SharePoint Online") Certifications = @("ISO 27001") RiskLevel = "Medium" }, [PSCustomObject]@{ Name = "Cloud Integratie App" Type = "OAuth Applicatie" AccessType = "API-toegang met beperkte scopes" DataAccess = "Algemene informatie" Region = "EU" Country = "Duitsland" LastAccess = (Get-Date).AddHours(-2) Services = @("Microsoft Graph API") Certifications = @("ISO 27001", "SOC 2 Type II") RiskLevel = "Low" }, [PSCustomObject]@{ Name = "Analytics Service Provider" Type = "Externe Applicatie" AccessType = "Onbeperkte API-toegang" DataAccess = "Persoonsgegevens" Region = "Non-EU" Country = "Verenigde Staten" LastAccess = (Get-Date).AddMinutes(-30) Services = @("Microsoft Graph API", "SharePoint Online") Certifications = @() RiskLevel = "High" } ) } else { Write-Host "Ophalen van toegang van derde partijen via Microsoft Graph API..." -ForegroundColor Gray Write-Host "Let op: dit vereist verbinding met Microsoft Graph. Implementatie kan variëren per omgeving." -ForegroundColor Yellow # In productie zou hier Microsoft Graph API-calls plaatsvinden # Voor nu: retourneer lege lijst of lees cache Write-Host "Gebruik -DebugMode voor voorbeeldgegevens." -ForegroundColor Yellow return @() } } function Test-ThirdPartyRisk { <# .SYNOPSIS Beoordeelt het risicoprofiel van een derde partij op basis van configuratiecriteria. .DESCRIPTION Classificeert derde partijen als laag, middel of hoog risico op basis van toegangstype, gegevenstoegang, regio, certificeringen en andere factoren. .OUTPUTS PSCustomObject met risicoclassificatie en aandachtspunten. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$ThirdParty, [Parameter(Mandatory = $true)] [PSCustomObject]$Config, [Parameter(Mandatory = $false)] [array]$RegisteredParties ) $risk = [PSCustomObject]@{ Name = $ThirdParty.Name RiskLevel = "Low" Concerns = @() RequiresReview = $false IsRegistered = $false } # Check of derde partij is geregistreerd $registered = $RegisteredParties | Where-Object { $_.Name -eq $ThirdParty.Name } if (-not $registered) { $risk.RiskLevel = "High" $risk.RequiresReview = $true $risk.Concerns += "Derde partij niet geregistreerd in centraal register" } else { $risk.IsRegistered = $true } # Check geografische locatie if ($Config.RequireManualReviewForNonEU -and $ThirdParty.Region -notin $Config.AllowedRegions) { if ($risk.RiskLevel -eq "Low") { $risk.RiskLevel = "High" } $risk.RequiresReview = $true $risk.Concerns += "Derde partij opereert buiten toegestane regio's: $($ThirdParty.Region)" } # Check gegevenstoegang if ($Config.RequireManualReviewForHighRiskData -and $ThirdParty.DataAccess -in $Config.HighRiskDataTypes) { if ($risk.RiskLevel -eq "Low") { $risk.RiskLevel = "Medium" } $risk.Concerns += "Toegang tot hoogrisico gegevenstype: $($ThirdParty.DataAccess)" $risk.RequiresReview = $true } # Check toegangstype if ($ThirdParty.AccessType -in $Config.HighRiskAccessTypes) { if ($risk.RiskLevel -eq "Low") { $risk.RiskLevel = "Medium" } $risk.Concerns += "Hoogrisico toegangstype: $($ThirdParty.AccessType)" } # Check certificeringen $hasRequiredCert = $false foreach ($cert in $Config.RequiredCertifications) { if ($ThirdParty.Certifications -contains $cert) { $hasRequiredCert = $true break } } if (-not $hasRequiredCert -and $ThirdParty.DataAccess -in $Config.HighRiskDataTypes) { if ($risk.RiskLevel -eq "Low") { $risk.RiskLevel = "Medium" } $risk.Concerns += "Geen relevante certificeringen gevonden voor hoogrisico gegevenstoegang" } return $risk } function Invoke-ThirdPartyRiskMonitoring { <# .SYNOPSIS Voert monitoring uit op toegang van derde partijen en rapporteert risico's. .DESCRIPTION Haalt actieve toegang op, vergelijkt met register, beoordeelt risico's en genereert rapportage. .OUTPUTS PSCustomObject met monitoringresultaten. #> [CmdletBinding()] param() $config = Get-ThirdPartyRiskConfig $registeredParties = Get-ThirdPartyRegister $currentAccess = Get-ThirdPartyAccess if ($currentAccess.Count -eq 0) { Write-Host "[WAARSCHUWING] Geen toegang van derde partijen beschikbaar voor analyse." -ForegroundColor Yellow return [PSCustomObject]@{ ScriptName = "third-party-risk-management.ps1" IsCompliant = $false Timestamp = Get-Date TotalThirdParties = 0 Findings = @("Geen toegang van derde partijen beschikbaar voor analyse.") } } $result = [PSCustomObject]@{ ScriptName = "third-party-risk-management.ps1" IsCompliant = $true Timestamp = Get-Date TotalThirdParties = $currentAccess.Count UnregisteredParties = @() HighRiskParties = @() MediumRiskParties = @() Findings = @() } # Risicobeoordeling per derde partij foreach ($thirdParty in $currentAccess) { $risk = Test-ThirdPartyRisk -ThirdParty $thirdParty -Config $config -RegisteredParties $registeredParties if (-not $risk.IsRegistered) { $result.UnregisteredParties += $risk $result.IsCompliant = $false $result.Findings += "Ongeautoriseerde derde partij: $($thirdParty.Name) - niet geregistreerd" } if ($risk.RiskLevel -eq "High") { $result.HighRiskParties += $risk $result.IsCompliant = $false $result.Findings += "Hoogrisico derde partij: $($thirdParty.Name) - $($risk.Concerns -join '; ')" } elseif ($risk.RiskLevel -eq "Medium") { $result.MediumRiskParties += $risk if ($risk.RequiresReview) { $result.Findings += "Middelrisico derde partij vereist review: $($thirdParty.Name) - $($risk.Concerns -join '; ')" } } } # Rapportage Write-Host "`nResultaat monitoring derde partijen:" -ForegroundColor Cyan Write-Host (" Totaal derde partijen : {0}" -f $result.TotalThirdParties) -ForegroundColor White Write-Host (" Niet geregistreerde partijen : {0}" -f $result.UnregisteredParties.Count) -ForegroundColor White Write-Host (" Hoogrisico partijen : {0}" -f $result.HighRiskParties.Count) -ForegroundColor White Write-Host (" Middelrisico partijen : {0}" -f $result.MediumRiskParties.Count) -ForegroundColor White if ($result.IsCompliant -and $result.UnregisteredParties.Count -eq 0 -and $result.HighRiskParties.Count -eq 0) { Write-Host "`n[OK] Geen risico's of ongeregistreerde partijen gedetecteerd." -ForegroundColor Green } else { Write-Host "`n[ATTENTIE] Risico's of compliance-issues gedetecteerd die actie vereisen." -ForegroundColor Yellow if ($result.Findings.Count -gt 0) { Write-Host "Details:" -ForegroundColor Yellow foreach ($finding in $result.Findings) { Write-Host " - $finding" -ForegroundColor Yellow } } } return $result } function Invoke-RemediationGuidance { <# .SYNOPSIS Toont richtlijnen voor risicobeoordeling en beheer van derde partijen. .DESCRIPTION Geeft praktische aanwijzingen voor het beoordelen van risico's van derde partijen, het opstellen van contractuele waarborgen en het monitoren van toegang. #> [CmdletBinding()] param() Write-Host "`nRichtlijnen voor beheer van risico's van derde partijen:" -ForegroundColor Cyan Write-Host "`n1. Identificatie en registratie" -ForegroundColor White Write-Host " - Identificeer alle derde partijen met toegang tot Microsoft 365" -ForegroundColor Gray Write-Host " - Registreer alle partijen in een centraal register" -ForegroundColor Gray Write-Host " - Documenteer type toegang, gegevenstoegang en contractuele basis" -ForegroundColor Gray Write-Host "`n2. Risicobeoordeling" -ForegroundColor White Write-Host " - Laag risico: Beperkte toegang, binnen EU, adequate certificeringen" -ForegroundColor Gray Write-Host " - Middel risico: Toegang tot gevoelige gegevens, maar binnen EU" -ForegroundColor Gray Write-Host " - Hoog risico: Buiten EU, geen certificeringen, directe toegang tot gevoelige gegevens" -ForegroundColor Gray Write-Host "`n3. Contractuele waarborgen" -ForegroundColor White Write-Host " - Standaard beveiligings- en privacyclausules in alle overeenkomsten" -ForegroundColor Gray Write-Host " - Verwerkersovereenkomst voor partijen die persoonsgegevens verwerken" -ForegroundColor Gray Write-Host " - Recht op audit en verificatie van contractuele waarborgen" -ForegroundColor Gray Write-Host "`n4. Monitoring en herbeoordeling" -ForegroundColor White Write-Host " - Periodieke monitoring van actieve toegang en activiteiten" -ForegroundColor Gray Write-Host " - Detectie van onbevoegde of ongebruikelijke activiteiten" -ForegroundColor Gray Write-Host " - Herbeoordeling op basis van risicoclassificatie (kwartaal/jaar)" -ForegroundColor Gray Write-Host "`n5. Beëindiging en opruiming" -ForegroundColor White Write-Host " - Beëindig toegang wanneer niet meer nodig" -ForegroundColor Gray Write-Host " - Zorg voor data return of vernietiging bij beëindiging" -ForegroundColor Gray Write-Host " - Documenteer beëindiging voor auditdoeleinden" -ForegroundColor Gray if ($WhatIf) { Write-Host "`nWhatIf: bovenstaande richtlijnen beschrijven het proces, er worden geen acties uitgevoerd." -ForegroundColor Yellow } } try { if ($RemediationGuidance) { Invoke-RemediationGuidance } elseif ($Monitoring) { $monitorResult = Invoke-ThirdPartyRiskMonitoring if ($monitorResult.IsCompliant -and $monitorResult.UnregisteredParties.Count -eq 0) { exit 0 } else { exit 1 } } else { Write-Host "Beschikbare parameters:" -ForegroundColor Yellow Write-Host " -Monitoring : Monitor toegang van derde partijen en genereer risicorapportage" -ForegroundColor Gray Write-Host " -RemediationGuidance : Toon richtlijnen voor risicobeoordeling en beheer" -ForegroundColor Gray Write-Host " -DebugMode : Voer een veilige lokale test uit" -ForegroundColor Gray Write-Host " -WhatIf : Toon richtlijnen zonder actie" -ForegroundColor Gray Write-Host "`nVoorbeeld: .\third-party-risk-management.ps1 -Monitoring -DebugMode" -ForegroundColor Cyan } } catch { Write-Error "Scriptuitvoering is mislukt: $_" exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # Exitcodes: # 0 = Compliant, geen risico's # 1 = Niet compliant of risico's gedetecteerd # 2 = Fout tijdens uitvoering

Risico zonder implementatie

Risico zonder implementatie
High: Zonder gestructureerd beheer van risico's van derde partijen kan de organisatie niet aantonen dat zij voldoet aan AVG-, BIO- en NIS2-vereisten voor risicobeheer van leveranciers en serviceproviders. Dit leidt tot verhoogd risico op beveiligingsincidenten en datalekken via derde partijen, mogelijke sancties van toezichthouders en reputatieschade.

Management Samenvatting

Richt een gestructureerd proces in voor het identificeren, beoordelen, monitoren en beheersen van risico's van derde partijen binnen Microsoft 365. Gebruik het bijbehorende PowerShell-script voor geautomatiseerde monitoring en rapportage, en zorg voor duidelijke governance met toegewezen rollen en verantwoordelijkheden. Dit artikel en script geven Nederlandse overheidsorganisaties een praktisch kader om compliance-compliant om te gaan met risico's van derde partijen in moderne cloudomgevingen.