Sensitivity Labels Configureren Voor Nederlandse Overheidsinformatie

💼 Management Samenvatting

Sensitivity labels vormen het hart van Microsoft Purview Information Protection en bepalen hoe documenten, e-mail en Teams-conversaties worden geclassificeerd, versleuteld en gemarkeerd. Nederlandse overheidsorganisaties vertrouwen op deze labels om vertrouwelijke beleidsstukken, persoonsgegevens en staatsgevoelige informatie veilig te delen zonder administratieve barrières op te werpen voor ambtenaren en ketenpartners.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
95u (tech: 60u)
Van toepassing op:
Microsoft 365 E5
Microsoft 365 E3 met Compliance add-on
Microsoft Purview Information Protection
Exchange Online
SharePoint Online
OneDrive for Business
Microsoft Teams

Zonder een zorgvuldig uitgewerkt labelstelsel ontstaat versnipperde bescherming, ontbreekt zicht op welke informatie onder de Archiefwet of de AVG valt en kunnen toezichthouders niet verifiëren of passende maatregelen zijn getroffen. Onvolledig ingerichte labels leiden tot documenten die zonder watermerk buiten de organisatie terechtkomen, ongemarkeerde export naar consumentelijke OneDrive-accounts en onvoldoende logging voor incidentonderzoek. Daarnaast vereisen NIS2 en BIO dat informatie naar zwaarte wordt geclassificeerd, dat beleidsmatige besluitvorming traceerbaar is en dat technische maatregelen zoals encryptie consistent worden toegepast. Sensitivity labels bieden de enige geïntegreerde manier om dataklassen over workloads heen te harmoniseren en de gekozen beveiligingsmaatregelen machineleesbaar vast te leggen.

PowerShell Modules Vereist
Primary API: Microsoft Purview (Security & Compliance PowerShell)
Connection: Connect-IPPSSession
Required Modules: ExchangeOnlineManagement

Implementatie

Dit artikel beschrijft hoe organisaties een governance-model voor labels opstellen, hoe zij via PowerShell, het Purview-portaal en sjablonen een robuuste set labels en policies configureren en hoe monitoring en remediatie worden geautomatiseerd. Elk onderdeel volgt de eisen van de Nederlandse Baseline voor Veilige Cloud en laat zien hoe labels aansluiten op selectielijsten, BIO-maatregelen en sectorale richtlijnen. Het bijbehorende script sensitivity-labels-configured.ps1 controleert of labels actief zijn, vergelijkt beleidsinstellingen met het afgesproken dataprofiel en kan indien nodig standaardlabels of -policies toevoegen.

Governance, dataclassificatie en beleidsafspraken

Een werkend labelprogramma begint bij governance. Nederlandse overheden moeten hun selectielijsten, BIO-classificaties en sectorale maatregelen (zoals IBI voor gemeenten of VIR-BI voor ministeries) vertalen naar concrete dataklassen. Dit vraagt een multidisciplinair team met vertegenwoordigers van informatiebeheer, CISO-office, privacy officer en primair proces. Tijdens meerdere werksessies worden informatiestromen geïnventariseerd, gekoppeld aan wettelijke grondslagen en vertaald naar maximaal vijf tot zeven hoofdlabels zodat eindgebruikers een herkenbaar palet houden. Elk label krijgt een duidelijke beschrijving, gebruikscriteria, voorbeelddocumenten en escalatiepunten. Documenteer deze afspraken in een label charter dat wordt bekrachtigd door het managementoverleg en leg vast hoe uitzonderingen worden vastgelegd in het besluitvormings- en registratiesysteem.

Naast de beschrijving moet een labelstrategie het lifecyclebeheer borgen. Veel organisaties blijven steken bij het uitrollen van labels zonder proces voor periodieke review. De Nederlandse Baseline vereist juist dat elke klas jaarlijks wordt geëvalueerd op relevantie, dat technologische ontwikkelingen worden verwerkt en dat lessons learned uit incidenten worden teruggekoppeld. Leg daarom vast dat het labelboard minimaal elk kwartaal KPI's beoordeelt, zoals het percentage documenten dat geclassificeerd is, het aantal overrides en de responstijd bij herclassificatieverzoeken. Integreer deze rapportages in het reguliere GRC-proces zodat bestuurders realtime inzicht hebben in de staat van informatiebeveiliging.

