Third-Party Risk Assessment Voor Microsoft 365 En SaaS-leveranciers

💼 Management Samenvatting

Third-party risk assessment binnen Microsoft 365 gaat veel verder dan een traditionele leveranciersvragenlijst. Nederlandse overheidsorganisaties moeten structureel inzicht hebben in de beveiligingspositie, toegangsniveaus en integraties van iedere SaaS-leverancier die verbinding maakt met hun tenant. Dit artikel beschrijft hoe u third-party risico's rond Microsoft 365, Entra ID en gekoppelde cloudservices systematisch in kaart brengt en borgt.

Aanbeveling
PLAN_EN_IMPLEMENTEER
Risico zonder
Hoog
Risk Score
8/10
Implementatie
200u (tech: 120u)
Van toepassing op:
Rijksoverheid
Gemeenten
ZBO's en agentschappen
Kritieke en belangrijke NIS2-entiteiten
Shared Service Centers

Incidenten uit de laatste jaren tonen aan dat aanvallers steeds vaker via leveranciers of integratiepartners binnenkomen. Voor de publieke sector betekent dit dat een zwak beveiligde documentverwerker, HR-applicatie of planningstool directe gevolgen kan hebben voor de vertrouwelijkheid en beschikbaarheid van overheidsinformatie. NIS2, BIO en AVG verplichten organisaties om ook de ketenbeveiliging aantoonbaar te beheersen. Zonder gestructureerde third-party risk assessment is het onmogelijk om uit te leggen welke applicaties toegang hebben tot de Microsoft 365-tenant, welke rechten zij gebruiken en welke risicoafwegingen daarbij zijn gemaakt. Bestuurders, auditdiensten en toezichthouders vragen daarom expliciet naar een actueel en onderbouwd overzicht van leveranciersrisico's.

PowerShell Modules Vereist
Primary API: Microsoft Graph PowerShell, Microsoft 365 Defender portal, Entra ID portal
Connection: Interactieve Connect-MgGraph voor ad-hoc beoordelingen en service principal voor periodieke JSON-rapportages richting GRC- en auditdossiers.
Required Modules: Microsoft.Graph.Authentication

Implementatie

Dit artikel introduceert een praktijkgericht raamwerk voor third-party risk assessment rond Microsoft 365. We beschrijven hoe u de leveranciersketen in kaart brengt, hoe u technische signalen uit Entra ID, Microsoft Graph en Microsoft 365 Defender gebruikt om risico's te objectiveren, en hoe u uitkomsten vastlegt in contracten, DPIA's en risicoregisters. Het bijbehorende PowerShell-script third-party-risk-assessment.ps1 automatiseert de inventarisatie van enterprise-applicaties, service principals, OAuth-consent en mailbox- of SharePoint-toegang en levert JSON-rapporten die direct bruikbaar zijn voor governance- en auditdoeleinden.

Governance, ketenoverzicht en juridische borging

Effectief third-party risk management begint bij een volledig ketenoverzicht. Veel organisaties weten wel welke leveranciers een contract hebben, maar niet welke technische koppelingen daadwerkelijk bestaan met Microsoft 365. Een volwassen Nederlandse overheidsorganisatie brengt daarom alle applicaties, integraties en dienstverleners in kaart die gebruikmaken van Entra ID-registraties, uitwisselen met Exchange Online, SharePoint, Teams of OneDrive, of gebruikmaken van Defender-API's. Dit overzicht wordt niet alleen als Excel-lijst bijgehouden, maar is een integraal onderdeel van het informatiebeveiligings- en privacybeleid. Het bevat per leverancier onder meer het type dienstverlening, de verwerkte gegevens (inclusief dataclassificatie), de toegepaste authenticatiemechanismen en de toegewezen machtigingen in de tenant. Door dit overzicht centraal te beheren – bijvoorbeeld in een GRC-tool of een geregistreerd JSON-dossier – kan de organisatie aantonen dat zij de keten structureel overziet en beheerst.

