Verwerkersovereenkomsten Voor Microsoft 365 En Azure

💼 Management Samenvatting

Wanneer Nederlandse overheidsorganisaties Microsoft 365 en Azure gebruiken, werken zij samen met Microsoft als verwerker van persoonsgegevens. Volgens artikel 28 van de Algemene Verordening Gegevensbescherming (AVG) is een verwerkersovereenkomst (Data Processing Agreement, DPA) verplicht tussen de organisatie als verantwoordelijke en Microsoft als verwerker. Deze overeenkomst legt vast onder welke voorwaarden Microsoft persoonsgegevens mag verwerken, welke beveiligingsmaatregelen worden toegepast, hoe subverwerkers worden beheerd en welke rechten en plichten beide partijen hebben. Een goed beheer van verwerkersovereenkomsten is essentieel voor AVG-compliance en vormt de juridische basis voor het gebruik van clouddiensten.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
60u (tech: 20u)
Van toepassing op:
M365
Exchange Online
SharePoint Online
OneDrive
Teams
Azure
Publieke Sector
Overheidsorganisaties

Zonder een correcte en actuele verwerkersovereenkomst met Microsoft lopen Nederlandse overheidsorganisaties aanzienlijke juridische en compliance-risico's. Juridisch gezien schenden zij artikel 28 van de AVG, wat kan leiden tot boetes van de Autoriteit Persoonsgegevens tot €20 miljoen of 4% van de wereldwijde jaaromzet. Bovendien kunnen organisaties niet overtuigend aantonen dat zij voldoen aan de verantwoordingsplicht uit artikel 5 en 24 van de AVG, wat problemen veroorzaakt bij audits, rekenkameronderzoeken en toezicht door de Autoriteit Persoonsgegevens. Organisatorisch ontstaat onduidelijkheid over wie verantwoordelijk is voor welke aspecten van gegevensbescherming, welke subverwerkers betrokken zijn bij de verwerking en hoe incidenten en datalekken moeten worden afgehandeld. Technisch gezien ontbreekt zonder een DPA een heldere basis voor het beoordelen of Microsoft voldoet aan de contractuele afspraken rond beveiliging, datalocatie, logging en toegangscontrole. Bovendien maakt de complexe structuur van Microsoft-clouddiensten, met honderden subverwerkers en regelmatige wijzigingen in de dienstverlening, het noodzakelijk om continu te monitoren of de DPA nog actueel is en of nieuwe subverwerkers tijdig worden geaccepteerd of afgewezen.

PowerShell Modules Vereist
Primary API: Microsoft Service Trust Portal, Microsoft 365 Admin Center, Azure Portal
Connection: Webinterface, REST API's
Required Modules:

Implementatie

Dit artikel beschrijft een praktische aanpak voor het beheren van verwerkersovereenkomsten met Microsoft voor Microsoft 365 en Azure binnen Nederlandse overheidsorganisaties. Het artikel behandelt drie samenhangende aspecten: het verkrijgen en accepteren van de Microsoft DPA, het beheren van subverwerkers en het monitoren van compliance met de contractuele afspraken. De eerste pijler beschrijft hoe organisaties de Microsoft DPA kunnen activeren via het Microsoft 365 Admin Center of Azure Portal, welke versie van de DPA geschikt is voor Nederlandse organisaties (bijvoorbeeld de EU Model Clauses-versie) en hoe de DPA wordt gedocumenteerd en beheerd binnen de organisatie. De tweede pijler gaat in op het beheer van subverwerkers: Microsoft werkt met honderden subverwerkers voor verschillende diensten, en organisaties moeten kunnen zien welke subverwerkers betrokken zijn, waar deze gevestigd zijn en of zij passende waarborgen bieden. Het artikel beschrijft hoe organisaties gebruik maken van het Microsoft Service Trust Portal om subverwerkers te monitoren, hoe zij wijzigingen in subverwerkers evalueren en hoe zij indien nodig bezwaar kunnen maken tegen nieuwe subverwerkers. De derde pijler behandelt het monitoren van compliance: hoe organisaties periodiek controleren of Microsoft voldoet aan de contractuele afspraken rond beveiliging, datalocatie, logging en incidentafhandeling, en hoe zij deze controles documenteren voor audit-doeleinden. Het bijbehorende PowerShell-script ondersteunt organisaties bij het monitoren van de status van de DPA en het bijhouden van wijzigingen in subverwerkers, zodat compliance niet afhankelijk blijft van handmatige controles maar structureel wordt geborgd.

