Publieke Verantwoording Voor Microsoft 365 Beveiliging En Governance

💼 Management Samenvatting

Publieke verantwoording is een fundamenteel vereiste voor Nederlandse overheidsorganisaties die Microsoft 365 gebruiken. Organisaties moeten aantoonbaar kunnen maken dat zij zorgvuldig omgaan met publieke middelen, dat burgers kunnen vertrouwen op de beveiliging van hun gegevens, en dat zij voldoen aan wettelijke verplichtingen rondom transparantie en openbaarheid. Effectieve publieke verantwoording gaat verder dan technische compliance: het omvat transparante rapportage, actieve communicatie met stakeholders, en het vermogen om verantwoording af te leggen over beslissingen en investeringen in digitale beveiliging.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
100u (tech: 40u)
Van toepassing op:
M365
Publieke Sector
Overheidsorganisaties
Azure AD / Entra ID
Exchange Online
SharePoint Online
Teams

Overheidsorganisaties werken met publieke middelen en verwerken gegevens van burgers, wat hen een bijzondere verantwoordelijkheid geeft voor transparantie en verantwoording. Zonder adequate publieke verantwoording kunnen organisaties geen vertrouwen opbouwen bij burgers, bestuurders en toezichthouders. Dit leidt tot situaties waarin beslissingen over beveiligingsinvesteringen worden betwist, waarin incidenten leiden tot publieke controverse omdat onduidelijk is wat de organisatie heeft gedaan om risico's te mitigeren, en waarin audits en toezichtsfuncties niet effectief kunnen worden uitgevoerd omdat informatie niet beschikbaar of toegankelijk is. Bovendien stellen wettelijke kaders zoals de Wet open overheid (Woo), de Algemene Verordening Gegevensbescherming (AVG), de Baseline Informatiebeveiliging Overheid (BIO) en de NIS2-richtlijn expliciete eisen aan transparantie en verantwoording. Organisaties die niet in staat zijn om adequaat verantwoording af te leggen, lopen het risico op boetes, reputatieschade, en het verlies van vertrouwen van burgers en stakeholders. Publieke verantwoording is daarom niet optioneel maar essentieel voor elke overheidsorganisatie die Microsoft 365 gebruikt.

PowerShell Modules Vereist
Primary API: Microsoft Graph, Microsoft 365 Admin Center, Compliance Manager, Audit Log
Connection: Connect-MgGraph, Connect-IPPSSession
Required Modules: Microsoft.Graph, ExchangeOnlineManagement

Implementatie

Dit artikel beschrijft hoe Nederlandse overheidsorganisaties publieke verantwoording kunnen inrichten voor Microsoft 365 beveiliging en governance. We bespreken de wettelijke en ethische verplichtingen voor transparantie en verantwoording, welke informatie geschikt is voor publieke verantwoording en welke informatie beschermd moet blijven om beveiliging niet te ondermijnen. Het artikel behandelt verschillende vormen van verantwoording: formele rapportage aan bestuurders en toezichthouders, transparante communicatie met burgers en stakeholders, proactieve openbaarmaking van beveiligingsbeleid en -praktijken, en reactieve verantwoording na incidenten of audits. Daarnaast beschrijven we hoe Microsoft 365-tools zoals Compliance Manager, Audit Log, Secure Score en rapportage-functionaliteiten kunnen worden gebruikt om gegevens te verzamelen voor verantwoording. Het bijbehorende PowerShell-script ondersteunt deze aanpak door relevante metrics en rapportagegegevens te verzamelen en te structureren voor verschillende doelgroepen.

Publieke verantwoording voor Microsoft 365 beveiliging en governance is gebaseerd op meerdere wettelijke en ethische kaders die elkaar aanvullen en versterken. De Wet open overheid (Woo) verplicht overheidsorganisaties om informatie actief openbaar te maken en om op verzoek informatie te verstrekken, tenzij specifieke uitzonderingen van toepassing zijn zoals de bescherming van beveiligingsbelangen of persoonlijke levenssfeer. Dit betekent dat organisaties proactief moeten nadenken over welke informatie over hun beveiligings- en governance-praktijken geschikt is voor openbaarmaking en hoe zij deze informatie toegankelijk kunnen maken voor burgers, journalisten en andere geïnteresseerden. De Woo vereist niet dat alle technische details worden openbaar gemaakt, maar wel dat algemene beleidskaders, risicobeoordelingen op hoog niveau, en belangrijke beslissingen over beveiligingsinvesteringen beschikbaar zijn.

De Baseline Informatiebeveiliging Overheid (BIO) legt specifieke verantwoordingsverplichtingen op aan overheidsorganisaties. Control 02.01 vereist dat organisaties informatiebeveiligingsbeleid documenteren en communiceren, wat impliceert dat dit beleid in principe openbaar beschikbaar moet zijn tenzij er specifieke beveiligingsredenen zijn om bepaalde onderdelen te beschermen. Control 17.01 vereist dat organisaties een informatiebeveiligingsincidentbeheerproces hebben en dat zij incidenten rapporteren aan relevante stakeholders, wat betekent dat organisaties moeten kunnen verantwoorden hoe zij incidenten hebben afgehandeld en welke lessen zijn getrokken. Control 18.01 vereist dat organisaties compliance monitoren en rapporteren, wat impliceert dat organisaties moeten kunnen aantonen dat zij voldoen aan relevante kaders en welke maatregelen zij hebben genomen om compliance te waarborgen.

