Endpoint DLP-handboek Voor Nederlandse Overheden

💼 Management Samenvatting

Endpoint Data Loss Prevention in Microsoft Purview vormt de vangrail rond werkstations, laptops en virtuele desktops die dagelijks vertrouwelijke gegevens verwerken binnen de Nederlandse overheid.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
100u (tech: 60u)
Van toepassing op:
Rijksoverheid
Gemeenten
Provincies
ZBO's
Vitale aanbieders

Mobiele en hybride werkvormen zorgen ervoor dat documenten met staats- en burgerinformatie op honderden eindpunten staan. Zonder Endpoint DLP ontbreekt zicht op lokale kopieën, USB-export en uitgaande uploads waardoor AVG-bewijsvoering en BIO-controlepunten onhoudbaar worden.

PowerShell Modules Vereist
Primary API: Security & Compliance PowerShell
Connection: Connect-IPPSSession
Required Modules: ExchangeOnlineManagement

Implementatie

Dit artikel beschrijft hoe je Endpoint DLP integreert in de baselines van de Nederlandse Baseline voor Veilige Cloud, van architectuur en beleidsprincipes tot operationele borging, rapportages en geautomatiseerde controles met het bijgevoegde PowerShell-script.

Architectuur en beleidskaders voor Endpoint DLP

Een robuuste Endpoint DLP-architectuur begint bij een scherpe positionering binnen de bredere Nederlandse Baseline voor Veilige Cloud. Endpoint DLP is geen losstaand product maar een verlengstuk van gegevensclassificatie, Intune-beheer en het incidentresponsproces. Architecten brengen daarom eerst de meest risicovolle gegevensstromen in kaart: dossiers met BSN’s, aanbestedingsstukken met staatsgeheime metadata, forensische rapportages en ontwerptekeningen die buiten de Rijksdienst rondgaan. Deze inventarisatie koppelt elke datastroom aan wettelijke grondslagen, bewaartermijnen en de verantwoordelijke proceseigenaar zodat Endpoint DLP niet alleen technologie introduceert, maar expliciet vastlegt wie beslissingsbevoegd is bij blokkades en uitzonderingen. Het resultaat is een logisch model waarin werkstations en virtuele omgevingen hetzelfde beveiligingsniveau afdwingen als cloud workloads, ondersteund door bewezen patronen voor labeling, logging en melding van afwijkingen.

Vanuit dit model definieert het CISO-office de beleidsprincipes. Kernbegrippen zijn data-minimalisatie op eindpunten, realtime bewustzijn van gevoelige acties en transparante besluitvorming. Endpoint DLP in Purview maakt gebruik van exact dezelfde policies als cloud DLP, maar vraagt aanvullende configuratie: endpoints moeten zijn geregistreerd via Intune, Edge moet gecontroleerde profielen gebruiken en Windows-auditlogboeken moeten doorgezet worden naar een centrale workspace. Architecten beschrijven hoe labels, aangepaste gevoeligheidstypen en Exact Data Match-bestanden voor BSN’s of UZI-nummers gedeeld worden tussen cloud en endpoint. Daarbij wordt expliciet gemaakt hoe laptopgebruikers worden geïnformeerd wanneer een blokkade plaatsvindt en hoe ze alternatieve kanalen kunnen gebruiken om toch rechtmatig te werken. Deze beleidsdocumenten worden onderdeel van het Control Framework zodat auditors dezelfde terminologie terugzien in procesbeschrijvingen en dashboards.

Endpoint DLP vraagt daarnaast om technische randvoorwaarden die in het architectuurdocument worden beschreven. Denk aan het afdwingen van versleutelde schijven, actuele Defender for Endpoint-sensoren en gecontroleerde browserprofielen. Elk eindpunt moet het Purview Device Discovery-signaal kunnen versturen en gekoppeld zijn aan de organisatie-ID die in het tenant-rapport staat. Architecten leggen vast welke besturingssystemen worden ondersteund (Windows 10/11, macOS) en welke beheeroplossingen verantwoordelijk zijn voor updates. Tevens wordt vastgelegd dat alle endpoints de Purview-extensie ontvangen via Intune of Endpoint Manager, zodat beleid binnen enkele minuten wordt afgedwongen. Door in de informatiearchitectuur expliciet te beschrijven hoe endpoints als locatie binnen DLP worden aangesproken, wordt voorkomen dat afzonderlijke projecten eigen interpretaties creëren en ontstaat er een uniforme beveiligingslaag over het gehele apparaatlandschap.