Microsoft DPA activeren en accepteren

De eerste stap in het beheren van verwerkersovereenkomsten met Microsoft is het activeren en accepteren van de Microsoft Data Processing Agreement (DPA). Microsoft biedt een standaard DPA aan die voldoet aan de eisen van artikel 28 van de AVG en die automatisch van toepassing is wanneer organisaties Microsoft 365 of Azure gebruiken. Deze DPA is echter niet automatisch geactiveerd: organisaties moeten expliciet de DPA accepteren via het Microsoft 365 Admin Center of Azure Portal. Voor Nederlandse overheidsorganisaties is het essentieel om de juiste versie van de DPA te selecteren. Microsoft biedt verschillende varianten aan, waaronder een versie met EU Model Clauses (Standard Contractual Clauses) die specifiek is afgestemd op organisaties binnen de Europese Unie. Deze versie bevat aanvullende waarborgen voor internationale gegevensoverdrachten en is bij voorkeur te gebruiken voor Nederlandse overheidsorganisaties die moeten voldoen aan strikte eisen rond gegevenssoevereiniteit en datalocatie.

Het activeren van de Microsoft DPA gebeurt via het Microsoft 365 Admin Center onder Organisatie-instellingen, Privacy en beveiliging, of via de Azure Portal onder Privacy en compliance. De beheerder met de juiste rechten (bijvoorbeeld Global Administrator of Compliance Administrator) kan hier de DPA bekijken, de voorwaarden accepteren en de acceptatie vastleggen. Het is belangrijk om deze acceptatie te documenteren, bijvoorbeeld door een screenshot te maken van de acceptatiepagina, de datum en tijd van acceptatie vast te leggen en deze informatie op te slaan in een centraal beheerd compliance-dossier. Daarnaast moet de organisatie intern vastleggen wie verantwoordelijk is voor het beheren van de DPA, wanneer de DPA periodiek wordt herzien en hoe wijzigingen in de DPA worden geëvalueerd en geaccepteerd. Voor grotere organisaties met meerdere tenants of abonnementen is het belangrijk om te controleren of de DPA voor alle relevante tenants en abonnementen is geactiveerd, zodat er geen hiaten ontstaan in de contractuele dekking.

Naast de standaard Microsoft DPA kunnen organisaties in specifieke gevallen behoefte hebben aan aanvullende contractuele afspraken. Dit kan bijvoorbeeld het geval zijn wanneer organisaties werken met bijzondere persoonsgegevens, gevoelige overheidsinformatie of specifieke sectorale eisen (zoals NEN 7510 in de zorg of onderwijs-specifieke privacy-eisen). In dergelijke gevallen kunnen organisaties via Microsoft Enterprise Agreements of via hun Microsoft-partner aanvullende clausules overeenkomen, bijvoorbeeld rond extra beveiligingsmaatregelen, uitgebreidere logging, specifieke datalocatie-eisen of aangepaste procedures voor incidentafhandeling. Het is belangrijk dat deze aanvullende afspraken schriftelijk worden vastgelegd en worden gekoppeld aan de standaard DPA, zodat er geen tegenstrijdigheden ontstaan en beide documenten samen een compleet beeld vormen van de contractuele relatie tussen de organisatie en Microsoft als verwerker.

Beheer van subverwerkers en gegevenslocaties

Microsoft werkt met honderden subverwerkers voor verschillende aspecten van de Microsoft 365- en Azure-dienstverlening. Deze subverwerkers kunnen betrokken zijn bij opslag, netwerk, beveiliging, analytics, AI-functionaliteit, support en andere diensten. Volgens artikel 28 van de AVG moet Microsoft als hoofdverwerker toestemming vragen aan de verantwoordelijke voordat een nieuwe subverwerker wordt ingeschakeld, tenzij deze toestemming algemeen is verleend. Microsoft heeft daarom een mechanisme opgezet waarbij organisaties via het Microsoft Service Trust Portal kunnen zien welke subverwerkers betrokken zijn, waar deze gevestigd zijn en wanneer nieuwe subverwerkers worden toegevoegd. Nederlandse overheidsorganisaties moeten dit portaal regelmatig monitoren om op de hoogte te blijven van wijzigingen in de subverwerkerslijst en om te kunnen beoordelen of nieuwe subverwerkers acceptabel zijn vanuit privacy- en beveiligingsperspectief.