De NIS2-richtlijn, die vanaf 2024 wordt geïmplementeerd in Nederlandse wetgeving, legt aanvullende verantwoordingsverplichtingen op aan essentiële en belangrijke entiteiten. Artikel 21 vereist dat organisaties significante incidenten rapporteren aan relevante autoriteiten binnen 24 uur, en dat zij na 72 uur een gedetailleerde rapportage indienen met informatie over de impact, oorzaken en genomen maatregelen. Deze rapportages zijn niet automatisch publiek, maar kunnen onder bepaalde omstandigheden worden gedeeld met andere organisaties of publiek gemaakt worden door toezichthouders. Organisaties moeten daarom voorbereid zijn op publieke aandacht voor incidenten en moeten kunnen verantwoorden wat zij hebben gedaan om risico's te mitigeren en hoe zij hebben gereageerd op incidenten.

De Algemene Verordening Gegevensbescherming (AVG) verplicht organisaties om transparant te zijn over hoe zij persoonsgegevens verwerken, wat betekent dat organisaties moeten kunnen uitleggen welke beveiligingsmaatregelen zij hebben genomen om persoonsgegevens te beschermen. Artikel 32 vereist dat organisaties passende technische en organisatorische maatregelen nemen om persoonsgegevens te beveiligen, en organisaties moeten kunnen aantonen dat zij deze maatregelen daadwerkelijk hebben geïmplementeerd en onderhouden. Artikel 30 vereist dat organisaties een verwerkingsregister bijhouden waarin zij documenteren welke persoonsgegevens zij verwerken en welke beveiligingsmaatregelen daarbij horen, wat een belangrijke bron vormt voor verantwoording over gegevensbescherming.

Naast deze wettelijke verplichtingen hebben overheidsorganisaties ook ethische verantwoordingsverplichtingen die voortkomen uit hun publieke taak. Burgers hebben het recht om te weten hoe hun gegevens worden beveiligd, hoe publieke middelen worden besteed aan digitale beveiliging, en welke risico's organisaties accepteren of mitigeren. Bestuurders en toezichthouders hebben de verantwoordelijkheid om te zorgen dat organisaties adequaat beveiligd zijn en moeten daarom kunnen beschikken over informatie die hen in staat stelt om geïnformeerde beslissingen te nemen. Door transparant te zijn over beveiligings- en governance-praktijken bouwen organisaties vertrouwen op bij burgers, stakeholders en partners, wat essentieel is voor het vervullen van hun publieke taak.

Verantwoordingsraamwerk en Structuur

Effectieve publieke verantwoording vereist een gestructureerd raamwerk dat verschillende vormen van verantwoording ondersteunt voor verschillende doelgroepen. Het raamwerk moet duidelijk maken welke informatie geschikt is voor welke vorm van verantwoording, welke stakeholders welke informatie nodig hebben, en hoe informatie wordt verzameld, gestructureerd en gepresenteerd. Een goed verantwoordingsraamwerk onderscheidt tussen verschillende niveaus van detail: strategische verantwoording voor bestuurders en toezichthouders die focust op risico's, investeringen en compliance-status op hoog niveau, operationele verantwoording voor IT- en security-teams die focust op technische metrics en implementatie-status, en publieke verantwoording voor burgers en andere stakeholders die focust op algemene beleidskaders en belangrijke ontwikkelingen.

Strategische verantwoording richt zich op bestuurders, raden van toezicht, en toezichthouders die behoefte hebben aan inzicht in de algemene beveiligingspostuur van de organisatie en de mate waarin de organisatie voldoet aan relevante kaders en wetgeving. Deze vorm van verantwoording moet informatie bevatten over de belangrijkste risico's die de organisatie identificeert, de maatregelen die zijn genomen om deze risico's te mitigeren, de investeringen die zijn gedaan in beveiliging en compliance, en de status van belangrijke initiatieven en programma's. Strategische verantwoording moet periodiek plaatsvinden, bijvoorbeeld kwartaal- of halfjaarlijks, en moet trends en ontwikkelingen over tijd laten zien zodat bestuurders kunnen beoordelen of de organisatie vooruitgang boekt of dat aanvullende actie nodig is.

Operationele verantwoording richt zich op IT- en security-teams, compliance officers, en andere professionals die behoefte hebben aan gedetailleerde informatie over de implementatie en effectiviteit van beveiligingsmaatregelen. Deze vorm van verantwoording moet informatie bevatten over technische metrics zoals Secure Score, MFA-dekking, Conditional Access configuratie, compliance-status op controle niveau, en incidentstatistieken. Operationele verantwoording moet frequent plaatsvinden, bijvoorbeeld maandelijks, en moet concrete actiepunten en verbeterinitiatieven bevatten. Deze informatie is typisch intern en niet geschikt voor publieke openbaarmaking omdat het technische details bevat die kunnen worden gebruikt door aanvallers, maar moet wel beschikbaar zijn voor interne stakeholders die verantwoordelijk zijn voor beveiligingsbeheer.

