Data Loss Prevention Policies In Microsoft 365: Afdwinging En Borging
📅 2025-01-10
•
⏱️ 26 minuten lezen
•
🔴 Must-Have
💼 Management Samenvatting
Een Data Loss Prevention (DLP)-beleid in Microsoft 365 is de technische vertaling van het Nederlandse informatiebeveiligingsbeleid naar concrete blokkades en waarschuwingen op Exchange, SharePoint, OneDrive, Teams en Power Platform. Het beleid zorgt ervoor dat documenten met burgerservicenummers, medische gegevens of vertrouwelijke beleidsstukken niet ongemerkt de tenant verlaten en vormt daarmee een onmisbare bouwsteen voor de Nederlandse Baseline voor Veilige Cloud.
Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
105u (tech: 60u)
Van toepassing op:
✓ Microsoft 365 E3 ✓ Microsoft 365 E5 ✓ Exchange Online ✓ SharePoint Online ✓ OneDrive for Business ✓ Microsoft Teams ✓ Power Platform ✓ Publieke Sector
Zonder een actief afgedwongen DLP-beleid kunnen medewerkers per ongeluk of doelbewust gevoelige data delen met onbevoegde ontvangers. Een Excel-bestand met BSN's dat via Teams wordt doorgestuurd, een Power BI-export met politiegegevens die in een persoonlijke OneDrive belandt of een Power Automate-flow die gegevens naar een buitenlandse API verstuurt, leidt direct tot AVG-meldplichten, sancties van de Autoriteit Persoonsgegevens en hersteltrajecten die maanden duren. De BIO-normen 09 en 12, de NIS2-verplichtingen voor essentiële entiteiten en sectorale kaders zoals de Wet politiegegevens eisen dat datalekken aantoonbaar worden voorkomen. DLP is bovendien een cruciaal controlemiddel tijdens audits van ADR, IAK of externe accountants en zonder aantoonbare blokkades is het onmogelijk om aan te tonen dat passende maatregelen uit artikel 32 AVG daadwerkelijk zijn geïmplementeerd.
PowerShell Modules Vereist
Primary API: Microsoft Purview (Security & Compliance PowerShell), Microsoft Graph DLP API Connection:Connect-IPPSSession, Connect-MgGraph Required Modules: ExchangeOnlineManagement, Microsoft.Graph
Implementatie
Dit artikel beschrijft hoe Nederlandse overheidsorganisaties een volledig DLP-programma inrichten dat techniek, governance en operations samenbrengt. U leest welke licenties, rollen en processen nodig zijn, hoe u Microsoft Purview DLP policies ontwerpt rond Nederlandse gevoelige informatietypen, hoe u automatische blokkades test en gefaseerd uitrolt, en hoe u monitoring, incidentrespons en rapportage structureert. Het sluit af met concrete aanwijzingen voor audits, continue verbetering en de koppeling met andere informatiebeveiligingsmaatregelen zoals retention, sensitivity labels en SOC-procedures.
Vereisten, licenties en governance
Een effectief DLP-programma begint bij de juiste licenties en bevoegdheden. Microsoft 365 E5 of de Microsoft 365 E5 Compliance add-on is noodzakelijk om geavanceerde DLP-functionaliteit zoals automatische blokkades, trainable classifiers en Power Platform DLP te activeren. Voor basisdetectie kunnen E3-licenties worden gebruikt, maar die ondersteunen enkel auditmodus en bieden geen granulariteit voor Power Platform connectors. Alle beheerders die DLP policies ontwikkelen hebben minimaal de rollen Compliance Administrator, Security Administrator en in sommige gevallen Power Platform Service Administrator nodig. De Functionaris Gegevensbescherming en de CISO moeten vanaf het begin betrokken zijn zodat juridische eisen uit de Archiefwet, AVG en Wpg worden vertaald naar werkbare technische uitgangspunten.
Naast licenties zijn organisatorische randvoorwaarden essentieel. Een multidisciplinair DLP-governanceboard verzamelt proceseigenaren, privacy officers, SOC-analisten en Microsoft 365-platformbeheerders om verzendlimieten af te stemmen, uitzonderingen te beoordelen en releasekalenders te beheren. Het board borgt dat classificatiebeleid voor documenten en e-mail is afgestemd op sensitivity labels, dat retentiebeleid in Microsoft Purview niet wordt doorkruist door DLP-acties en dat uitzonderingen altijd een einddatum en verantwoordelijke hebben. Verder moet een juridisch getoetst privacy impact assessment (PIA) beschrijven welke monitoring wordt uitgevoerd, hoe lang incidentdata worden bewaard en hoe proportionaliteit wordt geborgd.
Tot slot vergt DLP een volwassen change- en adoptieproces. Gebruikers moeten begrijpen waarom een verzonden bericht wordt geblokkeerd, hoe zij een override aanvragen en waar zij ondersteuning vinden. De servicedesk moet standaardantwoorden en escalatiepaden hebben, terwijl het SOC duidelijke responsplaybooks nodig heeft voor geclassificeerde incidenten. Zonder deze governance blijft technologie ongebruikt of wordt zij omzeild, hetgeen direct leidt tot auditbevindingen en herstelsancties.
Technische implementatie in Microsoft Purview
De technische implementatie start met het modelleren van informatiestromen en risico's per workload. In Microsoft Purview definieert u policies waarin Exchange Online, SharePoint, OneDrive, Teams en Power Platform connectors aan dezelfde regelset worden gekoppeld. Gevoelige informatietypen zoals "Netherlands Citizen Service Number (BSN)", "EU Financial Data" en maatwerkpatronen voor gemeentelijke zaaknummers worden geconfigureerd met drempelwaarden en betrouwbaarheidsgraden zodat de detectie zowel nauwkeurig als uitlegbaar is. Combineer deze detecties met contextuele voorwaarden, bijvoorbeeld alleen blokkeren wanneer documenten buiten de organisatie gedeeld worden of wanneer een gebruiker data downloadt naar een ongebeheerste endpoint.
Zodra de gevoeligheidstypen en voorwaarden zijn gedefinieerd, bouwt u gefaseerde policies: eerst een pilot in testmodus met uitgebreide rapportage, daarna een tenantbrede policy in Enforce-modus. In elke fase worden policy tips, e-mailnotificaties en justificatiemogelijkheden afgestemd op de communicatierichtlijnen van de organisatie. DLP policies moeten bovendien worden afgestemd op sensitivity labels die encryptie afdwingen; een document dat al is versleuteld kan andere acties vereisen dan een onbeveiligd document. Beste praktijken schrijven voor om policies logisch te scheiden (bijvoorbeeld "BSN hoog risico" versus "financiële data medium risico") zodat tuning en rapportage beheersbaar blijven.
Gebruik PowerShell-script dlp-policies-enabled.ps1 (functie Invoke-Remediation) – Automatiseert het aanmaken of bijwerken van baseline DLP-policies, inclusief koppeling aan alle workloads en blokkades voor Nederlandse gevoelige informatietypen..
De bijbehorende PowerShell-automatisering configureert baseline policies consistent, inclusief commentaarvelden, versienummers en standaardinstellingen voor blokkeren, auditmeldingen en rapportage. Hierdoor worden configuratiefouten beperkt en is elke wijziging herleidbaar naar een change met bewijs van goedkeuring. Tijdens implementatie is het raadzaam om policies in een gecontroleerde volgorde te activeren: eerst audit only, vervolgens notify, daarna blokkeren in productie. Iedere stap eindigt met een review van SOC-meldingen, functionele acceptatietests en communicatie richting sleutelgebruikers.
Monitoring, telemetrie en incidentrespons
Een DLP-configuratie is pas effectief wanneer incidenten continu worden bewaakt en opgevolgd. Microsoft Purview levert near real-time alerts, maar zonder gecentraliseerde monitoring verliezen organisaties het overzicht. SOC-analisten moeten dashboards hebben met aantallen blokkades per workload, trends in overrides, topgebruikers en herhaalde overtredingen. Deze informatie voedt maandelijkse rapportages voor CISO en FG en bepaalt welke processen extra training behoeven.
Gebruik PowerShell-script dlp-policies-enabled.ps1 (functie Invoke-Monitoring) – Inventariseert alle DLP-policies, controleert of Enforce-modus is ingeschakeld, of blokkades aanwezig zijn en geeft een compliance-status terug voor rapportages..
De monitoringmodus van het script valideert of baseline policies actief zijn, of rules een blokkade bevatten en of policies niet onbedoeld in testmodus staan. Resultaten worden verwerkt in CSV- of JSON-rapportages die in GRC-systemen kunnen worden opgeslagen als auditbewijsmateriaal. Parallel daaraan haalt het SOC mutaties en incidenten via de Microsoft Graph Security API op, waardoor men correlaties kan leggen met Defender-alerts, insider-riskcases en SIEM-events.
Incidentrespons vereist duidelijke draaiboeken. Wanneer een blokkade plaatsvindt moet het SOC binnen afgesproken tijden beoordelen of het een false positive betreft, de betrokken proceseigenaar informeren en de FG voorzien van feiten voor een eventuele AVG-melding. Door DLP-logboeken te verrijken met context uit Azure AD Sign-In Logs en Endpoint DLP kunnen analisten herkennen of een blokkade onderdeel is van een groter compromis. Deze integrale aanpak zorgt voor aantoonbare beheersing en maakt het mogelijk om lessons learned snel terug te voeren naar beleid en training.
Continu verbeteren en compliance aantonen
DLP is geen eenmalig project maar een cyclisch programma waarin beleid, detecties en processen telkens worden bijgesteld. Iedere wijziging in wetgeving (denk aan de Wet open overheid, NIS2-specifieke nadere regels of nieuwe aanwijzingen van de Autoriteit Persoonsgegevens) vereist een review van de gevoeligheidstypen en policy-teksten. Organisaties documenteren daarom per kwartaal welke wijzigingen zijn doorgevoerd, welke uitzonderingen tijdelijk gelden en welke auditbevindingen zijn opgelost.
Compliance vereist aantoonbaar bewijs. Bewaar PIA's, beleidsdocumenten, change logs, exporten van DLP-policies, rapportages uit het monitoring-script, SOC-incidenttickets en communicatie richting gebruikers in een gecontroleerde documentopslag. Tijdens audits kan hiermee worden aangetoond dat maatregelen uit BIO 09.02 (Bescherming van gegevens), BIO 12.04 (Logging en monitoring) en AVG artikel 32 structureel zijn geïmplementeerd en getoetst. Combineer deze stukken met rapportages van Sensitivity Labels en retention policies om te laten zien dat de volledige informatielevenscyclus onder controle is.
Continue verbetering betekent ook investeren in mens en proces. Train medewerkers in het herkennen van policy tips, voer tabletop-oefeningen uit waarin DLP-incidenten worden gesimuleerd en gebruik feedbackloops om regels minder hinderlijk en tegelijk effectiever te maken. Maak gebruik van trendanalyses uit Purview, Microsoft Sentinel en Power BI om hotspots te identificeren en de juiste managementaandacht te vragen. Zo blijft DLP niet beperkt tot technologie maar groeit het uit tot een volwassen beheersmaatregel binnen de gehele Nederlandse overheidsorganisatie.
Compliance & Frameworks
BIO: 09.02, 12.04 - Bescherming van gegevens en systematische logging en monitoring zoals voorgeschreven in de Baseline Informatiebeveiliging Overheid voor vertrouwelijke en zeer vertrouwelijke informatie.
ISO 27001:2022: A.8.12, A.8.28, A.5.23 - Informatieclassificatie, preventie van datalekken en gegevensbescherming binnen het ISMS conform ISO/IEC 27001:2022.
NIS2: Artikel - Passende technische en organisatorische maatregelen voor essentiële en belangrijke entiteiten om data-exfiltratie tegen te gaan en incidentrespons te ondersteunen.
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
Controleert en configureert Data Loss Prevention (DLP) policies in Microsoft 365.
.DESCRIPTION
Dit script ondersteunt Nederlandse overheidsorganisaties bij het borgen van
de Nederlandse Baseline voor Veilige Cloud. Het script kan DLP-policies
monitoren, baseline policies configureren en indien nodig verwijderen. De
focus ligt op Exchange, SharePoint, OneDrive, Teams en Power Platform-workloads
die worden beheerd via Microsoft Purview (Security & Compliance PowerShell).
.NOTES
Filename: dlp-policies-enabled.ps1
Author: Nederlandse Baseline voor Veilige Cloud
Created: 2025-01-10
Last Modified: 2025-01-10
Version: 1.0
Related JSON: content/m365/information-protection/dlp-policies-enabled.json
Category: information-protection
Workload: m365
.LINK
https://github.com/m365-tenant-best-practise
.EXAMPLE
.\dlp-policies-enabled.ps1 -Monitoring
Toont de status van alle DLP-policies en controleert of baseline policies actief zijn.
.EXAMPLE
.\dlp-policies-enabled.ps1 -Remediation
Maakt of herconfigureert baseline DLP-policies en rules.
.EXAMPLE
.\dlp-policies-enabled.ps1 -Monitoring -DebugMode
Voert een lokale test uit zonder verbinding te maken met Microsoft 365.
#>
#Requires -Version 5.1#Requires -Modules ExchangeOnlineManagement
[CmdletBinding()]
param(
[Parameter(HelpMessage = "Monitor huidige DLP-configuratie")]
[switch]$Monitoring,
[Parameter(HelpMessage = "Configureer of herstel baseline DLP-policies")]
[switch]$Remediation,
[Parameter(HelpMessage = "Verwijder baseline DLP-policies (voorzichtig)")]
[switch]$Revert,
[Parameter(HelpMessage = "Toon welke acties zouden worden uitgevoerd")]
[switch]$WhatIf,
[Parameter(HelpMessage = "Lokale debugmodus zonder verbinding")]
[switch]$DebugMode
)
$ErrorActionPreference = 'Stop'
# ============================================================================
# HEADER
# ============================================================================
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "Microsoft 365 DLP Policies" -ForegroundColor Cyan
Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
# ============================================================================
# GLOBAL SETTINGS
# ============================================================================
$script:BaselinePolicyName = "Baseline - Overheid DLP All Workloads"
$script:BaselineRuleName = "$($script:BaselinePolicyName) - Hoog Risico"
$script:PolicyComment = "Baseline DLP policy geconfigureerd door Nederlandse Baseline voor Veilige Cloud"
$script:SensitiveInformationTypes = @(
@{
Name = "Netherlands Citizen Service Number (BSN)"
minCount = 1
maxCount = 9
minConfidence = 75
},
@{
Name = "IBAN"
minCount = 1
maxCount = 9
minConfidence = 80
},
@{
Name = "EU PII Data"
minCount = 1
maxCount = 9
minConfidence = 85
}
)
# ============================================================================
# FUNCTIONS
# ============================================================================
function Connect-ComplianceService {
<#
.SYNOPSIS
Maakt verbinding met Microsoft Purview (Security & Compliance PowerShell).
#>
[CmdletBinding()]
param()
try {
Write-Host "Verbinden met Microsoft Purview..." -ForegroundColor Gray
$existingSession = Get-PSSession | Where-Object {
$_.ConfigurationName -eq "Microsoft.Exchange" -and
$_.State -eq "Opened" -and
$_.Name -like "*IPPSSession*"
}
if ($existingSession) {
Write-Host " [OK] Bestaande Security & Compliance-sessie gevonden" -ForegroundColor Green
return
}
Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop | Out-Null
Write-Host " [OK] Verbonden met Security & Compliance PowerShell" -ForegroundColor Green
}
catch {
Write-Error "Kon niet verbinden met Security & Compliance PowerShell: $_"
throw
}
}
functionGet-DlpPolicyStatus {
<#
.SYNOPSIS
Haalt de status van alle DLP-policies op.
.OUTPUTS
PSCustomObject met kerngegevens van de policy.
#>
[CmdletBinding()]
param()
try {
Write-Host "Ophalen van DLP-policies..." -ForegroundColor Gray
$policies = Get-DlpCompliancePolicy -ErrorAction Stop
$results = @()
foreach ($policy in $policies) {
$rules = Get-DlpComplianceRule -Policy $policy.Name -ErrorAction SilentlyContinue
$workloads = @()
if ($policy.ExchangeLocation -or $policy.ExchangeLocationException) { $workloads += "Exchange" }
if ($policy.SharePointLocation -or $policy.SharePointLocationException) { $workloads += "SharePoint" }
if ($policy.OneDriveLocation -or $policy.OneDriveLocationException) { $workloads += "OneDrive" }
if ($policy.TeamsLocation -or $policy.TeamsLocationException) { $workloads += "Teams" }
if ($policy.PowerPlatformLocation -or $policy.PowerPlatformLocationException) { $workloads += "PowerPlatform" }
$hasRules = $rules -and $rules.Count -gt 0$blocksAccess = $false$severity = "Niet ingesteld"
if ($hasRules) {
$firstRule = $rules | Select-Object -First 1$blocksAccess = [bool]$firstRule.BlockAccess
if ($firstRule.ReportSeverity) {
$severity = $firstRule.ReportSeverity
}
}
$results += [PSCustomObject]@{
Name = $policy.Name
Mode = if ($policy.Mode) { $policy.Mode } else { "Onbekend" }
Workloads = if ($workloads) { $workloads -join ", " } else { "Geen locaties" }
HasRules = $hasRules
BlocksAccess = $blocksAccess
Severity = $severity
Comment = $policy.Comment
IsBaseline = ($policy.Name -eq $script:BaselinePolicyName)
}
}
Write-Host " [OK] $($results.Count) DLP-policies gevonden" -ForegroundColor Green
return$results
}
catch {
Write-Error "Fout bij ophalen van DLP-policies: $_"
throw
}
}
function Invoke-Monitoring {
<#
.SYNOPSIS
Controleert of DLP-policies volgens de baseline actief zijn.
#>
[CmdletBinding()]
param()
if ($DebugMode) {
Write-Host "`n[MODE] Debug Mode - Lokale test" -ForegroundColor Yellow
$mock = [PSCustomObject]@{
Name = $script:BaselinePolicyName
Mode = "Enforce"
Workloads = "Exchange, SharePoint, OneDrive, Teams"
HasRules = $true
BlocksAccess = $true
Severity = "High"
Comment = $script:PolicyComment
IsBaseline = $true
}
$mock | Format-Table -AutoSize
return [PSCustomObject]@{
TotalPolicies = 1
BaselinePolicies = 1
Enforced = $true
Policies = @($mock)
}
}
try {
Write-Host "`nMonitoring: DLP Policies" -ForegroundColor Cyan
Write-Host "=========================" -ForegroundColor Cyan
Connect-ComplianceService
$policies = Get-DlpPolicyStatusif (-not $policies -or $policies.Count -eq 0) {
Write-Host " ⚠️ Geen DLP-policies gevonden" -ForegroundColor Yellow
return [PSCustomObject]@{
TotalPolicies = 0
BaselinePolicies = 0
Enforced = $false
Policies = @()
}
}
Write-Host "`nOverzicht:" -ForegroundColor Cyan
$policies | Format-Table -AutoSize Name, Mode, Workloads, HasRules, BlocksAccess
$baseline = $policies | Where-Object { $_.IsBaseline }
$enforced = ($baseline.Count -gt 0) -and ($baseline | Where-Object {
$_.Mode -eq "Enforce" -and $_.HasRules -and $_.BlocksAccess
}).Count -eq $baseline.Count
if ($enforced) {
Write-Host "`n ✅ Baseline DLP-policies zijn actief en afdwingend" -ForegroundColor Green
}
else {
Write-Host "`n ⚠️ Baseline DLP-policies ontbreken of staan niet in Enforce-modus" -ForegroundColor Yellow
}
return [PSCustomObject]@{
TotalPolicies = $policies.Count
BaselinePolicies = $baseline.Count
Enforced = $enforced
Policies = $policies
}
}
catch {
Write-Error "Fout bij monitoring: $_"
throw
}
}
functionNew-OrUpdateDlpPolicy {
<#
.SYNOPSIS
Creëert of actualiseert de baseline DLP-policy.
#>
[CmdletBinding(SupportsShouldProcess)]
param()
$policy = Get-DlpCompliancePolicy -Identity $script:BaselinePolicyName -ErrorAction SilentlyContinue
if ($policy) {
Write-Host " ℹ️ Baseline DLP-policy bestaat al" -ForegroundColor Yellow
if ($policy.Mode -ne "Enforce") {
Write-Host " - Policy staat in modus '$($policy.Mode)'. Bijwerken naar 'Enforce'..." -ForegroundColor Yellow
if ($PSCmdlet.ShouldProcess($script:BaselinePolicyName, "Set-DlpCompliancePolicy naar Enforce")) {
Set-DlpCompliancePolicy -Identity $script:BaselinePolicyName -Mode Enforce -ErrorAction Stop
}
}
return$policy
}
if ($PSCmdlet.ShouldProcess($script:BaselinePolicyName, "Create DLP policy")) {
Write-Host " Aanmaken van baseline DLP-policy..." -ForegroundColor Gray
$policy = New-DlpCompliancePolicy `
-Name $script:BaselinePolicyName `
-Comment $script:PolicyComment `
-Mode Enforce `
-ExchangeLocation All `
-SharePointLocation All `
-OneDriveLocation All `
-TeamsLocation All `
-ErrorAction Stop
Write-Host " [OK] DLP-policy aangemaakt" -ForegroundColor Green
}
return$policy
}
functionNew-OrUpdateDlpRule {
<#
.SYNOPSIS
Creëert of actualiseert de baseline DLP-rule.
#>
[CmdletBinding(SupportsShouldProcess)]
param()
$existingRule = Get-DlpComplianceRule -Policy $script:BaselinePolicyName -ErrorAction SilentlyContinue |
Where-Object { $_.Name -eq $script:BaselineRuleName }
if ($existingRule) {
Write-Host " ℹ️ Baseline DLP-rule bestaat al" -ForegroundColor Yellow
$requiresUpdate = (-not $existingRule.BlockAccess) -or ($existingRule.ReportSeverity -ne "High")
if ($requiresUpdate -and $PSCmdlet.ShouldProcess($script:BaselineRuleName, "Update DLP rule")) {
Write-Host " - Bijwerken van bestaande regel zodat blokkade en High severity actief zijn" -ForegroundColor Yellow
Set-DlpComplianceRule `
-Identity $script:BaselineRuleName `
-BlockAccess $true `
-ReportSeverity High `
-NotifyUser $true `
-NotifyPolicyTip $true `
-Mode Enforce `
-ErrorAction Stop
}
return
}
if ($PSCmdlet.ShouldProcess($script:BaselineRuleName, "Create DLP rule")) {
Write-Host " Aanmaken van baseline DLP-rule..." -ForegroundColor Gray
New-DlpComplianceRule `
-Name $script:BaselineRuleName `
-Policy $script:BaselinePolicyName `
-BlockAccess $true `
-ContentContainsSensitiveInformation $script:SensitiveInformationTypes `
-NotifyUser $true `
-NotifyPolicyTip $true `
-ReportSeverity High `
-Mode Enforce `
-ErrorAction Stop | Out-Null
Write-Host " [OK] DLP-rule aangemaakt" -ForegroundColor Green
}
}
function Invoke-Remediation {
<#
.SYNOPSIS
Configureert baseline DLP-policies.
#>
[CmdletBinding()]
param()
if ($DebugMode) {
Write-Host "`n[MODE] Debug Mode - Remediation preview" -ForegroundColor Yellow
Write-Host " Zou policy '$script:BaselinePolicyName' aanmaken of bijwerken in Enforce-modus" -ForegroundColor Gray
Write-Host " Zou rule '$script:BaselineRuleName' configureren met blokkade en meldingen" -ForegroundColor Gray
return
}
try {
Write-Host "`nRemediatie: DLP Policies" -ForegroundColor Cyan
Write-Host "==========================" -ForegroundColor Cyan
Connect-ComplianceService
New-OrUpdateDlpPolicy
Start-Sleep -Seconds 3New-OrUpdateDlpRuleWrite-Host "`n ✅ Baseline DLP-policies zijn geconfigureerd" -ForegroundColor Green
}
catch {
Write-Error "Fout bij remediatie: $_"
throw
}
}
function Invoke-Revert {
<#
.SYNOPSIS
Verwijdert baseline DLP-policies.
#>
[CmdletBinding(SupportsShouldProcess)]
param()
if ($DebugMode) {
Write-Host "`n[MODE] Debug Mode - Revert preview" -ForegroundColor Yellow
Write-Host " Zou policy '$script:BaselinePolicyName' en gekoppelde rules verwijderen" -ForegroundColor Gray
return
}
try {
Write-Host "`nRevert: Baseline DLP Policies" -ForegroundColor Cyan
Write-Host "==============================" -ForegroundColor Cyan
Write-Host " ⚠️ Gebruik uitsluitend wanneer een alternatief beleid aanwezig is" -ForegroundColor Red
if (-not $WhatIf) {
$confirmation = Read-Host "Typ 'ja' om te bevestigen"
if ($confirmation -ne "ja") {
Write-Host " Operatie geannuleerd" -ForegroundColor Yellow
return
}
}
Connect-ComplianceService
$rules = Get-DlpComplianceRule -Policy $script:BaselinePolicyName -ErrorAction SilentlyContinue
foreach ($rule in $rules) {
if ($PSCmdlet.ShouldProcess($rule.Name, "Remove DLP rule")) {
Remove-DlpComplianceRule -Identity $rule.Name -Confirm:$false -ErrorAction SilentlyContinue
Write-Host " [OK] Rule '$($rule.Name)' verwijderd" -ForegroundColor Green
}
}
$policy = Get-DlpCompliancePolicy -Identity $script:BaselinePolicyName -ErrorAction SilentlyContinue
if ($policy -and $PSCmdlet.ShouldProcess($script:BaselinePolicyName, "Remove DLP policy")) {
Remove-DlpCompliancePolicy -Identity $script:BaselinePolicyName -Confirm:$false -ErrorAction Stop
Write-Host " [OK] DLP-policy verwijderd" -ForegroundColor Green
}
}
catch {
Write-Error "Fout bij revert: $_"
throw
}
}
# ============================================================================
# MAIN EXECUTION
# ============================================================================
try {
if ($Monitoring) {
$result = Invoke-Monitoring
if ($result) {
Write-Host "`nSamenvatting:" -ForegroundColor Cyan
Write-Host " Totaal policies : $($result.TotalPolicies)" -ForegroundColor Gray
Write-Host " Baseline actief : $($result.BaselinePolicies)" -ForegroundColor Gray
Write-Host " Enforce status : $(if ($result.Enforced) { 'Ja' } else { 'Nee' })" -ForegroundColor $(if ($result.Enforced) { 'Green' } else { 'Yellow' })
}
}
elseif ($Remediation) {
Invoke-Remediation
}
elseif ($Revert) {
Invoke-Revert
}
else {
Write-Host "Geen modus opgegeven. Kies een van de volgende opties:" -ForegroundColor Yellow
Write-Host " -Monitoring Controleer huidige DLP-configuratie" -ForegroundColor Yellow
Write-Host " -Remediation Configureer baseline DLP-policies" -ForegroundColor Yellow
Write-Host " -Revert Verwijder baseline DLP-policies (voorzichtig)" -ForegroundColor Yellow
Write-Host " -DebugMode Voer controles uit zonder verbinding" -ForegroundColor Yellow
}
}
catch {
Write-Error "Fout in dlp-policies-enabled.ps1: $_"
throw
}
finally {
Write-Host "`n========================================`n" -ForegroundColor Cyan
}
Risico zonder implementatie
Risico zonder implementatie
High: Zonder afdwingbare DLP-policies blijft gevoelige informatie ongecontroleerd uitlekken via e-mail, Teams, OneDrive en Power Platform, wat leidt tot AVG-boetes, BIO-afwijkingen en NIS2-sancties.
Management Samenvatting
Schakel Microsoft Purview DLP in voor alle workloads, zorg dat blokkades en notificaties actief zijn en monitor continu via geautomatiseerde scripts om datalekken en compliance-risico's te voorkomen.