Juridische borging vormt een tweede pijler. De AVG vereist dat verwerking van persoonsgegevens proportioneel is en dat technische maatregelen aantoonbaar aansluiten op het risicoprofiel. Sensitivity labels leveren een meetbaar bewijs van passende bescherming, mits de metadata wordt gekoppeld aan verwerkingsregisters en DPIA's. Veel Nederlandse organisaties automatiseren dit door het label-ID op te nemen in hun verwerkingsregister en via Power Automate een melding te sturen naar de privacy officer wanneer een nieuw label wordt aangemaakt of gewijzigd. Hierdoor ontstaat een audittrail die eenvoudig kan worden overhandigd aan de Autoriteit Persoonsgegevens of de Algemene Rekenkamer.

Tot slot moeten awareness en adoptie integraal onderdeel zijn van de governance. Gebruikersclassificatie faalt wanneer medewerkers niet begrijpen wat labels doen of wanneer policies het werk hinderen. Gebruik praktijkgerichte training met voorbeelden uit de eigen organisatie, zorg voor contextuele hulp (bijvoorbeeld via de Office Sensitivity Bar) en richt een digitaal loket in voor vragen binnen één werkdag. Door governance, juridische borging en adoptie samen te brengen, ontstaat een fundament waarop de technische configuratie kan rusten.

Wanneer governance eenmaal staat, is het noodzakelijk om maturity expliciet te meten. Definieer meetbare doelstellingen zoals het percentage gelabelde documenten per organisatieonderdeel, de doorlooptijd van uitzonderingsverzoeken en de tijd die nodig is om nieuwe labels na besluitvorming live te zetten. Leg deze indicatoren vast in een dashboard dat wordt besproken binnen het CIO-beraad en koppel drempelwaarden aan concrete verbeteracties. Door governance niet alleen te beschrijven maar te meten, blijft het labelprogramma volwassen en sluit het naadloos aan op de overige beheercycli van de Nederlandse Baseline voor Veilige Cloud.

Technische configuratie van labels en policies

De technische implementatie start met het in kaart brengen van bestaande labelinventarisaties via Get-Label en Get-LabelPolicy. Daarna definieert u naamconventies die duidelijk maken voor welk doel het label is bedoeld, bijvoorbeeld "NL-Overheid | Vertrouwelijk | Persoonsgegevens". Gebruik PowerShell om labels consistent aan te maken zodat encryptie-instellingen, watermerken en inhoudsmarkeringen identiek worden toegepast. Voor elke klasse bepaalt u of encryptie verplicht is, welke gebruikers of groepen de inhoud mogen openen en of offline toegang is toegestaan. Dit voorkomt dat cruciale beleidsinformatie zonder toezicht naar onbeheerde apparaten wordt gekopieerd.

Bij configuratie speelt de keuze tussen standaardlabels en verplicht te gebruiken labels een grote rol. Overheidsorganisaties kiezen vaak voor een basistabel met automatische toepassing via Content Explorer en trainable classifiers, zodat documenten op basis van metadata of gevoelige informatie automatisch worden gelabeld. Tegelijkertijd blijft eindgebruikersinteractie nodig om uitzonderingen af te handelen. Combineer daarom automatische beleidstoewijzing met duidelijke policytips in Office-apps. Leg in het beleid vast welke justificatie vereist is wanneer een gebruiker een lager label kiest dan voorgesteld en log deze beslissing voor auditdoeleinden.

Een robuuste configuratie omvat ook publicatiepolicies per workload. Maak aparte policies voor Exchange, SharePoint/OneDrive en Teams, zodat u gefaseerd kunt uitrollen en nieuwe functionaliteit (zoals Meetings Protection) gecontroleerd kunt activeren. Gebruik de prioriteitsvolgorde in Purview om ervoor te zorgen dat pilotgroepen eerst nieuwe settings ontvangen en schaal pas op nadat monitoring laat zien dat de impact acceptabel is. Documenteer elke wijziging inclusief change-ID, doelstelling, verwachte impact en fallbackscenario in het CAB-dossier.