Publieke verantwoording richt zich op burgers, journalisten, en andere externe stakeholders die behoefte hebben aan inzicht in hoe de organisatie omgaat met beveiliging en compliance, zonder dat technische details worden openbaar gemaakt die beveiliging kunnen ondermijnen. Publieke verantwoording moet informatie bevatten over algemene beleidskaders, belangrijke investeringen in beveiliging, algemene risicobeoordelingen op hoog niveau, en belangrijke ontwikkelingen zoals nieuwe initiatieven of belangrijke incidenten. Publieke verantwoording kan plaatsvinden via verschillende kanalen: proactieve openbaarmaking op websites, reactieve informatieverstrekking op basis van Woo-verzoeken, publieke rapportages zoals jaarverslagen of security-rapporten, en communicatie bij incidenten of belangrijke ontwikkelingen.

Het verantwoordingsraamwerk moet ook duidelijk maken welke informatie wel en niet geschikt is voor openbaarmaking. Technische details zoals specifieke configuraties, kwetsbaarheden, of aanvalsmethoden die kunnen worden gebruikt door kwaadwillenden moeten beschermd blijven. Persoonsgegevens moeten altijd worden beschermd in overeenstemming met de AVG. Commerciële informatie zoals specifieke contracten of prijzen kan gevoelig zijn en moet worden beoordeeld op openbaarheid. Echter, algemene beleidskaders, risicobeoordelingen op hoog niveau, investeringsniveaus, en compliance-status zijn typisch wel geschikt voor openbaarmaking en vormen de basis voor publieke verantwoording.

Metrics en Rapportagegegevens voor Verantwoording

Gebruik PowerShell-script public-accountability.ps1 (functie Invoke-AccountabilityMetricsCollection) – Verzamelt relevante metrics en rapportagegegevens uit Microsoft 365 die geschikt zijn voor publieke verantwoording, inclusief Secure Score trends, compliance-status, en belangrijke ontwikkelingen.

Effectieve publieke verantwoording vereist objectieve en meetbare gegevens die betrouwbaar kunnen worden verzameld en gepresenteerd. Microsoft 365 biedt verschillende tools en functies die waardevolle gegevens leveren voor verantwoording. Microsoft Secure Score is een belangrijke metric die de beveiligingspostuur van de organisatie weerspiegelt op basis van geconfigureerde maatregelen en best practices. Secure Score kan worden gebruikt om trends over tijd te tonen en om te demonstreren dat de organisatie vooruitgang boekt in het verbeteren van beveiliging. Compliance Manager biedt vergelijkbare functionaliteit voor compliance-status, waarbij organisaties kunnen zien hoe zij scoren op verschillende frameworks zoals BIO, ISO 27001, en NIS2. Deze tools leveren objectieve, reproduceerbare gegevens die geschikt zijn voor verantwoording aan verschillende stakeholders.

Naast deze geaggregeerde scores zijn er meer gedetailleerde metrics die inzicht geven in specifieke aspecten van beveiligings- en governance-praktijken. MFA-dekking is een belangrijke metric die kan worden gebruikt om te demonstreren dat de organisatie passende toegangsbeveiliging heeft geïmplementeerd. Conditional Access configuratie kan worden gemeten door te kijken naar het aantal policies, de dekking van gebruikers en applicaties, en het gebruik van risicogestuurde beslissingen. DLP-implementatie kan worden gemeten door te analyseren hoeveel DLP-policies zijn geconfigureerd en welke typen gevoelige informatie worden beschermd. Retentie- en compliance-configuratie kan worden gemeten door te kijken naar het aantal retentie-labels en policies en de dekking van data. Deze metrics kunnen worden gebruikt om te demonstreren dat specifieke maatregelen zijn geïmplementeerd en dat zij effect hebben.

Audit logging biedt waardevolle gegevens voor verantwoording omdat het aantoont dat de organisatie monitort wat er gebeurt in de omgeving en dat zij in staat is om incidenten te onderzoeken en te reageren. Audit logs kunnen worden gebruikt om te demonstreren dat beveiligingsmaatregelen daadwerkelijk worden gebruikt, dat toegangscontroles effectief zijn, en dat de organisatie proactief monitort op verdachte activiteiten. Echter, specifieke details uit audit logs zijn typisch niet geschikt voor publieke openbaarmaking omdat zij technische details kunnen bevatten of omdat zij betrekking kunnen hebben op individuele gebruikers. Geaggregeerde statistieken zoals het aantal gecontroleerde toegangspogingen, het aantal gedetecteerde incidenten, of trends in beveiligingsgebeurtenissen zijn wel geschikt voor verantwoording.

Het PowerShell-script dat bij dit artikel hoort, verzamelt relevante metrics en structuur deze voor verschillende vormen van verantwoording. Het script haalt gegevens op uit verschillende bronnen: Secure Score via Microsoft Graph, compliance-status via Compliance Manager, MFA-dekking via Azure AD, en algemene configuratie-informatie via verschillende Microsoft 365 admin centers. Door deze gegevens te combineren in gestructureerde rapportages, ontstaat een compleet beeld van de beveiligings- en governance-postuur die geschikt is voor verantwoording. Het script ondersteunt ook een DebugMode waarin geen verbinding wordt gemaakt met Microsoft 365 en waarin voorbeelddata wordt teruggegeven, zodat het script lokaal kan worden getest en gedemonstreerd zonder toegang tot productie-omgevingen.