Governance vormt het vierde bouwblok. Het programma definieert een RACI-matrix waarin de CISO richting bepaalt, het SOC toezicht houdt op blokkades en het lijnmanagement het gesprek met gebruikers voert. Voor elk datascenario wordt vooraf een beslissingstabel opgesteld: wanneer blokkeert Endpoint DLP direct, wanneer wordt alleen gewaarschuwd en welke aanvullende logging is vereist om te voldoen aan de Archiefwet of de Wet open overheid. De Functionaris Gegevensbescherming valideert dat de proportionele inzet van blokkades past bij de grondslag van gegevensverwerking. Tevens schrijft het governanceplan voor dat alle wijzigingen via een CAB verlopen en dat uitzonderingstickets een einddatum krijgen met verplichte review. Dit zorgt ervoor dat Endpoint DLP niet eindigt als een technische schil, maar ingebed raakt in besluitvormingsstructuren en rapportages richting departementale of gemeentelijke controllers.

Tot slot beschrijft de architectuur hoe Endpoint DLP aansluit op andere strategische programma's. Werkstations zijn vaak de laatste plek waar gegevens buiten beheer kunnen raken; daarom wordt Endpoint DLP gekoppeld aan exit-processen voor medewerkers, aan het Bring Your Own Device-beleid en aan forensische procedures. Door in hetzelfde document te beschrijven hoe Purview-exports, Defender for Endpoint telemetry en Intune compliance-rapporten elkaar versterken, ontstaat een integraal bewijs dat gegevensstromen in elke fase onder controle blijven. De architectuursectie sluit af met een scenariogebaseerde beschrijving van hoe blokkades, waarschuwingen en overrides door het SOC worden geïnterpreteerd, zodat alle betrokken teams dezelfde mentale modellen hanteren. Daarmee is de fundering gelegd voor de operationele hoofdstukken waarin beheer, training en rapportage worden uitgewerkt.

Operationele uitvoering, adoptie en continue verbetering

De implementatie van Endpoint DLP volgt een gefaseerde aanpak die voorkomt dat gebruikers overvallen worden en die audits direct kan bedienen. De eerste fase richt zich op pilotafdelingen die representatief zijn voor de rijksoverheid of gemeentelijke ketens: een beleidsdirectie met vertrouwelijke conceptteksten, een uitvoeringsdienst met persoonsgegevens in bulk en een projectorganisatie die veel met externe leveranciers werkt. Elke pilot wordt voorafgegaan door workshops waarin proceseigenaren demonstreren hoe data nu doorstroomt, welke uitzonderingen noodzakelijk zijn en welke juridische grondslag geldt. De configuratie start in auditmodus; blokkades worden nog niet afgedwongen, maar alle gebeurtenissen worden geanalyseerd door het SOC en gedeeld in een dagelijks stand-up. Na maximaal drie weken worden drempelwaarden bijgesteld, communicatie naar gebruikers verfijnd en technische knelpunten opgelost. Pas wanneer false positives onder een vooraf afgesproken percentage blijven, wordt de policy per scenario in enforce-modus gezet en worden overrides verplicht onderbouwd met een ticketnummer.