Het Microsoft Service Trust Portal biedt verschillende tools voor het beheren van subverwerkers. Organisaties kunnen zich aanmelden voor e-mailnotificaties wanneer nieuwe subverwerkers worden toegevoegd, zodat zij tijdig kunnen reageren. Daarnaast kunnen organisaties een lijst downloaden van alle huidige subverwerkers, inclusief hun geografische locatie, de diensten waarvoor zij worden ingezet en de datum waarop zij zijn toegevoegd. Voor Nederlandse overheidsorganisaties is het belangrijk om te controleren of subverwerkers gevestigd zijn binnen de Europese Economische Ruimte (EER) of in landen met een adequaat beschermingsniveau, en of er passende waarborgen zijn getroffen voor subverwerkers buiten de EER (zoals Standard Contractual Clauses). Wanneer een nieuwe subverwerker wordt toegevoegd die niet voldoet aan de eisen van de organisatie, kunnen organisaties binnen een bepaalde termijn (meestal 30 dagen) bezwaar maken. Microsoft zal dan evalueren of de subverwerker kan worden vervangen of of aanvullende waarborgen kunnen worden getroffen. Indien dit niet mogelijk is, kan de organisatie overwegen om de betreffende Microsoft-service niet meer te gebruiken.

Naast het beheren van subverwerkers is het monitoren van gegevenslocaties cruciaal voor AVG-compliance. Nederlandse overheidsorganisaties moeten kunnen aantonen waar persoonsgegevens worden opgeslagen en verwerkt, zowel door Microsoft als door subverwerkers. Voor Microsoft 365 kunnen organisaties via het Admin Center controleren in welke geografische regio de tenant is gevestigd en waar data primair wordt opgeslagen. Voor Azure kunnen organisaties via Azure Policy en resource tags controleren of resources worden geïmplementeerd in toegestane regio's (bijvoorbeeld alleen West-Europa en Noord-Europa). Daarnaast biedt Microsoft de mogelijkheid om via Multi-Geo functionaliteit gegevens voor specifieke gebruikers of groepen in specifieke regio's op te slaan, wat nuttig kan zijn voor organisaties die moeten voldoen aan strikte datalocatie-eisen. Het is belangrijk dat organisaties periodiek controleren of de gegevenslocaties nog overeenkomen met de contractuele afspraken en of er geen onbedoelde gegevensoverdrachten plaatsvinden naar regio's buiten de EER. Het bijbehorende PowerShell-script kan organisaties ondersteunen bij het monitoren van gegevenslocaties en het detecteren van wijzigingen die mogelijk in strijd zijn met de DPA of het privacybeleid van de organisatie.

Monitoring en verificatie van DPA-compliance

Gebruik PowerShell-script data-processing-agreements.ps1 (functie Invoke-DataProcessingAgreementAssessment) – Controleert of de Microsoft DPA is geactiveerd en monitort wijzigingen in subverwerkers via het Microsoft Service Trust Portal, zodat organisaties tijdig kunnen reageren op wijzigingen die mogelijk impact hebben op AVG-compliance..

Een verwerkersovereenkomst met Microsoft is geen eenmalige activiteit, maar vereist continue monitoring en verificatie. Nederlandse overheidsorganisaties moeten periodiek controleren of Microsoft voldoet aan de contractuele afspraken rond beveiliging, datalocatie, logging, incidentafhandeling en andere aspecten van gegevensbescherming. Deze monitoring kan worden uitgevoerd via verschillende kanalen. Allereerst biedt Microsoft via het Service Trust Portal uitgebreide documentatie over beveiligingsmaatregelen, compliance-certificeringen (zoals ISO 27001, SOC 2, en sectorale certificeringen), en incidentrapportages. Organisaties kunnen deze documentatie gebruiken om te verifiëren of Microsoft voldoet aan de beveiligingseisen die zijn vastgelegd in de DPA en of er wijzigingen zijn die mogelijk impact hebben op de contractuele afspraken.