Rapportageformaten en Communicatiekanalen

Effectieve publieke verantwoording vereist dat informatie wordt gepresenteerd in formaten die geschikt zijn voor de doelgroep en via kanalen die toegankelijk zijn voor de beoogde stakeholders. Strategische verantwoording voor bestuurders en toezichthouders moet worden gepresenteerd in beknopte, visuele formaten die snel inzicht geven in de belangrijkste ontwikkelingen en trends. Executive dashboards met hoog-niveau metrics, trendgrafieken die ontwikkeling over tijd tonen, en heatmaps die compliance-status per domein tonen zijn geschikte formaten voor strategische verantwoording. Deze informatie moet worden gepresenteerd in regelmatige bestuursvergaderingen of toezichtsrapportages, en moet vergezeld gaan van duidelijke aanbevelingen en actiepunten.

Operationele verantwoording voor IT- en security-teams moet worden gepresenteerd in gedetailleerde, technische formaten die alle relevante informatie bevatten voor effectief beheer en verbetering. Gedetailleerde rapportages met technische metrics, configuratie-overzichten, incidentstatistieken, en concrete actiepunten zijn geschikte formaten voor operationele verantwoording. Deze informatie moet worden gepresenteerd in regelmatige teamvergaderingen, via gedeelde dashboards of rapportageplatforms, en moet toegankelijk zijn voor alle relevante professionals die betrokken zijn bij beveiligingsbeheer.

Publieke verantwoording voor burgers en andere externe stakeholders moet worden gepresenteerd in toegankelijke, niet-technische formaten die duidelijk en begrijpelijk zijn voor een breed publiek. Publieke rapportages moeten gebruik maken van duidelijke taal, visuele elementen zoals grafieken en infographics, en concrete voorbeelden die het belang en de impact van beveiligingsmaatregelen illustreren. Publieke rapportages moeten worden gepubliceerd op de website van de organisatie, moeten worden gedeeld via sociale media en andere communicatiekanalen, en moeten toegankelijk zijn via Woo-verzoeken wanneer specifieke informatie wordt opgevraagd. Publieke verantwoording moet ook proactief plaatsvinden, niet alleen reactief wanneer informatie wordt opgevraagd.

Bij incidenten of belangrijke ontwikkelingen is het belangrijk om snel en transparant te communiceren met relevante stakeholders. Incidentrapportages moeten duidelijk maken wat er is gebeurd, wat de impact is geweest, welke maatregelen zijn genomen om de situatie te mitigeren, en welke lessen zijn getrokken om herhaling te voorkomen. Deze rapportages moeten worden gedeeld met bestuurders, toezichthouders, en waar relevant met het publiek, afhankelijk van de ernst en impact van het incident. Door snel en transparant te communiceren over incidenten bouwen organisaties vertrouwen op en demonstreren zij dat zij serieus omgaan met beveiliging en verantwoording.

Transparantie en Balans met Beveiligingsbelangen

Publieke verantwoording vereist een zorgvuldige balans tussen transparantie enerzijds en de bescherming van beveiligingsbelangen anderzijds. Volledige transparantie over alle technische details kan beveiliging ondermijnen door aanvallers informatie te geven die zij kunnen gebruiken voor aanvallen. Echter, te weinig transparantie kan leiden tot wantrouwen en kan het moeilijk maken voor burgers en stakeholders om te begrijpen hoe de organisatie omgaat met beveiliging en risico's. Het vinden van de juiste balans vereist dat organisaties systematisch evalueren welke informatie geschikt is voor openbaarmaking en welke informatie beschermd moet blijven.

Informatie die typisch geschikt is voor openbaarmaking omvat algemene beleidskaders en principes, risicobeoordelingen op hoog niveau zonder specifieke technische details, algemene investeringsniveaus in beveiliging en compliance, compliance-status op framework niveau, algemene metrics zoals Secure Score trends zonder specifieke configuratiedetails, en belangrijke ontwikkelingen zoals nieuwe initiatieven of belangrijke incidenten. Deze informatie geeft stakeholders inzicht in hoe de organisatie omgaat met beveiliging zonder technische details te onthullen die kunnen worden gebruikt door aanvallers.

Informatie die typisch beschermd moet blijven omvat specifieke technische configuraties en parameters, gedetailleerde kwetsbaarheidsinformatie, specifieke aanvalsmethoden of technieken, persoonsgegevens of andere gevoelige gegevens, commerciële informatie zoals specifieke contracten of prijzen, en operationele details zoals specifieke monitoringregels of responsprocedures. Deze informatie kan worden gebruikt door aanvallers om aanvallen te plannen of uit te voeren, of kan leiden tot privacy- of commerciële schade wanneer zij wordt openbaar gemaakt.

Wanneer informatie wordt opgevraagd via de Wet open overheid of andere kanalen, moeten organisaties zorgvuldig beoordelen of openbaarmaking gerechtvaardigd is of dat uitzonderingen van toepassing zijn. Uitzonderingen op de openbaarheidplicht kunnen van toepassing zijn wanneer openbaarmaking de beveiliging zou schaden, wanneer persoonsgegevens in het geding zijn, of wanneer commerciële belangen worden geschaad. Echter, organisaties moeten uitzonderingen niet te ruim interpreteren en moeten altijd beargumenteren waarom specifieke informatie niet kan worden openbaar gemaakt. Wanneer informatie niet volledig kan worden openbaar gemaakt, moeten organisaties proberen om zoveel mogelijk informatie te delen door bijvoorbeeld geaggregeerde of geanonimiseerde versies te maken, of door algemene principes en kaders te delen zonder specifieke details.