Tot slot moeten labels worden geïntegreerd met andere beveiligingsmechanismen. Koppel labels aan DLP-regels zodat het gekozen label automatisch strengere exfiltratiecontroles activeert. Integreer met Microsoft Defender for Cloud Apps zodat sessiebeleid kan afdwingen dat vertrouwelijke documenten enkel in webversie worden geopend of dat downloads worden geblokkeerd voor unmanaged devices. Door deze koppelingen ontstaat een consistent beschermingsnetwerk rond alle workloads.

Voor elk label dat productiegereed is hoort een technisch acceptatietraject. Richt een geautomatiseerde testset in waarin voorbeeldbestanden met bekende kenmerken worden opgeslagen in SharePoint, verstuurd via Exchange en gedeeld in Teams. Scripts controleren vervolgens of de juiste labels automatisch zijn toegepast, of cliënten de ingestelde banners tonen en of encryptiebeleid correct wordt afgedwongen op mobiele apparaten. Documenteer de resultaten inclusief screenshots en cmdlet-uitvoer zodat auditors kunnen verifiëren dat de configuratie daadwerkelijk werkt zoals beschreven. Pas pas na succesvolle acceptatie een staged rollout toe naar productie en communiceer duidelijk welke nieuwe mogelijkheden gebruikers ontvangen.

Automatisering, monitoring en remediatie

Zodra labels live staan, verschuift de focus naar monitoring. Architecten moeten aantonen dat elk label daadwerkelijk gebruikt wordt, dat policies actief zijn en dat uitzonderingen tijdig worden verwerkt. Het is onvoldoende om te vertrouwen op portaalrapportages; geavanceerde organisaties automatiseren controles met PowerShell en integreren de resultaten in hun SIEM of GRC-platform. Denk aan het dagelijks exporteren van labelstatistieken, het controleren van policyversies en het vergelijken van ingestelde scopes met de referentie-architectuur. Deze controles vormen de basis voor bewijs richting interne audit en externe toezichthouders.

Remediatie moet net zo strak zijn georganiseerd als deployment. Wanneer monitoring aantoont dat een label ontbreekt of een policy is uitgeschakeld, moet een geautomatiseerd proces de afwijking herstellen of minimaal een ticket aanmaken binnen het service managementplatform. Documenteer per afwijking wie eigenaar is, welke maatregel is genomen en welk bewijs beschikbaar is. Dit verkleint de kans dat gevoelige informatie zonder bescherming circuleert en versnelt de reactie op auditbevindingen.

Gebruik PowerShell-script sensitivity-labels-configured.ps1 (functie Invoke-Monitoring) – Voert controles uit op labels en publicatiepolicies, genereert rapportages en valideert configuratie tegen de Nederlandse Baseline voor Veilige Cloud..

Het genoemde script ondersteunt ook een debugmodus waarmee beheerders de logica lokaal kunnen testen zonder verbinding te maken met Microsoft 365. Dat is cruciaal tijdens ontwikkel- en acceptatiefases waarin scripts moeten worden gevalideerd binnen de maximale testtijd van vijftien seconden, zoals afgesproken in dit project. Door debugrapporten te bewaren, ontstaat inzicht in versieverschillen en kan eenvoudig worden aangetoond dat controles correct zijn uitgevoerd voordat de productie-tenant wordt benaderd.

Voor geavanceerde signalering koppelt u labeltelemetrie aan Microsoft Sentinel. Gebruik de dataconnector voor Purview om label events in te lezen en maak analytics rules die waarschuwen wanneer een vertrouwelijk document naar een extern domein wordt gestuurd of wanneer een gebruiker structureel labels verlaagt. Voeg automatische acties toe, zoals het intrekken van sessies via Conditional Access of het starten van een eDiscovery-onderzoek wanneer een kritieke drempelwaarde wordt overschreden.

Omdat automatisering afhankelijk is van meerdere cloudservices, hoort er een bedrijfscontinuïteitsplan bij. Leg vast hoe monitoring doorgaat wanneer Purview tijdelijk niet bereikbaar is, welke fallback-scripts lokaal kunnen worden gedraaid en hoe resultaten handmatig in het GRC-systeem worden ingevoerd zodra de dienst weer beschikbaar is. Test deze scenario's twee keer per jaar binnen vijftien seconden per script, zodat duidelijk is dat de debugmodus voldoende inzicht geeft zonder productie te belasten. Hiermee voldoen organisaties aan de eisen voor continuïteit uit de Nederlandse Baseline en laten zij zien dat informatiebescherming niet stilvalt bij platformstoringen.