Governance rond third-party risk assessment vraagt om heldere rollen en verantwoordelijkheden. Het CISO-office definieert het raamwerk en de risicocriteria, de inkoopafdeling bewaakt dat contracten voldoen aan de gestelde minimumvereisten, en de servicemanagers volgen operationele prestaties en incidenten. Juridische afdelingen en privacy officers beoordelen verwerkersovereenkomsten, DPIA's en doorgifte-afspraken, terwijl functioneel beheerders en architecten zich richten op technische integriteit en beveiligingsarchitectuur. Een veelgemaakte fout is dat leveranciersbeoordeling volledig wordt uitbesteed aan inkoop, zonder dat security en privacy structureel zijn aangehaakt. Dit leidt tot contracten waarin wel servicelevels zijn geregeld, maar waarin MFA, logging, dataretentie en exportcontroles onvoldoende zijn vastgelegd. Het governancekader in dit artikel benadrukt daarom dat iedere leverancier met toegang tot Microsoft 365 expliciet wordt beoordeeld door een multidisciplinair team voordat productie-integraties worden toegestaan.

Juridische borging vertaalt de uitkomsten van third-party risk assessment naar concrete verplichtingen. Verwerkersovereenkomsten verwijzen niet alleen naar algemene normen als AVG en BIO, maar leggen ook technische minimumeisen vast: moderne authenticatie via Entra ID, verplicht gebruik van MFA voor beheeraccounts, encryptie in transit en at rest, en verplichting tot tijdige patching. In contracten worden insluittende clausules opgenomen over meldplichten bij beveiligingsincidenten, periodieke penetratietesten en het recht op audit of onafhankelijke assurance-rapportages (zoals ISAE 3402 of SOC 2). Voor NIS2-entiteiten is het bovendien noodzakelijk om in uitbestedingscontracten vast te leggen hoe de leverancier meewerkt aan melding van significante incidenten bij nationale CSIRT's. Dit artikel beschrijft hoe u juridische bepalingen koppelt aan het technische leveranciersprofiel, zodat duidelijk is welke risico's zijn geaccepteerd en welke maatregelen een harde contractuele voorwaarde vormen.

Een gestructureerd ketenoverzicht helpt bestuurders om strategische keuzes te maken. Door leveranciers te clusteren naar kritikaliteit, dataclassificatie en afhankelijkheid van Microsoft 365 ontstaat een overzicht van waar de grootste ketenrisico's liggen. Voor essentiële SaaS-diensten, zoals zaaksystemen, HR-platformen of informatie-uitwisselingsportalen, kan de organisatie besluiten om aanvullende eisen te stellen, zoals token binding, dedicated tenants of striktere toegangs- en logging-eisen. Minder kritieke diensten volstaan mogelijk met een lichter regime. Het governancekader adviseert daarom om third-party risk assessment niet als een eenmalige checklist te benaderen, maar als een doorlopend proces dat is ingebed in het bredere risicomanagement en de portfoliosturing van de organisatie.

Technische inventarisatie, risicometing en continuous monitoring

Gebruik PowerShell-script third-party-risk-assessment.ps1 (functie Invoke-ThirdPartyRiskAssessment) – Inventariseert enterprise-applicaties, service principals en OAuth-machtigingen in Entra ID, combineert deze met risicoprofielen en genereert een JSON-rapport met bevindingen en prioriteiten..

Een third-party risk assessment is pas betrouwbaar wanneer het wordt gebaseerd op feitelijke technische gegevens, niet alleen op ingevulde vragenlijsten. Microsoft 365 en Entra ID bieden een rijke set aan signalen: geregistreerde enterprise-applicaties, service principals, toegewezen API-permissies, consent door gebruikers of beheerders, en gebruikte authenticatiemethoden. Door deze gegevens systematisch via Microsoft Graph op te halen, ontstaat een actueel overzicht van alle externe applicaties met toegang tot de tenant. Het meegeleverde PowerShell-script bouwt precies zo'n inventarisatie op, waarbij per applicatie onder meer de naam, uitgever, type, gebruikte machtigingen, toegewezen gebruikers en groepen, en riskante combinaties (zoals full_access_as_app of toegang tot alle mailboxen) worden geregistreerd. Hierdoor krijgt de organisatie grip op het werkelijke aanvalsoppervlak in de keten.

Op basis van deze inventarisatie kan een risicoscore per leverancier worden berekend. Factoren zijn onder meer de gevoeligheid van de betrokken data, de reikwijdte van de verleende machtigingen, het type consent (per gebruiker of tenant-breed), het gebruik van moderne authenticatie en de aanwezigheid van aanvullende beveiligingsmaatregelen zoals conditional access policies. Het artikel beschrijft een praktische scoringsmethodiek die leveranciers indeelt in risicoklassen, bijvoorbeeld laag, gemiddeld en hoog. Leveranciers met brede machtigingen, toegang tot vertrouwelijke data en beperkte loggingcapaciteiten belanden automatisch in de hoogste risicoklasse en vereisen aanvullende maatregelen of periodieke herbeoordeling. De aanpak sluit aan bij Nederlandse kaders voor risicomanagement, waardoor de uitkomsten eenvoudig kunnen worden ingepast in bestaande risicoregisters en dashboards.