Daarnaast kunnen organisaties via technische monitoring controleren of Microsoft daadwerkelijk voldoet aan de afspraken rond datalocatie en beveiliging. Voor Microsoft 365 kunnen organisaties via PowerShell en de Microsoft Graph API controleren waar gegevens worden opgeslagen, welke beveiligingsinstellingen actief zijn en of er wijzigingen zijn in de configuratie die mogelijk in strijd zijn met de DPA. Voor Azure kunnen organisaties via Azure Policy en Azure Monitor controleren of resources worden geïmplementeerd in toegestane regio's, of encryptie correct is geconfigureerd en of logging voldoet aan de contractuele eisen. Het bijbehorende PowerShell-script ondersteunt deze technische monitoring door automatisch te controleren of de DPA is geactiveerd, of er wijzigingen zijn in subverwerkers en of de gegevenslocaties nog overeenkomen met de contractuele afspraken. De resultaten van deze controles worden vastgelegd in een gestructureerd rapport dat kan worden gebruikt voor interne audits, rapportages aan bestuur en toezicht door de Autoriteit Persoonsgegevens.

Gebruik PowerShell-script data-processing-agreements.ps1 (functie Invoke-DataProcessingAgreementReport) – Genereert een beknopt overzichtsrapport met de status van de DPA, wijzigingen in subverwerkers en aandachtspunten voor managementrapportage en governance-overleggen..