Operationele borging draait vervolgens om duidelijke rollen. Intune-beheerders zorgen dat elk apparaat het Endpoint DLP-agentprofiel ontvangt en controleren dagelijks op uitval. Het SOC bewaakt binnen Microsoft Sentinel en Defender for Endpoint of endpoint-signalen consistent doorkomen. Compliance officers toetsen wekelijks of rapportages over BSN- of UZI-detecties kloppen met het privacyregister. Servicedesks krijgen scenariohandboeken waarin stap voor stap staat beschreven hoe een blokkade wordt gevalideerd, hoe een tijdelijke uitzondering wordt aangevraagd en hoe men gebruikers doorverwijst naar alternatieve, goedgekeurde delingskanalen. Opleidingsprogramma’s zorgen ervoor dat medewerkers begrijpen waarom lokale kopieën beperkt worden en hoe ze veilig kunnen samenwerken via intranet, Teams of beveiligde data rooms. Door KPI’s zoals aantal blokkades per workload, aantal uitzonderingen en gemiddelde responstijd van het SOC te publiceren in een Power BI-dashboard, ontstaat managementaandacht en kunnen bestuurders sturen op gedrag én techniek.

Het bijgevoegde script endpoint-dlp.ps1 speelt een centrale rol in deze borging. In monitoringmodus valideert het binnen vijftien seconden of er een baselinepolicy actief is, of alle endpointlocaties zijn meegenomen en of de baselinegevoeligheidstypen aanwezig zijn. De debugmodus maakt het mogelijk om het script lokaal te draaien zonder productieverbinding, zodat wijzigingen veilig getest worden. Resultaten worden opgeslagen als PowerShell-objecten en kunnen direct worden doorgestuurd naar Sentinel, een CMDB of het auditdossier. In remediatiemodus kan hetzelfde script de baselinepolicy aanmaken inclusief blokkadeacties, meldingsinstellingen en verplichte motivatievelden voor overrides. Door het script via Azure Automation of GitHub Actions dagelijks aan te roepen, ontstaat automatische bewaking die afwijkingen sneller signaleert dan een handmatige review. Daarmee wordt de afhankelijkheid van individuele beheerders beperkt en wordt aantoonbaar gemaakt dat Endpoint DLP onderdeel is van een gecontroleerd proces.

Adoptie en communicatie zijn minstens zo belangrijk. Elke wijziging in Endpoint DLP wordt begeleid door gerichte copy in intranetartikelen, referentiekaarten voor projectleiders en scenario-video’s voor buitendienstmedewerkers. Organisaties richten een digitaal loket in waar medewerkers voorbeelden kunnen delen van situaties waarin de blokkade onnodig lijkt. Deze feedback wordt door analisten geanalyseerd en leidt tot updates in detectiesets of aanvullende toelichting in de meldingen die op het apparaat verschijnen. Door samen te werken met HR en juridische afdelingen wordt Endpoint DLP opgenomen in onboarding- en exitprocessen, zodat gebruikers van meet af aan begrijpen dat gegevens slechts via gecontroleerde kanalen mogen worden gedeeld. Regelmatige simulaties, bijvoorbeeld waarin een projectteam bewust probeert gevoelige data naar niet-goedgekeurde cloudopslag te uploaden, tonen aan dat Endpoint DLP daadwerkelijk werkt en geven bestuurders tastbare bewijsvoering.

Continue verbetering sluit de operatiecyclus af. Elke maand worden incidenten, uitzonderingsverzoeken en auditbevindingen geanalyseerd om trends te detecteren. Nieuwe gevoeligheidstypen of EDM-lijsten worden toegevoegd zodra wetgeving of ketens veranderen, bijvoorbeeld wanneer NIS2 aanvullende rapportageverplichtingen oplegt of wanneer nieuwe leveranciers toegang krijgen tot Rijksdata. Lessons learned worden gedeeld in een community of practice waarin gemeenten, agentschappen en ministeries configuraties naast elkaar leggen om dubbel werk te vermijden. Door Endpoint DLP te koppelen aan change- en releaseprocessen in TOPdesk of ServiceNow blijven wijzigingen traceerbaar en wordt voldaan aan de bewijslast van de Archiefwet. Het resultaat is een levend programma dat aantoonbaar bijdraagt aan de Nederlandse Baseline voor Veilige Cloud en waarin techniek, mens en proces voortdurend op elkaar worden afgestemd.

Monitoring

Gebruik PowerShell-script endpoint-dlp.ps1 (functie Invoke-Monitoring) – Voer de baselinecontrole uit voor Endpoint DLP policies en log afwijkingen..

Remediatie