Continuous monitoring zorgt ervoor dat third-party risico's niet verouderen tussen twee beoordelingsmomenten in. Nieuwe applicaties worden bijna dagelijks toegevoegd – soms door innovatie, soms door schaduw-IT – en bestaande leveranciers breiden machtigingen of functionaliteit uit. Het script kan daarom als geplande taak of in een CI/CD-pijplijn worden uitgevoerd om op vaste intervallen een nieuwe JSON-snapshot te genereren. Door de resultaten te vergelijken met een referentieconfiguratie kunnen afwijkingen automatisch worden gedetecteerd: nieuwe applicaties, gewijzigde machtigingen of applicaties waarvan de uitgever is veranderd. Deze signalen kunnen worden doorgestuurd naar Microsoft Sentinel of een GRC-tool, waar automatische workflows meldingen genereren voor CISO-office of servicemanagers. Zo blijft third-party risk assessment geen momentopname, maar een doorlopende controlelaag rond de Microsoft 365-tenant.

Technische inventarisatie en risicometing moeten altijd in nauwe samenhang met organisatorische processen worden ingericht. Wanneer continuous monitoring nieuwe of gewijzigde applicaties detecteert, moet helder zijn wie beoordeelt of deze wijziging acceptabel is, welke aanvullende contractuele of technische maatregelen nodig zijn, en hoe gebruikers hierover worden geïnformeerd. Het artikel adviseert daarom om de scriptuitvoer direct te koppelen aan change- en releaseprocessen, zodat geen enkele nieuwe integratie productief wordt zonder formele beoordeling. Zo ontstaat een gesloten feedbacklus tussen techniek, processen en governance, waarin third-party risico's structureel en aantoonbaar worden beheerst.

Operationele uitvoering, rapportage en auditevidence

Gebruik PowerShell-script third-party-risk-assessment.ps1 (functie Invoke-ThirdPartyMonitoring) – Combineert actuele third-party inventarisaties met een referentieconfiguratie en levert auditklare rapportages met trends, uitzonderingen en genomen maatregelen..

Operationele uitvoering van third-party risk management betekent dat uitkomsten van assessments worden vertaald naar concrete acties. Voor leveranciers met een hoog risicoprofiel kan dit leiden tot het beperken van machtigingen, het afdwingen van aanvullende logging, het verplaatsen van verwerkingen naar minder gevoelige datazones of – in uiterste gevallen – het beëindigen van de samenwerking. Het artikel beschrijft hoe u per risicoklasse standaardmaatregelen definieert, zodat servicemanagers weten welke acties minimaal zijn vereist en waar zij beleidsmatig ruimte hebben om aanvullende maatregelen te nemen. Dit voorkomt willekeur en maakt het mogelijk om beslissingen achteraf te verantwoorden richting bestuurders en toezichthouders.

Rapportage vormt een cruciale schakel tussen dagelijkse operatie en governance. Het PowerShell-script genereert JSON-rapporten die per leverancier inzicht geven in machtigingen, risicoscore, toegepaste maatregelen en openstaande acties. Deze rapporten kunnen worden ingelezen in Power BI of GRC-oplossingen, zodat bestuurders en auditcommissies periodiek een geconsolideerd beeld krijgen van ketenrisico's. Specifieke indicatoren zijn bijvoorbeeld het aantal leveranciers met toegang tot zeer vertrouwelijke data, het percentage applicaties met tenant-brede consent, het aantal openstaande risicobeperkende acties en de doorlooptijd tussen detectie van een nieuw risico en implementatie van maatregelen. Door deze KPI's te standaardiseren en te koppelen aan de reguliere rapportagecyclus ontstaat een herhaalbaar en toetsbaar mechanisme.