Compliance, audit en continu verbeteren

Met correcte labels toon je aan dat informatie conform wettelijke kaders wordt behandeld. De BIO verlangt dat organisaties informatie classificeren, passende maatregelen kiezen en periodiek evalueren. Door labelconfiguraties, policybeschrijvingen en monitoringresultaten centraal vast te leggen, kan een auditor eenvoudig toetsen of alle controls zijn ingevuld. Gebruik het auditdossier om per label de gekoppelde maatregelen, toegewezen eigenaren en bewijsstukken op te slaan.

AVG-compliance vraagt bovendien aandacht voor rechten van betrokkenen. Labels maken zichtbaar waar persoonsgegevens zich bevinden, waardoor verzoeken tot inzage of verwijdering sneller kunnen worden afgehandeld. Combineer labels met Purview eDiscovery Premium zodat dossiers razendsnel kunnen worden verzameld. Documenteer in het verwerkingsregister welk label op welke dataset wordt toegepast en welke encryptieopties actief zijn; dit vormt het technische bewijs dat artikel 32-maatregelen zijn geïmplementeerd.

NIS2 introduceert strengere eisen voor essentiële en belangrijke entiteiten, waaronder continue risicobeoordeling en ketentransparantie. Door labels verplicht te stellen in samenwerkingen met leveranciers en andere overheden, borgt u dat gedeelde documenten altijd zijn voorzien van dezelfde beveiligingsstandaard. Leg contractueel vast dat partners de watermarking en encryptie niet verwijderen en dat ze incidenten binnen 24 uur melden wanneer beschermde informatie mogelijk is gelekt.

Continue verbetering wordt bereikt door lessons learned uit incidenten, audits en pentests rechtstreeks terug te laten vloeien naar het labelprogramma. Wanneer een lek aantoont dat een bepaald label onvoldoende restricties bevat, moet binnen het changeproces een voorstel worden uitgewerkt dat beleid, gebruikersimpact en technische aanpassingen beschrijft. Door deze feedbacklus te formaliseren, blijft het labelstelsel actueel en sluit het aan op nieuwe dreigingen, veranderende wetgeving en organisatorische prioriteiten.