Gebruik PowerShell-script endpoint-dlp.ps1 (functie Invoke-Remediation) – Rol de referentieconfiguratie voor Endpoint DLP uit of herstel ontbrekende onderdelen..

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 Baselinecontrole voor Microsoft Purview Endpoint DLP. .DESCRIPTION Dit script controleert of er een Endpoint DLP-policy actief is voor alle beheerde apparaten, valideert of Nederlandse gevoeligheidstypen worden afgedwongen en kan dezelfde baseline automatisch implementeren. Met DebugMode kan elke controle lokaal worden getest zonder cloudverbinding, zodat je binnen vijftien seconden kunt valideren of wijzigingen correct zijn. .NOTES Filename: endpoint-dlp.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-27 Last Modified: 2025-11-27 Version: 1.0 Related JSON: content/m365/purview/endpoint-dlp.json Workload: Microsoft 365 / Purview .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\endpoint-dlp.ps1 -Monitoring Voert de Endpoint DLP-compliancecontrole uit en toont aanbevelingen. .EXAMPLE .\endpoint-dlp.ps1 -Remediation Maakt de referentiepolicy aan of herstelt ontbrekende onderdelen. .EXAMPLE .\endpoint-dlp.ps1 -DebugMode -Monitoring Voert een lokale test uit zonder verbinding te maken met Microsoft 365. #> #Requires -Version 5.1 #Requires -Modules ExchangeOnlineManagement [CmdletBinding()] param( [Parameter()] [switch]$Monitoring, [Parameter()] [switch]$Remediation, [Parameter()] [switch]$Revert, [Parameter()] [switch]$DebugMode, [Parameter()] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $script:Connected = $false $script:PurviewSession = $null $script:BaselinePolicyName = 'NL Endpoint Data Protection' $script:BaselineRuleName = "$script:BaselinePolicyName - Block High Risk Transfers" function Write-Banner { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Endpoint DLP baseline" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan } function Connect-RequiredServices { [CmdletBinding()] param() if ($DebugMode) { Write-Verbose "DebugMode actief: verbindingen worden overgeslagen." return } if ($script:Connected) { return } Write-Verbose "Verbinding maken met Exchange Online en Security & Compliance PowerShell." Connect-ExchangeOnline -ShowBanner:$false -ErrorAction Stop | Out-Null $session = Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop $script:PurviewSession = $session $script:Connected = $true } function Disconnect-RequiredServices { [CmdletBinding()] param() if (-not $DebugMode) { try { if ($script:PurviewSession) { Remove-PSSession -Session $script:PurviewSession -ErrorAction SilentlyContinue $script:PurviewSession = $null } Disconnect-ExchangeOnline -Confirm:$false -ErrorAction SilentlyContinue | Out-Null } catch { Write-Verbose "Fout bij het verbreken van de sessies: $($_.Exception.Message)" } } $script:Connected = $false } function Get-BaselineDefinition { [CmdletBinding()] param() return [ordered]@{ PolicyName = $script:BaselinePolicyName RuleName = $script:BaselineRuleName SensitiveTypes = @( @{ Name = 'Netherlands Citizen Service Number (BSN)'; MinCount = 1 }, @{ Name = 'International Banking Account Number (IBAN)'; MinCount = 1 }, @{ Name = 'EU Debit Card Number'; MinCount = 1 } ) Locations = @('Endpoint') } } function Get-EndpointDlpPolicies { [CmdletBinding()] param() if ($DebugMode) { return ,([pscustomobject]@{ Name = $script:BaselinePolicyName Mode = 'Enable' Enabled = $true EndpointDlpLocation = @('All') }) } Connect-RequiredServices return Get-DlpCompliancePolicy -ErrorAction Stop } function Test-IsEndpointLocationComplete { [CmdletBinding()] param( [Parameter()] $Value ) if ($null -eq $Value) { return $false } if ($Value -is [string]) { return ($Value -eq 'All') } return ($Value -contains 'All') } function Get-EndpointDlpRules { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$PolicyName ) if ($DebugMode) { return ,([pscustomobject]@{ Name = $script:BaselineRuleName Policy = $script:BaselinePolicyName ContentContainsSensitiveInformation = @( @{ Name = 'Netherlands Citizen Service Number (BSN)'; MinCount = '1' }, @{ Name = 'International Banking Account Number (IBAN)'; MinCount = '1' }, @{ Name = 'EU Debit Card Number'; MinCount = '1' } ) BlockAccess = $true Mode = 'Enable' }) } Connect-RequiredServices return Get-DlpComplianceRule -Policy $PolicyName -ErrorAction Stop } function Test-Compliance { [CmdletBinding()] param() $baseline = Get-BaselineDefinition $policies = Get-EndpointDlpPolicies $result = [ordered]@{ ScriptName = 'endpoint-dlp' Timestamp = Get-Date IsCompliant = $false PolicyPresent = $false RulePresent = $false Mode = 'Unknown' Locations = @() Recommendations = @() } $policy = $policies | Where-Object { $_.Name -eq $baseline.PolicyName } if (-not $policy) { $result.Recommendations += "Maak de Endpoint DLP-policy '$($baseline.PolicyName)' aan en activeer alle apparaten." return [pscustomobject]$result } $result.PolicyPresent = $true $result.Mode = $policy.Mode $locationComplete = Test-IsEndpointLocationComplete -Value $policy.EndpointDlpLocation if (-not $locationComplete) { $result.Recommendations += 'Zorg dat Endpoint als locatie is ingesteld op All.' } else { $result.Locations = $baseline.Locations } $rules = Get-EndpointDlpRules -PolicyName $baseline.PolicyName $rule = $rules | Where-Object { $_.Name -eq $baseline.RuleName } if (-not $rule) { $result.Recommendations += "Voeg de regel '$($baseline.RuleName)' toe voor endpoints." return [pscustomobject]$result } $result.RulePresent = $true foreach ($type in $baseline.SensitiveTypes) { $match = $rule.ContentContainsSensitiveInformation | Where-Object { $_.Name -eq $type.Name -and [int]$_.MinCount -ge $type.MinCount } if (-not $match) { $result.Recommendations += "Breid de endpointregel uit met het informatietype '$($type.Name)'." } } if ($rule.BlockAccess -ne $true) { $result.Recommendations += 'Schakel blokkeren op endpoints in zodat gegevens niet lokaal kunnen uitlekken.' } if ($result.Recommendations.Count -eq 0 -and $policy.Enabled -and $policy.Mode -eq 'Enable' -and $locationComplete) { $result.IsCompliant = $true } return [pscustomobject]$result } function Invoke-Monitoring { [CmdletBinding()] param() Write-Verbose "Monitoring-modus gestart." $compliance = Test-Compliance Write-Host "Policy aanwezig : $($compliance.PolicyPresent)" -ForegroundColor Gray Write-Host "Regel aanwezig : $($compliance.RulePresent)" -ForegroundColor Gray Write-Host "Modus : $($compliance.Mode)" -ForegroundColor Gray if ($compliance.Locations.Count -gt 0) { Write-Host "Locaties : $($compliance.Locations -join ', ')" -ForegroundColor Gray } if ($compliance.IsCompliant) { Write-Host "`n[OK] Endpoint DLP voldoet aan de baseline." -ForegroundColor Green } else { Write-Host "`n[ALERT] Afwijkingen gevonden." -ForegroundColor Yellow foreach ($rec in $compliance.Recommendations) { Write-Host " - $rec" -ForegroundColor Yellow } } return $compliance } function Invoke-Remediation { [CmdletBinding()] param() $baseline = Get-BaselineDefinition if ($DebugMode) { Write-Host "DebugMode: remediatie wordt gesimuleerd voor '$($baseline.PolicyName)'." -ForegroundColor Yellow return } Connect-RequiredServices $policy = Get-DlpCompliancePolicy -Identity $baseline.PolicyName -ErrorAction SilentlyContinue if (-not $policy) { if ($WhatIf) { Write-Host "WhatIf: Endpoint DLP-policy '$($baseline.PolicyName)' zou worden aangemaakt." -ForegroundColor Yellow } else { Write-Host "Aanmaken van Endpoint DLP-policy '$($baseline.PolicyName)'..." -ForegroundColor Gray $policy = New-DlpCompliancePolicy ` -Name $baseline.PolicyName ` -Comment 'Baseline Endpoint DLP policy (Nederlandse Baseline voor Veilige Cloud)' ` -Mode Enable ` -EndpointDlpLocation All ` -ErrorAction Stop } } else { Write-Host "Policy '$($baseline.PolicyName)' bestaat al." -ForegroundColor Green } $rule = Get-DlpComplianceRule -Policy $baseline.PolicyName -ErrorAction SilentlyContinue | Where-Object { $_.Name -eq $baseline.RuleName } if (-not $rule) { if ($WhatIf) { Write-Host "WhatIf: regel '$($baseline.RuleName)' zou worden aangemaakt." -ForegroundColor Yellow } else { Write-Host "Aanmaken van regel '$($baseline.RuleName)'..." -ForegroundColor Gray $null = New-DlpComplianceRule ` -Name $baseline.RuleName ` -Policy $baseline.PolicyName ` -ContentContainsSensitiveInformation @( @{ Name = 'Netherlands Citizen Service Number (BSN)'; minCount = '1' }, @{ Name = 'International Banking Account Number (IBAN)'; minCount = '1' }, @{ Name = 'EU Debit Card Number'; minCount = '1' } ) ` -BlockAccess $true ` -NotifyUser 'Owner,LastModifier' ` -Mode Enforce ` -ErrorAction Stop } } else { Write-Host "Regel '$($baseline.RuleName)' is reeds aanwezig." -ForegroundColor Green } Write-Host "`nRemediatie afgerond." -ForegroundColor Green } function Invoke-Revert { [CmdletBinding()] param() if ($DebugMode) { Write-Host "DebugMode: revert wordt niet uitgevoerd." -ForegroundColor Yellow return } Connect-RequiredServices $baseline = Get-BaselineDefinition $policy = Get-DlpCompliancePolicy -Identity $baseline.PolicyName -ErrorAction SilentlyContinue if (-not $policy) { Write-Host "Er is geen Endpoint DLP-baseline gevonden om te verwijderen." -ForegroundColor Yellow return } if ($WhatIf) { Write-Host "WhatIf: policy '$($baseline.PolicyName)' zou worden verwijderd." -ForegroundColor Yellow return } Write-Host "Verwijderen van regels gekoppeld aan '$($baseline.PolicyName)'..." -ForegroundColor Gray Get-DlpComplianceRule -Policy $baseline.PolicyName -ErrorAction SilentlyContinue | ForEach-Object { Remove-DlpComplianceRule -Identity $_.Identity -Confirm:$false -ErrorAction SilentlyContinue } Write-Host "Verwijderen van policy '$($baseline.PolicyName)'..." -ForegroundColor Gray Remove-DlpCompliancePolicy -Identity $baseline.PolicyName -Confirm:$false -ErrorAction Stop Write-Host "Policy verwijderd." -ForegroundColor Green } function Invoke-EndpointDlpBaseline { [CmdletBinding()] param() return Test-Compliance } try { Write-Banner if ($Monitoring) { Invoke-Monitoring | Out-Null } elseif ($Remediation) { Invoke-Remediation } elseif ($Revert) { Invoke-Revert } else { $summary = Invoke-EndpointDlpBaseline $summary | Format-List } } catch { Write-Error "Er is een fout opgetreden: $($_.Exception.Message)" throw } finally { Disconnect-RequiredServices Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder Endpoint DLP blijven lokale kopieën, USB-export en uploads naar onbeheerste cloudopslag onzichtbaar. Dat leidt tot AVG-boetes, verlies van strafrechtelijk bewijs, oncontroleerbare datalekken en bestuurlijke aansprakelijkheid.

Management Samenvatting

Activeer Endpoint DLP binnen Purview, koppel het aan Intune en Defender for Endpoint en automatiseer monitoring met het meegeleverde script zodat eindpunten aantoonbaar voldoen aan de Nederlandse Baseline voor Veilige Cloud.