Door proactief transparant te zijn over algemene beleidskaders, risicobeoordelingen, en belangrijke ontwikkelingen, kunnen organisaties vertrouwen opbouwen en voorkomen dat zij reactief moeten reageren op informatieverzoeken. Proactieve transparantie maakt het ook mogelijk om informatie te presenteren in een context die helpt om het te begrijpen, in plaats van alleen reactief informatie te verstrekken wanneer deze wordt opgevraagd. Door een cultuur van transparantie te creëren waarin openbaarmaking de norm is tenzij er specifieke redenen zijn om informatie te beschermen, kunnen organisaties een betere balans vinden tussen transparantie en beveiligingsbelangen.

Continue Verbetering en Feedback

Gebruik PowerShell-script public-accountability.ps1 (functie Invoke-AccountabilityReporting) – Genereert gestructureerde rapportages voor verschillende doelgroepen op basis van verzamelde metrics en gegevens.

Publieke verantwoording is geen eenmalige activiteit maar een continu proces dat regelmatig moet worden geëvalueerd en verbeterd. Door feedback te verzamelen van verschillende stakeholders kunnen organisaties bepalen of hun verantwoording effectief is en of deze voldoet aan de behoeften van de verschillende doelgroepen. Bestuurders kunnen feedback geven over of strategische rapportages voldoende inzicht geven in risico's en ontwikkelingen. IT- en security-teams kunnen feedback geven over of operationele rapportages voldoende detail bevatten voor effectief beheer. Burgers en andere externe stakeholders kunnen feedback geven over of publieke rapportages toegankelijk en begrijpelijk zijn.

Het evalueren van de effectiviteit van verantwoording vereist duidelijke doelen en success criteria. Wat hoopt de organisatie te bereiken door verantwoording: vertrouwen opbouwen bij burgers, bestuurders informeren voor besluitvorming, compliance aantonen aan toezichthouders, of een combinatie van deze doelen? Door deze doelen expliciet te maken en te monitoren of zij worden bereikt, kan worden bepaald of verantwoording effectief is. Daarnaast moeten organisaties regelmatig evalueren of de gekozen formaten, kanalen en inhoud nog geschikt zijn, of nieuwe metrics moeten worden toegevoegd, en of de methodologie moet worden verbeterd.