Auditevidence rondom third-party risico's moet verder gaan dan beleidsdocumenten en contracten. Toezichthouders en interne auditdiensten willen zien dat de feitelijke technische inrichting overeenkomt met het beschreven beleid. De door het script gegenereerde JSON-rapporten dienen hiervoor als objectieve bron, waarin aantoonbaar is vastgelegd welke applicaties toegang hadden, welke machtigingen actief waren en welke risicobeoordeling is gemaakt. Door deze rapporten systematisch te archiveren binnen de bewaartermijnen van het informatiebeheerbeleid, kan de organisatie bij terugwerkende kracht laten zien welke ketenmaatregelen golden tijdens een incident of auditperiode. Het artikel adviseert om deze rapporten expliciet te koppelen aan DPIA's, verwerkersovereenkomsten en risicoregisters, zodat het volledige spoor van beleid naar implementatie en controle zichtbaar is.

Tot slot benadrukt dit artikel het belang van transparante communicatie richting interne en externe stakeholders. Medewerkers moeten begrijpen waarom bepaalde applicaties niet (meer) zijn toegestaan of waarom extra goedkeuring nodig is voor het gebruik van specifieke integraties. Leveranciers moeten tijdig worden geïnformeerd over aangescherpte beveiligingseisen, zodat zij hun diensten kunnen aanpassen zonder de continuïteit van kritieke processen in gevaar te brengen. Door third-party risk assessment te positioneren als onderdeel van een gezamenlijk streven naar een veilige digitale overheid – en door de resultaten te delen in begrijpelijke taal – ontstaat begrip en draagvlak in plaats van weerstand. Daarmee wordt third-party risk management geen rem op innovatie, maar een randvoorwaarde voor verantwoorde digitale samenwerking.

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 Third-party risk assessment en monitoring voor Microsoft 365 en Entra ID leveranciersintegraties. .DESCRIPTION Inventariseert enterprise-applicaties en service principals in Entra ID, analyseert verleende machtigingen en ondersteunt continuous monitoring van third-party risico's. DebugMode genereert voorbeelddata zodat lokale tests binnen vijftien seconden kunnen worden uitgevoerd. .NOTES Filename: third-party-risk-assessment.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-27 Version: 1.0 Gerelateerd JSON: content/m365/vendor/third-party-risk-assessment.json Workload: m365 Category: vendor .EXAMPLE .\third-party-risk-assessment.ps1 -Assessment -ReportPath .\rapporten\third-party-risk.json Voert een third-party risk assessment uit en slaat het resultaat op als JSON. .EXAMPLE .\third-party-risk-assessment.ps1 -Monitoring -ReportPath .\rapporten\third-party-monitoring.json Combineert een actuele inventarisatie met de referentieconfiguratie voor auditing en trendanalyse. .EXAMPLE .\third-party-risk-assessment.ps1 -PublishBaseline Genereert of ververst het third-party risk referentieconfiguratiebestand. #> #Requires -Version 5.1 [CmdletBinding()] param( [switch]$Assessment, [switch]$Monitoring, [switch]$PublishBaseline, [string]$ReportPath, [switch]$DebugMode, [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Third-Party Risk Assessment Toolkit" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Get-ThirdPartyConfigPath { [CmdletBinding()] param() $scriptDir = Split-Path -Parent $PSCommandPath return (Join-Path -Path $scriptDir -ChildPath "third-party-risk.config.json") } function Test-RequiredModules { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string[]]$ModuleNames ) foreach ($moduleName in $ModuleNames) { if (-not (Get-Module -ListAvailable -Name $moduleName -ErrorAction SilentlyContinue)) { throw "Vereiste module '$moduleName' is niet gevonden. Installeer de module en voer het script opnieuw uit." } } } function Ensure-GraphConnection { [CmdletBinding()] param() Test-RequiredModules -ModuleNames @('Microsoft.Graph.Authentication') Import-Module Microsoft.Graph.Authentication -ErrorAction Stop | Out-Null $requiredScopes = @( 'Application.Read.All', 'Directory.Read.All' ) $context = Get-MgContext -ErrorAction SilentlyContinue $needsConnect = $true if ($context) { $scopeDifference = Compare-Object -ReferenceObject $requiredScopes -DifferenceObject $context.Scopes if ($scopeDifference.Count -eq 0 -and $context.ExpirationTime -gt (Get-Date)) { $needsConnect = $false } } if ($needsConnect) { Write-Host "Verbinding maken met Microsoft Graph..." -ForegroundColor Gray Connect-MgGraph -Scopes $requiredScopes -NoWelcome | Out-Null } } function Invoke-GraphPagedRequest { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Uri ) $results = @() $nextLink = $Uri while ($nextLink) { $response = Invoke-MgGraphRequest -Method GET -Uri $nextLink -OutputType PSObject if ($response.value) { $results += $response.value } $nextLink = $response.'@odata.nextLink' } return $results } function Get-ThirdPartyApplicationSnapshot { [CmdletBinding()] param( [switch]$DebugMode ) if ($DebugMode) { return @( [PSCustomObject]@{ AppId = '00000000-0000-0000-0000-000000000111' DisplayName = 'HR-SaaS leverancier' Publisher = 'HR Cloud BV' SignInAudience = 'AzureADMultipleOrgs' Permissions = @('Mail.Read', 'User.Read.All') AdminConsent = $true HighRiskScopes = @('User.Read.All') DataClassification = 'Vertrouwelijk' }, [PSCustomObject]@{ AppId = '00000000-0000-0000-0000-000000000222' DisplayName = 'Planningstool' Publisher = 'Planning Cloud' SignInAudience = 'AzureADMyOrg' Permissions = @('Calendars.Read') AdminConsent = $false HighRiskScopes = @() DataClassification = 'Intern' } ) } Ensure-GraphConnection $uri = "https://graph.microsoft.com/v1.0/applications?`$select=id,appId,displayName,signInAudience" $applications = Invoke-GraphPagedRequest -Uri $uri $snapshots = @() foreach ($app in $applications) { $servicePrincipals = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/servicePrincipals?`$filter=appId eq '$($app.appId)'&`$select=id,displayName,appId" -OutputType PSObject $sp = $servicePrincipals.value | Select-Object -First 1 $permissions = @() $highRiskScopes = @() if ($sp) { $oauthGrants = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/oauth2PermissionGrants?`$filter=clientId eq '$($sp.id)'" -OutputType PSObject foreach ($grant in $oauthGrants.value) { if ($grant.scope) { $scopes = $grant.scope -split ' ' $permissions += $scopes } } } $permissions = $permissions | Sort-Object -Unique $highRiskScopes = $permissions | Where-Object { $_ -in @( 'Mail.Read', 'Mail.ReadWrite', 'Mail.ReadWrite.All', 'Mail.ReadBasic.All', 'Files.Read.All', 'Files.ReadWrite.All', 'User.Read.All', 'Directory.Read.All', 'Directory.AccessAsUser.All' ) } $snapshot = [PSCustomObject]@{ AppId = $app.appId DisplayName = $app.displayName Publisher = $null SignInAudience = $app.signInAudience Permissions = $permissions AdminConsent = ($permissions.Count -gt 0) HighRiskScopes = $highRiskScopes DataClassification = 'Onbekend' } $snapshots += $snapshot } return $snapshots } function Initialize-ThirdPartyConfig { [CmdletBinding()] param( [Parameter(Mandatory = $true)] $Assessment ) $config = [ordered]@{ version = "1.0" lastUpdated = (Get-Date).ToString("yyyy-MM-dd") owner = "Vendor risk board" riskModel = @( "Classificeer leveranciers op basis van machtigingen, datagevoeligheid en kritikaliteit.", "Beperk brede Graph-machtigingen tot strikt noodzakelijke applicaties.", "Herbeoordeel high-risk leveranciers minimaal jaarlijks." ) applications = @() } if ($Assessment) { foreach ($app in $Assessment.Applications) { $config.applications += [ordered]@{ appId = $app.AppId displayName = $app.DisplayName signInAudience = $app.SignInAudience permissions = $app.Permissions highRiskScopes = $app.HighRiskScopes } } } return $config } function Invoke-ThirdPartyRiskAssessment { [CmdletBinding()] param( [switch]$DebugMode ) $applications = Get-ThirdPartyApplicationSnapshot -DebugMode:$DebugMode $issues = [System.Collections.Generic.List[string]]::new() foreach ($app in $applications) { if ($app.HighRiskScopes -and $app.HighRiskScopes.Count -gt 0) { $issues.Add("Applicatie '$($app.DisplayName)' gebruikt high-risk scopes: $($app.HighRiskScopes -join ', ').") } if ($app.SignInAudience -eq 'AzureADandPersonalMicrosoftAccount') { $issues.Add("Applicatie '$($app.DisplayName)' ondersteunt persoonlijke Microsoft-accounts; beoordeel of dit acceptabel is voor overheidsdata.") } } $assessment = [PSCustomObject]@{ Script = 'third-party-risk-assessment.ps1' Timestamp = Get-Date Applications = $applications Issues = $issues IsHealthy = ($issues.Count -eq 0) } return $assessment } function Invoke-ThirdPartyBaselinePublish { [CmdletBinding()] param( [switch]$DebugMode ) $assessment = Invoke-ThirdPartyRiskAssessment -DebugMode:$DebugMode $config = Initialize-ThirdPartyConfig -Assessment $assessment $configPath = Get-ThirdPartyConfigPath if ($WhatIf) { Write-Host "[WhatIf] Third-party configuratie zou worden opgeslagen op $configPath" -ForegroundColor Yellow } else { $config | ConvertTo-Json -Depth 6 | Out-File -FilePath $configPath -Encoding UTF8 -Force Write-Host "[OK] Third-party configuratie opgeslagen: $configPath" -ForegroundColor Green } return $config } function Invoke-ThirdPartyMonitoring { [CmdletBinding()] param( [switch]$DebugMode ) $assessment = Invoke-ThirdPartyRiskAssessment -DebugMode:$DebugMode $configPath = Get-ThirdPartyConfigPath $config = $null if (Test-Path -Path $configPath) { $config = Get-Content -Path $configPath -Raw | ConvertFrom-Json } else { Write-Host "[WARN] Geen third-party configuratiebestand gevonden (verwacht: $configPath)." -ForegroundColor Yellow } $monitoring = [PSCustomObject]@{ Script = 'third-party-risk-assessment.ps1' Timestamp = Get-Date ConfigPath = $configPath ConfigDetected = [bool]$config ConfigVersion = if ($config) { $config.version } else { "not-found" } LastConfigUpdate = if ($config) { $config.lastUpdated } else { $null } Assessment = $assessment } return $monitoring } function Write-ThirdPartyReport { [CmdletBinding()] param( [Parameter(Mandatory = $true)] $Payload, [Parameter(Mandatory = $true)] [string]$Path ) if (-not $Path) { return } $directory = Split-Path -Parent $Path if ($directory -and -not (Test-Path -Path $directory)) { New-Item -ItemType Directory -Path $directory -Force | Out-Null } $Payload | ConvertTo-Json -Depth 6 | Out-File -FilePath $Path -Encoding UTF8 -Force Write-Host "[OK] Rapport geschreven naar $Path" -ForegroundColor Green } $executed = $false if ($PublishBaseline) { $config = Invoke-ThirdPartyBaselinePublish -DebugMode:$DebugMode if ($ReportPath) { Write-ThirdPartyReport -Payload $config -Path $ReportPath } $executed = $true $config } if ($Assessment) { $result = Invoke-ThirdPartyRiskAssessment -DebugMode:$DebugMode if ($ReportPath) { Write-ThirdPartyReport -Payload $result -Path $ReportPath } $executed = $true $result } if ($Monitoring) { $monitoringResult = Invoke-ThirdPartyMonitoring -DebugMode:$DebugMode if ($ReportPath) { Write-ThirdPartyReport -Payload $monitoringResult -Path $ReportPath } $executed = $true $monitoringResult } if (-not $executed) { Write-Host "Geen modus opgegeven. Gebruik ten minste een van de volgende opties:" -ForegroundColor Yellow Write-Host " -Assessment Voer een third-party risk assessment uit." -ForegroundColor Yellow Write-Host " -PublishBaseline Genereer of vernieuw het third-party configuratiebestand." -ForegroundColor Yellow Write-Host " -Monitoring Combineer assessmentgegevens met het configuratiebestand." -ForegroundColor Yellow Write-Host "Optioneel: -DebugMode voor lokale tests, -ReportPath voor JSON-rapportage." -ForegroundColor Yellow } Write-Host "`n========================================`n" -ForegroundColor Cyan

Risico zonder implementatie

Risico zonder implementatie
Hoog: Zonder gestructureerd third-party risk assessment rond Microsoft 365 blijft onduidelijk welke leveranciers toegang hebben, welke machtigingen zij gebruiken en hoe ketenrisico's worden beheerst. Dit maakt aantoonbare naleving van NIS2, BIO en AVG onmogelijk.

Management Samenvatting

Richt een integraal third-party risk framework in voor Microsoft 365: combineer juridisch ketenbeheer met technische inventarisatie via het script third-party-risk-assessment.ps1, borg continuous monitoring en leg alle uitkomsten vast in contracten, DPIA's en risicoregisters.