Belangrijk is dat de monitoringcyclus niet alleen focust op technische verificatie, maar ook op procesmatige en organisatorische aspecten. Organisaties moeten periodiek (bijvoorbeeld jaarlijks) een formele review uitvoeren van de DPA, waarbij wordt beoordeeld of de contractuele afspraken nog aansluiten bij de huidige gebruikspatronen van Microsoft 365 en Azure, of er nieuwe risico's zijn ontstaan en of aanvullende maatregelen nodig zijn. Deze review moet worden uitgevoerd door een multidisciplinair team bestaande uit de Functionaris Gegevensbescherming, CISO, juridische afdeling en Microsoft 365-beheerders. De uitkomsten van deze review worden vastgelegd in een rapport dat wordt gedeeld met bestuur en directie, zodat zij weloverwogen keuzes kunnen maken over risicoacceptatie, prioritering van verbeteracties en eventuele aanpassingen aan de contractuele afspraken met Microsoft. Door monitoring, verificatie en periodieke reviews structureel in te bedden in de governance-cyclus ontstaat een proactieve aanpak waarbij DPA-compliance niet afhankelijk is van incidentele controles maar continu wordt geborgd, conform de ambitie van de Nederlandse Baseline voor Veilige Cloud.

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 Verwerkersovereenkomsten voor Microsoft 365 en Azure .DESCRIPTION Controleert of de Microsoft Data Processing Agreement (DPA) is geactiveerd en monitort wijzigingen in subverwerkers via het Microsoft Service Trust Portal. Ondersteunt Nederlandse overheidsorganisaties bij het aantoonbaar maken van AVG-compliance rond verwerkersovereenkomsten met Microsoft. .NOTES Filename: data-processing-agreements.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-15 Version: 1.0 Related JSON: content/m365/compliance/data-processing-agreements.json Category: compliance Workload: m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\data-processing-agreements.ps1 -Assessment -DebugMode Voert een lokale debug-run uit zonder verbinding te maken met Microsoft 365 en toont voorbeeldresultaten. .EXAMPLE .\data-processing-agreements.ps1 -Assessment Controleert of de Microsoft DPA is geactiveerd en monitort subverwerkers. .EXAMPLE .\data-processing-agreements.ps1 -Report -OutputPath .\dpa-rapport.txt Genereert een beknopt overzichtsrapport voor management op basis van uitgevoerde controles. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(HelpMessage = "Voer controles uit op de status van de Microsoft DPA en subverwerkers")] [switch]$Assessment, [Parameter(HelpMessage = "Genereer een samenvattend rapport op basis van de controle-uitkomsten")] [switch]$Report, [Parameter(HelpMessage = "Pad naar het rapportbestand dat moet worden aangemaakt (alleen bij -Report)")] [string]$OutputPath, [Parameter(HelpMessage = "Voer een veilige lokale test uit met voorbeelddata, zonder verbinding met Microsoft 365")] [switch]$DebugMode ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Verwerkersovereenkomsten (Microsoft 365)" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Get-RepositoryRoot { <# .SYNOPSIS Bepaalt de rootmap van de repository op basis van de locatie van dit script. #> [CmdletBinding()] param() $root = Resolve-Path (Join-Path $PSScriptRoot "..\..") -ErrorAction SilentlyContinue if (-not $root) { throw "Kon de repository-root niet bepalen op basis van PSScriptRoot: $PSScriptRoot" } return $root.Path } function Get-DataProcessingAgreementPaths { <# .SYNOPSIS Bepaalt de paden voor documentatie rond verwerkersovereenkomsten. .OUTPUTS PSCustomObject met padinformatie. #> [CmdletBinding()] param() $repoRoot = Get-RepositoryRoot $docsRoot = Join-Path $repoRoot "documentatie\data-processing-agreements" $dpaAcceptancePath = Join-Path $docsRoot "microsoft-dpa-acceptatie.md" $subProcessorsPath = Join-Path $docsRoot "subverwerkers-overzicht.xlsx" $reviewReportPath = Join-Path $docsRoot "dpa-review-rapportage.md" [PSCustomObject]@{ RepositoryRoot = $repoRoot DocsRoot = $docsRoot DpaAcceptancePath = $dpaAcceptancePath SubProcessorsPath = $subProcessorsPath ReviewReportPath = $reviewReportPath } } function Invoke-DataProcessingAgreementAssessment { <# .SYNOPSIS Voert een gestructureerde controle uit op de status van de Microsoft DPA en subverwerkers. .DESCRIPTION Controleert of de Microsoft DPA is geactiveerd en monitort wijzigingen in subverwerkers. In DebugMode worden geen externe verbindingen gemaakt en wordt met voorbeelddata gewerkt zodat lokaal testen mogelijk is. .OUTPUTS PSCustomObject met: - IsCompliant : Boolean - Timestamp : Datum/tijd van de meting - DpaActivated : Boolean - SubProcessorsMonitored : Boolean - RecentChanges : Lijst met recente wijzigingen in subverwerkers - Findings : Lijst met geconstateerde issues of aandachtspunten #> [CmdletBinding()] param() $result = [PSCustomObject]@{ ScriptName = "data-processing-agreements.ps1" IsCompliant = $false Timestamp = Get-Date DpaActivated = $false SubProcessorsMonitored = $false RecentChanges = @() Findings = @() } try { if ($DebugMode) { Write-Host "DebugMode ingeschakeld: er wordt geen verbinding gemaakt met Microsoft 365." -ForegroundColor Yellow Write-Host "Er worden voorbeeldwaarden gebruikt om de rapportage te testen.`n" -ForegroundColor Yellow # Voorbeeldscenario: DPA geactiveerd, maar subverwerkers moeten beter worden gemonitord $result.DpaActivated = $true $result.SubProcessorsMonitored = $false $result.RecentChanges += "DebugMode: voorbeelddata – controleer in productie of subverwerkers regelmatig worden gemonitord via Service Trust Portal." $result.Findings += "DebugMode: voorbeelddata – verifieer in productie of de Microsoft DPA is geactiveerd via het Admin Center en of subverwerkers periodiek worden gecontroleerd." } else { Write-Host "Controleren van Microsoft DPA-status..." -ForegroundColor Gray Write-Host "LET OP: De DPA-status kan niet automatisch worden gecontroleerd via API's." -ForegroundColor Yellow Write-Host "Controleer handmatig in het Microsoft 365 Admin Center:" -ForegroundColor Yellow Write-Host " Organisatie-instellingen > Privacy en beveiliging > Data Processing Agreement" -ForegroundColor Gray Write-Host "Of via Azure Portal:" -ForegroundColor Yellow Write-Host " Privacy en compliance > Data Processing Agreement" -ForegroundColor Gray Write-Host "" # Aangezien DPA-status niet via API beschikbaar is, vragen we de gebruiker om bevestiging $dpaConfirmed = Read-Host "Is de Microsoft DPA geactiveerd en geaccepteerd? (J/N)" if ($dpaConfirmed -eq "J" -or $dpaConfirmed -eq "j" -or $dpaConfirmed -eq "Y" -or $dpaConfirmed -eq "y") { $result.DpaActivated = $true Write-Host "DPA-status bevestigd." -ForegroundColor Green } else { $result.DpaActivated = $false $result.Findings += "De Microsoft DPA lijkt niet te zijn geactiveerd. Activeer de DPA via het Admin Center conform artikel 28 AVG." } Write-Host "`nControleren van subverwerkers-monitoring..." -ForegroundColor Gray Write-Host "LET OP: Subverwerkers moeten handmatig worden gemonitord via:" -ForegroundColor Yellow Write-Host " https://servicetrust.microsoft.com/ViewPage/TrustDocuments" -ForegroundColor Gray Write-Host "" $monitoringConfirmed = Read-Host "Worden subverwerkers periodiek gemonitord via het Service Trust Portal? (J/N)" if ($monitoringConfirmed -eq "J" -or $monitoringConfirmed -eq "j" -or $monitoringConfirmed -eq "Y" -or $monitoringConfirmed -eq "y") { $result.SubProcessorsMonitored = $true Write-Host "Subverwerkers-monitoring bevestigd." -ForegroundColor Green } else { $result.SubProcessorsMonitored = $false $result.Findings += "Subverwerkers worden niet periodiek gemonitord. Stel e-mailnotificaties in via het Service Trust Portal en voer minimaal kwartaalcontroles uit." } # Controleer of documentatie aanwezig is Write-Host "`nControleren van documentatie..." -ForegroundColor Gray $paths = Get-DataProcessingAgreementPaths if (-not (Test-Path $paths.DocsRoot)) { $result.Findings += "Documentatiemap voor verwerkersovereenkomsten ontbreekt. Maak documentatie aan op: $($paths.DocsRoot)" } else { if (-not (Test-Path $paths.DpaAcceptancePath)) { $result.Findings += "Documentatie van DPA-acceptatie ontbreekt. Documenteer de acceptatie op: $($paths.DpaAcceptancePath)" } } } $result.IsCompliant = $result.DpaActivated -and $result.SubProcessorsMonitored Write-Host "`nResultaat verwerkersovereenkomsten:" -ForegroundColor Cyan Write-Host (" DPA geactiveerd : {0}" -f $result.DpaActivated) -ForegroundColor White Write-Host (" Subverwerkers gemonitord : {0}" -f $result.SubProcessorsMonitored) -ForegroundColor White if ($result.IsCompliant) { Write-Host "`n[OK] Minimale vereisten voor verwerkersovereenkomsten zijn voldaan." -ForegroundColor Green } else { Write-Host "`n[FAIL] Een of meer vereisten voor verwerkersovereenkomsten ontbreken." -ForegroundColor Red if ($result.Findings.Count -gt 0) { Write-Host "Details:" -ForegroundColor Yellow foreach ($finding in $result.Findings) { Write-Host " - $finding" -ForegroundColor Yellow } } } return $result } catch { Write-Host "`n[FAIL] Fout tijdens assessment: $_" -ForegroundColor Red throw } } function Invoke-DataProcessingAgreementReport { <# .SYNOPSIS Genereert een beknopt overzichtsrapport voor management. .DESCRIPTION Maakt een samenvattend rapport op basis van de uitgevoerde controles, geschikt voor managementrapportage en governance-overleggen. .PARAMETER AssessmentResult Het resultaatobject van Invoke-DataProcessingAgreementAssessment. .PARAMETER OutputPath Pad waar het rapport moet worden opgeslagen. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AssessmentResult, [Parameter(Mandatory = $false)] [string]$OutputPath ) $reportLines = @() $reportLines += "Verwerkersovereenkomsten Rapport - Microsoft 365 en Azure" $reportLines += "Nederlandse Baseline voor Veilige Cloud" $reportLines += "=" * 60 $reportLines += "" $reportLines += "Datum/tijd: $($AssessmentResult.Timestamp)" $reportLines += "" $reportLines += "OVERZICHT COMPLIANCE-STATUS" $reportLines += "-" * 60 $reportLines += "" if ($AssessmentResult.IsCompliant) { $reportLines += "Status: COMPLIANT" $reportLines += "Alle minimale vereisten voor verwerkersovereenkomsten zijn voldaan." } else { $reportLines += "Status: NIET COMPLIANT" $reportLines += "Een of meer vereisten voor verwerkersovereenkomsten ontbreken." } $reportLines += "" $reportLines += "DETAILS PER COMPONENT" $reportLines += "-" * 60 $reportLines += "" $reportLines += "DPA geactiveerd : $(if ($AssessmentResult.DpaActivated) { 'Ja' } else { 'Nee' })" $reportLines += "Subverwerkers gemonitord : $(if ($AssessmentResult.SubProcessorsMonitored) { 'Ja' } else { 'Nee' })" if ($AssessmentResult.RecentChanges.Count -gt 0) { $reportLines += "" $reportLines += "RECENTE WIJZIGINGEN" $reportLines += "-" * 60 foreach ($change in $AssessmentResult.RecentChanges) { $reportLines += "- $change" } } if ($AssessmentResult.Findings.Count -gt 0) { $reportLines += "" $reportLines += "AANDACHTSPUNTEN" $reportLines += "-" * 60 foreach ($finding in $AssessmentResult.Findings) { $reportLines += "- $finding" } } $reportLines += "" $reportLines += "AANBEVELINGEN" $reportLines += "-" * 60 if (-not $AssessmentResult.IsCompliant) { $reportLines += "1. Activeer de Microsoft DPA via het Microsoft 365 Admin Center of Azure Portal." $reportLines += "2. Stel e-mailnotificaties in via het Service Trust Portal voor wijzigingen in subverwerkers." $reportLines += "3. Voer minimaal kwartaalcontroles uit op subverwerkers en documenteer deze." $reportLines += "4. Documenteer de DPA-acceptatie en periodieke reviews voor audit-doeleinden." } else { $reportLines += "1. Blijf periodiek monitoren of de DPA actueel blijft en of er wijzigingen zijn in subverwerkers." $reportLines += "2. Evalueer regelmatig of aanvullende contractuele afspraken nodig zijn." $reportLines += "3. Voer jaarlijks een formele review uit van de DPA en contractuele afspraken." } $reportLines += "" $reportLines += "BRONNEN" $reportLines += "-" * 60 $reportLines += "Microsoft Service Trust Portal: https://servicetrust.microsoft.com" $reportLines += "Microsoft 365 Admin Center: https://admin.microsoft.com" $reportLines += "Azure Portal: https://portal.azure.com" $reportLines += "" $reportLines += "=" * 60 $reportText = $reportLines -join "`n" if ($OutputPath) { try { $reportText | Out-File -FilePath $OutputPath -Encoding UTF8 Write-Host "Rapport opgeslagen naar: $OutputPath" -ForegroundColor Green } catch { Write-Host "Fout bij opslaan rapport: $_" -ForegroundColor Red throw } } else { Write-Host $reportText } return $reportText } try { if ($Report) { if (-not $Assessment) { Write-Host "Waarschuwing: -Report vereist -Assessment. Voer eerst assessment uit..." -ForegroundColor Yellow $Assessment = $true } } if ($Assessment) { $assessmentResult = Invoke-DataProcessingAgreementAssessment if ($Report) { Write-Host "`nGenereren van rapport..." -ForegroundColor Cyan Invoke-DataProcessingAgreementReport -AssessmentResult $assessmentResult -OutputPath $OutputPath } if ($assessmentResult.IsCompliant) { exit 0 } else { exit 1 } } else { Write-Host "Beschikbare parameters:" -ForegroundColor Yellow Write-Host " -Assessment : Controleer de status van de Microsoft DPA en subverwerkers" -ForegroundColor Gray Write-Host " -Report : Genereer een samenvattend rapport" -ForegroundColor Gray Write-Host " -OutputPath : Pad voor rapportbestand (alleen bij -Report)" -ForegroundColor Gray Write-Host " -DebugMode : Voer een veilige lokale test uit zonder cloudverbinding" -ForegroundColor Gray Write-Host "`nVoorbeeld: .\data-processing-agreements.ps1 -Assessment -DebugMode" -ForegroundColor Cyan Write-Host "Voorbeeld: .\data-processing-agreements.ps1 -Assessment -Report -OutputPath .\rapport.txt" -ForegroundColor Cyan } } catch { Write-Error "Scriptuitvoering is mislukt: $_" exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # Exitcodes: # 0 = Compliant # 1 = Niet compliant # 2 = Fout tijdens uitvoering

Risico zonder implementatie

Risico zonder implementatie
High: Zonder correcte en actuele verwerkersovereenkomsten met Microsoft schenden organisaties artikel 28 van de AVG, wat kan leiden tot zware boetes, onvoldoende aantoonbaarheid bij audits en juridische aansprakelijkheid. Bovendien ontstaat onduidelijkheid over verantwoordelijkheden, subverwerkers en compliance met contractuele afspraken.

Management Samenvatting

Activeer en accepteer de Microsoft DPA via het Admin Center, monitoor regelmatig wijzigingen in subverwerkers via het Service Trust Portal, verifieer periodiek of Microsoft voldoet aan contractuele afspraken rond beveiliging en datalocatie, en documenteer alle stappen voor audit-doeleinden. Gebruik geautomatiseerde controles om compliance structureel te borgen.