Door verantwoording te integreren in reguliere governance- en securityprocessen, wordt het een structureel onderdeel van organisatiebeheer in plaats van een eenmalige activiteit. Verantwoording moet worden gekoppeld aan besluitvormingsprocessen, zodat bestuurders regelmatig worden geïnformeerd over beveiligings- en governance-ontwikkelingen en kunnen ingrijpen wanneer nodig. Verantwoording moet worden gekoppeld aan verbeterprocessen, zodat inzichten uit verantwoording worden gebruikt om beveiligings- en governance-praktijken te verbeteren. Door verantwoording continu te ontwikkelen en te verbeteren, blijft het relevant en waardevol voor alle stakeholders.

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 Publieke Verantwoording voor Microsoft 365 Beveiliging en Governance. .DESCRIPTION Dit script ondersteunt publieke verantwoording voor Microsoft 365 beveiligings- en governance-praktijken. Het script verzamelt relevante metrics en rapportagegegevens die geschikt zijn voor verantwoording aan verschillende stakeholders, inclusief bestuurders, toezichthouders en het publiek. In DebugMode worden geen cloudverbindingen gemaakt en wordt voorbeelddata teruggegeven zodat het script lokaal getest kan worden zonder toegang tot een tenant. .NOTES Filename: public-accountability.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-27 Last Modified: 2025-01-27 Version: 1.0 Related JSON: content/m365/governance/public-accountability.json Category: governance Workload: m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\public-accountability.ps1 -DebugMode Voert een lokale testrun uit met voorbeelddata zonder verbinding met Microsoft 365. .EXAMPLE .\public-accountability.ps1 -Function Invoke-AccountabilityMetricsCollection Verzamelt relevante metrics uit Microsoft 365 voor publieke verantwoording. .EXAMPLE .\public-accountability.ps1 -Function Invoke-AccountabilityReporting Genereert gestructureerde rapportages voor verschillende doelgroepen. #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph, ExchangeOnlineManagement [CmdletBinding()] param( [Parameter(HelpMessage = "Voer een lokale debug-run uit met voorbeelddata, zonder cloudverbinding.")] [switch]$DebugMode, [Parameter(HelpMessage = "Specificeer welke functie moet worden uitgevoerd.")] [ValidateSet("Invoke-AccountabilityMetricsCollection", "Invoke-AccountabilityReporting")] [string]$Function = "Invoke-AccountabilityMetricsCollection", [Parameter(HelpMessage = "Specificeer voor welke doelgroep de rapportage moet worden gegenereerd.")] [ValidateSet("Strategic", "Operational", "Public")] [string]$ReportTarget = "Strategic" ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Publieke Verantwoording (M365 Governance)" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Connect-M365AccountabilityContext { <# .SYNOPSIS Maakt verbinding met Microsoft Graph en Security & Compliance Center voor verantwoording. .DESCRIPTION Gebruikt Connect-MgGraph en Connect-IPPSSession met benodigde scopes voor metrics verzameling. Deze functie maakt geen verbinding wanneer DebugMode is ingeschakeld. #> [CmdletBinding()] param() if ($DebugMode) { Write-Host "DebugMode: er wordt geen verbinding gemaakt met Microsoft 365." -ForegroundColor Yellow return } Write-Host "Verbinding maken met Microsoft Graph..." -ForegroundColor Gray Connect-MgGraph -Scopes "SecurityEvents.Read.All","Directory.Read.All","User.Read.All","Policy.Read.All","AuditLog.Read.All" -ErrorAction Stop | Out-Null Write-Host "Verbonden met Microsoft Graph" -ForegroundColor Green Write-Host "Verbinding maken met Security & Compliance Center..." -ForegroundColor Gray Connect-IPPSSession -ErrorAction Stop | Out-Null Write-Host "Verbonden met Security & Compliance Center" -ForegroundColor Green } function Get-SecureScoreForAccountability { <# .SYNOPSIS Haalt Secure Score metrics op voor verantwoording. .OUTPUTS PSCustomObject met Secure Score informatie geschikt voor verantwoording. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ CurrentScore = 725 MaxScore = 1000 Percentage = 72.5 ScoreCategory = "Goed" Trend = "Stabiel" TrendDescription = "Secure Score blijft stabiel op goed niveau" LastUpdated = (Get-Date).AddDays(-1) } } Write-Verbose "Ophalen van Secure Score metrics voor verantwoording..." try { $secureScore = Get-MgSecuritySecureScore -Top 1 -ErrorAction SilentlyContinue if ($secureScore) { $scoreValue = $secureScore.CurrentScore $maxScore = $secureScore.MaxScore $percentage = [Math]::Round(($scoreValue / $maxScore) * 100, 2) $scoreCategory = "Onvoldoende" if ($percentage -ge 80) { $scoreCategory = "Zeer goed" } elseif ($percentage -ge 65) { $scoreCategory = "Goed" } elseif ($percentage -ge 50) { $scoreCategory = "Voldoende" } return [PSCustomObject]@{ CurrentScore = $scoreValue MaxScore = $maxScore Percentage = $percentage ScoreCategory = $scoreCategory Trend = "Stabiel" TrendDescription = "Secure Score is $scoreCategory" LastUpdated = Get-Date } } } catch { Write-Host "Kon Secure Score niet ophalen: $_" -ForegroundColor Yellow } return [PSCustomObject]@{ CurrentScore = 0 MaxScore = 1000 Percentage = 0 ScoreCategory = "Onbekend" Trend = "Geen data" TrendDescription = "Geen Secure Score data beschikbaar" LastUpdated = Get-Date } } function Get-ComplianceStatusForAccountability { <# .SYNOPSIS Haalt compliance-status op voor verantwoording. .OUTPUTS PSCustomObject met compliance-status informatie geschikt voor verantwoording. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ BIOCompliance = 85 ISO27001Compliance = 78 NIS2Compliance = 82 AVGCompliance = 90 OverallCompliance = 84 ComplianceStatus = "Goed" LastAssessed = (Get-Date).AddDays(-7) KeyImprovements = @( "MFA-dekking uitgebreid naar 95%", "DLP-policies geïmplementeerd voor gevoelige informatie", "Audit logging volledig geconfigureerd" ) } } Write-Verbose "Ophalen van compliance-status voor verantwoording..." # In productie zou dit gegevens ophalen uit Compliance Manager of andere bronnen # Voor nu retourneren we een gestructureerd object return [PSCustomObject]@{ BIOCompliance = 0 ISO27001Compliance = 0 NIS2Compliance = 0 AVGCompliance = 0 OverallCompliance = 0 ComplianceStatus = "Onbekend" LastAssessed = Get-Date KeyImprovements = @() } } function Get-SecurityMetricsForAccountability { <# .SYNOPSIS Haalt algemene beveiligingsmetrics op voor verantwoording. .OUTPUTS PSCustomObject met beveiligingsmetrics geschikt voor verantwoording. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ MfaCoveragePercentage = 95.0 ConditionalAccessPolicies = 12 DlpPolicies = 8 DataRetentionPolicies = 15 IncidentCountLastQuarter = 3 IncidentSeverity = @("Low", "Medium") LastQuarterTrend = "Verbetering" SecurityInvestments = [PSCustomObject]@{ LastYear = 250000 ThisYear = 280000 Trend = "Toename" } } } Write-Verbose "Ophalen van beveiligingsmetrics voor verantwoording..." try { $users = Get-MgUser -All -Property Id,UserPrincipalName,StrongAuthenticationMethods -ErrorAction SilentlyContinue $totalUsers = ($users | Measure-Object).Count $usersWithMfa = ($users | Where-Object { $_.StrongAuthenticationMethods -and $_.StrongAuthenticationMethods.Count -gt 0 } | Measure-Object).Count $mfaCoverage = if ($totalUsers -gt 0) { [Math]::Round(($usersWithMfa / $totalUsers) * 100, 2) } else { 0 } $caPolicies = Get-MgIdentityConditionalAccessPolicy -All -ErrorAction SilentlyContinue $activePolicies = ($caPolicies | Where-Object { $_.State -eq "enabled" } | Measure-Object).Count $dlpPolicies = Get-DlpCompliancePolicy -ErrorAction SilentlyContinue $activeDlpPolicies = ($dlpPolicies | Where-Object { $_.Mode -eq "Enforce" -or $_.Mode -eq "TestWithNotifications" } | Measure-Object).Count return [PSCustomObject]@{ MfaCoveragePercentage = $mfaCoverage ConditionalAccessPolicies = $activePolicies DlpPolicies = $activeDlpPolicies DataRetentionPolicies = 0 IncidentCountLastQuarter = 0 IncidentSeverity = @() LastQuarterTrend = "Geen data" SecurityInvestments = [PSCustomObject]@{ LastYear = 0 ThisYear = 0 Trend = "Geen data" } } } catch { Write-Host "Kon beveiligingsmetrics niet ophalen: $_" -ForegroundColor Yellow } return [PSCustomObject]@{ MfaCoveragePercentage = 0 ConditionalAccessPolicies = 0 DlpPolicies = 0 DataRetentionPolicies = 0 IncidentCountLastQuarter = 0 IncidentSeverity = @() LastQuarterTrend = "Geen data" SecurityInvestments = [PSCustomObject]@{ LastYear = 0 ThisYear = 0 Trend = "Geen data" } } } function Invoke-AccountabilityMetricsCollection { <# .SYNOPSIS Verzamelt relevante metrics uit Microsoft 365 voor publieke verantwoording. .DESCRIPTION Verzamelt een breed scala aan metrics uit Microsoft 365 die relevant zijn voor verantwoording aan verschillende stakeholders, inclusief Secure Score, compliance-status en beveiligingsmetrics. .OUTPUTS PSCustomObject met verzamelde metrics geschikt voor verantwoording. #> [CmdletBinding()] param() Connect-M365AccountabilityContext Write-Host "`nVerzamelen van metrics voor publieke verantwoording..." -ForegroundColor Yellow Write-Host "========================================================" -ForegroundColor Yellow $secureScore = Get-SecureScoreForAccountability $complianceStatus = Get-ComplianceStatusForAccountability $securityMetrics = Get-SecurityMetricsForAccountability $summaryFindings = @() if ($secureScore.Percentage -lt 65) { $summaryFindings += "Secure Score ($($secureScore.Percentage)%) ligt onder de aanbevolen waarde. Aanbevolen wordt om beveiligingsmaatregelen te prioriteren." } if ($securityMetrics.MfaCoveragePercentage -lt 90) { $summaryFindings += "MFA-dekking ($($securityMetrics.MfaCoveragePercentage)%) ligt onder de aanbevolen 90%. Uitbreiding van MFA-implementatie wordt aanbevolen." } if ($complianceStatus.OverallCompliance -lt 80) { $summaryFindings += "Overall compliance-status ($($complianceStatus.OverallCompliance)%) kan worden verbeterd. Focus op implementatie van ontbrekende maatregelen." } $metrics = [PSCustomObject]@{ ScriptName = "public-accountability.ps1" Function = "Invoke-AccountabilityMetricsCollection" GeneratedAt = Get-Date DebugMode = [bool]$DebugMode SecureScore = $secureScore ComplianceStatus = $complianceStatus SecurityMetrics = $securityMetrics SummaryFindings = $summaryFindings Summary = "Metrics verzameld: Secure Score $($secureScore.Percentage)%, Compliance $($complianceStatus.OverallCompliance)%, MFA-dekking $($securityMetrics.MfaCoveragePercentage)%." } Write-Host "`nMetrics verzameld:" -ForegroundColor Green Write-Host " Secure Score: $($secureScore.Percentage)% ($($secureScore.ScoreCategory))" -ForegroundColor Cyan Write-Host " Compliance: $($complianceStatus.OverallCompliance)%" -ForegroundColor Cyan Write-Host " MFA-dekking: $($securityMetrics.MfaCoveragePercentage)%" -ForegroundColor Cyan Write-Host " Conditional Access policies: $($securityMetrics.ConditionalAccessPolicies)" -ForegroundColor Cyan Write-Host " DLP-policies: $($securityMetrics.DlpPolicies)" -ForegroundColor Cyan if ($summaryFindings.Count -gt 0) { Write-Host "`nAandachtspunten:" -ForegroundColor Yellow foreach ($finding in $summaryFindings) { Write-Host " - $finding" -ForegroundColor Yellow } } return $metrics } function Invoke-AccountabilityReporting { <# .SYNOPSIS Genereert gestructureerde rapportages voor verschillende doelgroepen. .DESCRIPTION Genereert rapportages op basis van verzamelde metrics, aangepast aan de specifieke behoeften van de doelgroep (Strategic, Operational of Public). .OUTPUTS PSCustomObject met gegenereerde rapportage. #> [CmdletBinding()] param() Connect-M365AccountabilityContext Write-Host "`nGenereren van verantwoordingsrapportage..." -ForegroundColor Yellow Write-Host "Doelgroep: $ReportTarget" -ForegroundColor Yellow Write-Host "========================================================" -ForegroundColor Yellow $metrics = Invoke-AccountabilityMetricsCollection $report = switch ($ReportTarget) { "Strategic" { [PSCustomObject]@{ ReportType = "Strategic" ReportTitle = "Strategische Verantwoording Microsoft 365 Beveiliging" ReportDate = Get-Date Audience = "Bestuurders en toezichthouders" ExecutiveSummary = "Microsoft 365 beveiligingspostuur: Secure Score $($metrics.SecureScore.Percentage)%, Overall compliance $($metrics.ComplianceStatus.OverallCompliance)%. Beveiligingsmaatregelen zijn geïmplementeerd en worden actief beheerd." KeyMetrics = [PSCustomObject]@{ SecureScore = $metrics.SecureScore.Percentage ComplianceStatus = $metrics.ComplianceStatus.OverallCompliance MfaCoverage = $metrics.SecurityMetrics.MfaCoveragePercentage SecurityInvestments = $metrics.SecurityMetrics.SecurityInvestments } Recommendations = $metrics.SummaryFindings NextReview = (Get-Date).AddMonths(3) } } "Operational" { [PSCustomObject]@{ ReportType = "Operational" ReportTitle = "Operationele Verantwoording Microsoft 365 Beveiliging" ReportDate = Get-Date Audience = "IT- en security-teams" ExecutiveSummary = "Gedetailleerde metrics voor operationeel beheer van Microsoft 365 beveiliging en governance." DetailedMetrics = $metrics ActionItems = $metrics.SummaryFindings NextReview = (Get-Date).AddMonths(1) } } "Public" { [PSCustomObject]@{ ReportType = "Public" ReportTitle = "Publieke Verantwoording Microsoft 365 Beveiliging" ReportDate = Get-Date Audience = "Burgers en stakeholders" ExecutiveSummary = "Onze organisatie zet zich in voor de beveiliging van digitale diensten en persoonsgegevens. We monitoren continu onze beveiligingspostuur en werken aan continue verbetering." PublicMetrics = [PSCustomObject]@{ SecureScoreCategory = $metrics.SecureScore.ScoreCategory ComplianceStatus = $metrics.ComplianceStatus.ComplianceStatus MfaCoverage = $metrics.SecurityMetrics.MfaCoveragePercentage SecurityInvestments = $metrics.SecurityMetrics.SecurityInvestments } KeyInitiatives = @( "Continue monitoring van beveiligingspostuur", "Implementatie van best practices voor databescherming", "Regelmatige beoordeling en verbetering van beveiligingsmaatregelen" ) } } } Write-Host "`nRapportage gegenereerd:" -ForegroundColor Green Write-Host " Type: $($report.ReportType)" -ForegroundColor Cyan Write-Host " Doelgroep: $($report.Audience)" -ForegroundColor Cyan Write-Host " Datum: $($report.ReportDate.ToString('yyyy-MM-dd'))" -ForegroundColor Cyan return [PSCustomObject]@{ ScriptName = "public-accountability.ps1" Function = "Invoke-AccountabilityReporting" GeneratedAt = Get-Date DebugMode = [bool]$DebugMode ReportTarget = $ReportTarget Report = $report SourceMetrics = $metrics } } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { $result = switch ($Function) { "Invoke-AccountabilityMetricsCollection" { Invoke-AccountabilityMetricsCollection } "Invoke-AccountabilityReporting" { Invoke-AccountabilityReporting } default { Invoke-AccountabilityMetricsCollection } } Write-Host "`n========================================" -ForegroundColor Cyan # Optioneel: exporteer naar JSON $exportPath = ".\accountability-report-$(Get-Date -Format 'yyyyMMdd-HHmmss').json" $result | ConvertTo-Json -Depth 10 | Out-File -FilePath $exportPath -Encoding UTF8 Write-Host "`nRapportage geëxporteerd naar: $exportPath" -ForegroundColor Green $result | Format-List return $result exit 0 } catch { Write-Error "Fout tijdens uitvoering van $Function : $_" exit 1 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # Exitcodes: # 0 = Script succesvol uitgevoerd # 1 = Fout tijdens uitvoering

Risico zonder implementatie

Risico zonder implementatie
High: Zonder adequate publieke verantwoording kunnen overheidsorganisaties niet voldoen aan wettelijke verplichtingen zoals de Wet open overheid, de BIO en de NIS2-richtlijn. Dit leidt tot risico's op boetes, reputatieschade, en het verlies van vertrouwen van burgers en stakeholders. Bovendien kunnen organisaties zonder adequate verantwoording geen aantoonbaar compliance demonstreren aan toezichthouders en bestuurders.

Management Samenvatting

Implementeer een gestructureerd verantwoordingsraamwerk voor Microsoft 365 beveiliging en governance. Definieer verschillende vormen van verantwoording voor verschillende doelgroepen, verzamel objectieve metrics via het bijbehorende PowerShell-script, en presenteer informatie in geschikte formaten via geschikte kanalen. Vind een balans tussen transparantie en beveiligingsbelangen door proactief transparant te zijn over algemene beleidskaders en belangrijke ontwikkelingen, terwijl specifieke technische details beschermd blijven.