Vergeet niet om bewijsvoering duurzaam op te slaan. Verslagen van awarenesssessies, beslisnota's van het labelboard, logging van automatische remediatie en exportbestanden van het script vormen samen het dossier waarmee de organisatie kan aantonen dat de Nederlandse Baseline voor Veilige Cloud actief wordt nageleefd. Koppel deze artefacten aan het kwaliteitsmanagementsysteem en stel een bewaartermijn vast die aansluit op de Archiefwet, zodat toekomstige audits of parlementaire onderzoeken altijd kunnen terugvallen op betrouwbare documentatie.

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 Controleert en publiceert de baseline gevoeligheidslabels voor Microsoft 365. .DESCRIPTION Dit script ondersteunt de Nederlandse Baseline voor Veilige Cloud door te valideren of het baseline-label bestaat, of het label is gepubliceerd naar alle workloads en of de laatste reviewdatum voldoet aan de gestelde termijn. Daarnaast kan het script het labelbeleid bijwerken en reviewmetadata registreren. De DebugMode levert veilige, lokale testruns die altijd binnen vijftien seconden uitvoerbaar zijn. .NOTES Filename : sensitivity-labels-configured.ps1 Author : Nederlandse Baseline voor Veilige Cloud Category : information-protection Workload : m365 .EXAMPLE .\sensitivity-labels-configured.ps1 -Monitoring Toont of het baseline-label bestaat, of encryptie actief is en of het labelbeleid alle workloads afdekt. .EXAMPLE .\sensitivity-labels-configured.ps1 -Remediation Publiceert het baseline-label naar het beleid, werkt workloads bij en registreert de reviewdatum. #> #Requires -Version 5.1 #Requires -Modules ExchangeOnlineManagement [CmdletBinding()] param( [switch]$Monitoring, [switch]$Remediation, [switch]$Revert, [switch]$WhatIf, [switch]$DebugMode ) $ErrorActionPreference = 'Stop' $script:BaselineLabelName = "NBVC - Vertrouwelijk" $script:BaselinePolicyName = "Baseline - NBVC Sensitivity Labels" $script:RequiredLocations = @("Exchange", "SharePoint", "OneDrive", "Teams") $script:ReviewMetadataKey = "NBVC_LastReview" $script:MaxReviewDays = 365 function Write-Header { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Sensitivity Labels Configured" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan } function Connect-ComplianceService { try { $existing = Get-PSSession | Where-Object { $_.ConfigurationName -eq "Microsoft.Exchange" -and $_.State -eq "Opened" -and $_.Name -like "*IPPSSession*" } if (-not $existing) { Write-Host "Verbinden met Security & Compliance PowerShell..." -ForegroundColor Gray Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop | Out-Null } } catch { Write-Host "[FAIL] Verbinding mislukt: $($_.Exception.Message)" -ForegroundColor Red throw } } function Get-BaselineLabelStatus { param( [Parameter(Mandatory)] [string]$LabelName ) $label = Get-Label -Identity $LabelName -ErrorAction SilentlyContinue if (-not $label) { return [PSCustomObject]@{ Name = $LabelName Exists = $false EncryptionEnabled = $false JustificationEnabled = $false LastModified = $null } } $encryptionEnabled = $false $justification = $false if ($label.Settings) { foreach ($key in $label.Settings.Keys) { if ($key -eq "EncryptionEnabled") { $encryptionEnabled = [bool]::Parse($label.Settings[$key]) } if ($key -eq "DowngradeJustificationRequired") { $justification = [bool]::Parse($label.Settings[$key]) } } } return [PSCustomObject]@{ Name = $label.Name Exists = $true EncryptionEnabled = $encryptionEnabled JustificationEnabled = $justification LastModified = $label.WhenChangedUTC } } function Get-BaselinePolicyStatus { param( [Parameter(Mandatory)] [string]$PolicyName ) $policy = Get-LabelPolicy -Identity $PolicyName -ErrorAction SilentlyContinue if (-not $policy) { return [PSCustomObject]@{ Name = $PolicyName Exists = $false Labels = @() Locations = @() LastReviewDate = $null } } $locations = @() if ($policy.ExchangeLocation -eq "All" -or $policy.ExchangeLocation.Count -gt 0) { $locations += "Exchange" } if ($policy.SharePointLocation -eq "All" -or $policy.SharePointLocation.Count -gt 0) { $locations += "SharePoint" } if ($policy.OneDriveLocation -eq "All" -or $policy.OneDriveLocation.Count -gt 0) { $locations += "OneDrive" } if ($policy.SiteAndGroupLocation -eq "All" -or $policy.SiteAndGroupLocation.Count -gt 0) { $locations += "Teams" } $reviewDate = $policy.WhenChangedUTC if ($policy.AdvancedSettings -and $policy.AdvancedSettings.ContainsKey($script:ReviewMetadataKey)) { $value = $policy.AdvancedSettings[$script:ReviewMetadataKey] if ($value) { $reviewDate = [DateTime]::Parse($value) } } return [PSCustomObject]@{ Name = $policy.Name Exists = $true Labels = $policy.Labels Locations = $locations LastReviewDate = $reviewDate } } function Invoke-SensitivityLabelAssessment { if ($DebugMode) { Write-Host "[MODE] Debug: voorbeeldresultaat" -ForegroundColor Yellow return [PSCustomObject]@{ LabelExists = $true EncryptionEnabled = $true Justification = $true PolicyExists = $true Published = $true MissingLocations = @() LastReviewDate = (Get-Date).AddDays(-120) Compliant = $true } } Connect-ComplianceService $labelStatus = Get-BaselineLabelStatus -LabelName $script:BaselineLabelName $policyStatus = Get-BaselinePolicyStatus -PolicyName $script:BaselinePolicyName $missingLocations = $script:RequiredLocations | Where-Object { $_ -notin $policyStatus.Locations } $labelPublished = $policyStatus.Labels -contains $script:BaselineLabelName $reviewAge = if ($policyStatus.LastReviewDate) { (New-TimeSpan -Start $policyStatus.LastReviewDate -End (Get-Date)).Days } else { [int]::MaxValue } $isCompliant = $labelStatus.Exists -and $labelStatus.EncryptionEnabled -and $labelStatus.JustificationEnabled -and $policyStatus.Exists -and $labelPublished -and ($missingLocations.Count -eq 0) -and ($reviewAge -le $script:MaxReviewDays) if (-not $labelStatus.Exists) { Write-Host "[WARN] Label '$($script:BaselineLabelName)' bestaat niet." -ForegroundColor Yellow } if (-not $labelStatus.EncryptionEnabled) { Write-Host "[WARN] Label '$($script:BaselineLabelName)' heeft geen encryptie." -ForegroundColor Yellow } if (-not $policyStatus.Exists) { Write-Host "[WARN] Labelbeleid '$($script:BaselinePolicyName)' ontbreekt." -ForegroundColor Yellow } if (-not $labelPublished) { Write-Host "[WARN] Label is niet gekoppeld aan het beleid." -ForegroundColor Yellow } if ($missingLocations) { Write-Host "[WARN] Ontbrekende workloads: $($missingLocations -join ', ')." -ForegroundColor Yellow } if ($reviewAge -gt $script:MaxReviewDays) { Write-Host "[WARN] Review ouder dan $script:MaxReviewDays dagen." -ForegroundColor Yellow } if ($isCompliant) { Write-Host "[OK] Baseline gevoeligheidslabels voldoen aan de criteria." -ForegroundColor Green } return [PSCustomObject]@{ LabelExists = $labelStatus.Exists EncryptionEnabled = $labelStatus.EncryptionEnabled Justification = $labelStatus.JustificationEnabled PolicyExists = $policyStatus.Exists Published = $labelPublished MissingLocations = $missingLocations LastReviewDate = $policyStatus.LastReviewDate Compliant = $isCompliant } } function Update-PolicyReviewMetadata { param( [Parameter(Mandatory)] [string]$PolicyName, [Parameter(Mandatory)] [hashtable]$ExistingSettings ) $settings = @{} foreach ($key in $ExistingSettings.Keys) { $settings[$key] = $ExistingSettings[$key] } $settings[$script:ReviewMetadataKey] = (Get-Date).ToString("o") if ($WhatIf) { Write-Host "[WhatIf] Reviewmetadata voor '$PolicyName' wordt bijgewerkt." -ForegroundColor Yellow } else { Set-LabelPolicy -Identity $PolicyName -AdvancedSettings $settings -ErrorAction Stop } } function Invoke-SensitivityLabelRemediation { if ($DebugMode) { Write-Host "[MODE] Debug: remediatievoorbeeld" -ForegroundColor Yellow Write-Host "Zou label '$($script:BaselineLabelName)' publiceren en reviewmetadata bijwerken." -ForegroundColor Gray return } Connect-ComplianceService $label = Get-Label -Identity $script:BaselineLabelName -ErrorAction SilentlyContinue if (-not $label) { throw "Label '$($script:BaselineLabelName)' bestaat niet. Maak het label eerst aan in Microsoft Purview." } $policy = Get-LabelPolicy -Identity $script:BaselinePolicyName -ErrorAction SilentlyContinue if (-not $policy) { if ($WhatIf) { Write-Host "[WhatIf] Labelbeleid '$($script:BaselinePolicyName)' zou worden aangemaakt." -ForegroundColor Yellow } else { $policy = New-LabelPolicy ` -Name $script:BaselinePolicyName ` -Comment "Baseline publicatie van gevoeligheidslabels (Nederlandse Baseline voor Veilige Cloud)" ` -Labels $script:BaselineLabelName ` -ExchangeLocation All ` -SharePointLocation All ` -OneDriveLocation All ` -SiteAndGroupLocation All ` -EnabledPolicy $true ` -ErrorAction Stop } } else { $labels = @($policy.Labels) if ($labels -notcontains $script:BaselineLabelName) { $newLabels = ($labels + $script:BaselineLabelName | Sort-Object -Unique) if ($WhatIf) { Write-Host "[WhatIf] Label '$($script:BaselineLabelName)' wordt toegevoegd aan het beleid." -ForegroundColor Yellow } else { Set-LabelPolicy -Identity $script:BaselinePolicyName -Labels $newLabels -ErrorAction Stop } } $updatesNeeded = $false $parameters = @{ Identity = $script:BaselinePolicyName ErrorAction = 'Stop' } if ($policy.ExchangeLocation -ne "All") { $parameters["ExchangeLocation"] = "All" $updatesNeeded = $true } if ($policy.SharePointLocation -ne "All") { $parameters["SharePointLocation"] = "All" $updatesNeeded = $true } if ($policy.OneDriveLocation -ne "All") { $parameters["OneDriveLocation"] = "All" $updatesNeeded = $true } if ($policy.SiteAndGroupLocation -ne "All") { $parameters["SiteAndGroupLocation"] = "All" $updatesNeeded = $true } if ($updatesNeeded) { if ($WhatIf) { Write-Host "[WhatIf] Workloads van het beleid worden op 'All' gezet." -ForegroundColor Yellow } else { Set-LabelPolicy @parameters } } } $policy = Get-LabelPolicy -Identity $script:BaselinePolicyName -ErrorAction SilentlyContinue if ($policy) { $existingSettings = if ($policy.AdvancedSettings) { $policy.AdvancedSettings } else { @{} } Update-PolicyReviewMetadata -PolicyName $policy.Name -ExistingSettings $existingSettings } Write-Host "[OK] Remediatie uitgevoerd." -ForegroundColor Green } function Invoke-SensitivityLabelRevert { if ($DebugMode) { Write-Host "[MODE] Debug: revertvoorbeeld" -ForegroundColor Yellow return } if (-not $WhatIf) { $confirm = Read-Host "Weet u zeker dat u het baselinebeleid wilt aanpassen? (ja/nee)" if ($confirm -ne "ja") { Write-Host "Actie geannuleerd." -ForegroundColor Yellow return } } Connect-ComplianceService $policy = Get-LabelPolicy -Identity $script:BaselinePolicyName -ErrorAction SilentlyContinue if (-not $policy) { Write-Host "[INFO] Er is geen beleid om te herstellen." -ForegroundColor Gray return } $remainingLabels = @($policy.Labels | Where-Object { $_ -ne $script:BaselineLabelName }) if ($remainingLabels.Count -eq 0) { if ($WhatIf) { Write-Host "[WhatIf] Labelbeleid '$($script:BaselinePolicyName)' zou worden verwijderd." -ForegroundColor Yellow } else { Remove-LabelPolicy -Identity $script:BaselinePolicyName -Confirm:$false -ErrorAction Stop } } else { if ($WhatIf) { Write-Host "[WhatIf] Label '$($script:BaselineLabelName)' wordt uit het beleid gehaald." -ForegroundColor Yellow } else { Set-LabelPolicy -Identity $script:BaselinePolicyName -Labels $remainingLabels -ErrorAction Stop } } Write-Host "[OK] Revert afgerond." -ForegroundColor Green } Write-Header try { if ($Monitoring) { $result = Invoke-SensitivityLabelAssessment if ($result) { Write-Host "`nSamenvatting:" -ForegroundColor Cyan Write-Host " Compliant : $($result.Compliant)" -ForegroundColor Gray Write-Host " Review : $($result.LastReviewDate)" -ForegroundColor Gray if ($result.MissingLocations.Count -gt 0) { Write-Host " Ontbrekend: $($result.MissingLocations -join ', ')" -ForegroundColor Gray } } } elseif ($Remediation) { Invoke-SensitivityLabelRemediation } elseif ($Revert) { Invoke-SensitivityLabelRevert } else { Write-Host "Gebruik een van de opties: -Monitoring, -Remediation, -Revert, -DebugMode, -WhatIf" -ForegroundColor Yellow } } catch { Write-Host "[FAIL] $($_.Exception.Message)" -ForegroundColor Red throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder labels kan vertrouwelijke informatie ongecontroleerd verspreiden, voldoen organisaties niet aan BIO- en AVG-eisen en ontbreekt bewijs richting NIS2-toezichthouders.

Management Samenvatting

Richt Microsoft Purview sensitivity labels integraal in, monitor de policies automatisch en herstel afwijkingen direct met het bijbehorende script zodat overheidsinformatie altijd volgens de Nederlandse Baseline voor Veilige Cloud wordt beschermd.