Compliance Voor Kritieke Infrastructuur In Microsoft 365

💼 Management Samenvatting

Nederlandse organisaties die onderdeel uitmaken van de kritieke infrastructuur – zoals energiebedrijven, drinkwaterbedrijven, verkeers- en vervoersorganisaties, zorginstellingen en financiële instellingen – hebben te maken met specifieke wettelijke verplichtingen op het gebied van cybersecurity en incident reporting. De Network and Information Systems Directive 2 (NIS2) en de Wet beveiliging netwerk- en informatiesystemen (Wbni) stellen strenge eisen aan de beveiliging van digitale systemen, waaronder Microsoft 365-omgevingen. Een gestructureerde aanpak voor critical infrastructure compliance in Microsoft 365 vertaalt deze juridische verplichtingen naar concrete governance, technische maatregelen en processen die aantoonbaar werken binnen de Microsoft 365-omgeving en voldoen aan de eisen van toezichthouders zoals de Autoriteit Consument en Markt (ACM), de Autoriteit Financiële Markten (AFM) en het Nationaal Cyber Security Centrum (NCSC).

Aanbeveling
IMPLEMENT
Risico zonder
Critical
Risk Score
10/10
Implementatie
350u (tech: 150u)
Van toepassing op:
M365
Kritieke Infrastructuur
Vitale Sectoren
NIS2
Wbni
Overheidsorganisaties
Energie
Drinkwater
Verkeer en Vervoer
Zorg
Banken

Zonder een gestructureerde aanpak voor critical infrastructure compliance in Microsoft 365 lopen organisaties in vitale sectoren aanzienlijke risico's. Juridisch gezien kunnen zij niet overtuigend aantonen dat zij voldoen aan de verplichtingen uit NIS2 en de Wbni, wat kan leiden tot boetes, dwangsommen en reputatieschade. Organisatorisch ontstaat onduidelijkheid over wie verantwoordelijk is voor welke aspecten van cyberweerbaarheid, incident reporting en continuïteit in Microsoft 365, waardoor belangrijke stappen zoals risicoanalyses, incident response procedures of meldingen aan toezichthouders worden vergeten of te laat worden opgepakt. Technisch gezien worden security-by-design principes niet systematisch toegepast, waardoor Microsoft 365-omgevingen kwetsbaar blijven voor cyberaanvallen die de continuïteit van kritieke diensten kunnen verstoren. Bovendien maakt de snelle ontwikkeling van Microsoft 365, met nieuwe functionaliteit zoals Copilot, AI-analyse en geavanceerde samenwerkingsfeatures, het noodzakelijk om continu te beoordelen of bestaande beveiligingsmaatregelen nog toereikend zijn voor de specifieke risico's die vitale organisaties lopen. Een specifieke compliance-aanpak voor kritieke infrastructuur voorkomt deze risico's door expliciet te beschrijven hoe NIS2- en Wbni-eisen worden toegepast binnen de context van Exchange Online, SharePoint, Teams, OneDrive en andere workloads, en hoe incidenten worden gedetecteerd, gemeld en afgehandeld.

PowerShell Modules Vereist
Primary API: Microsoft Purview (Security & Compliance PowerShell), Microsoft Graph API, Microsoft Sentinel
Connection: Connect-IPPSSession, Connect-MgGraph, Connect-AzAccount
Required Modules: ExchangeOnlineManagement, Microsoft.Graph, Az.Accounts

Implementatie

Dit artikel beschrijft een praktische aanpak voor critical infrastructure compliance die specifiek is toegesneden op Microsoft 365 binnen Nederlandse organisaties in vitale sectoren. De aanpak bestaat uit vier samenhangende pijlers: governance en verantwoordelijkheden, risicomanagement en beveiligingsmaatregelen, incident detection en response, en rapportage en toezicht. De governance-pijler beschrijft hoe CISO, security officers, Microsoft 365-beheerders en proceseigenaren samenwerken om NIS2- en Wbni-naleving te borgen, inclusief de rol van bestuur en directie in het goedkeuren van risicoacceptatie en het faciliteren van incident response. De risicomanagement-pijler omvat concrete stappen voor het identificeren en beoordelen van cybersecurity-risico's in Microsoft 365, het implementeren van passende technische en organisatorische maatregelen, en het periodiek evalueren van de effectiviteit van deze maatregelen. De incident detection en response-pijler vertaalt deze processen naar concrete configuraties in Microsoft 365, zoals geavanceerde threat detection via Microsoft Defender, uitgebreide logging via Unified Audit Log en Microsoft Sentinel, geautomatiseerde incident response playbooks, en procedures voor het melden van significante incidenten aan toezichthouders. Het bijbehorende PowerShell-script ondersteunt organisaties bij het monitoren van de aanwezigheid en effectiviteit van kernonderdelen van de compliance-aanpak, zodat naleving niet afhankelijk blijft van losse initiatieven maar structureel wordt geborgd.

Governance, rollen en verantwoordelijkheden voor critical infrastructure compliance

Effectieve compliance voor kritieke infrastructuur in Microsoft 365 begint bij duidelijke governance. Binnen Nederlandse organisaties in vitale sectoren zijn meerdere rollen betrokken bij cybersecurity en incident management, elk met specifieke verantwoordelijkheden die expliciet moeten worden vastgelegd in relatie tot Microsoft 365. De CISO heeft een centrale rol: zij is verantwoordelijk voor het ontwikkelen en implementeren van het cybersecuritybeleid voor Microsoft 365, het monitoren van de effectiviteit van beveiligingsmaatregelen, het coördineren van incident response, en het rapporteren aan bestuur en toezichthouders over de stand van zaken rond cyberweerbaarheid. De Microsoft 365 platform owner beheert de technische configuratie van de omgeving en zorgt ervoor dat security-by-design principes worden toegepast in toegangsbeheer, encryptie, logging, threat detection en data loss prevention. De security operations center (SOC) manager is verantwoordelijk voor het dagelijks monitoren van security events in Microsoft 365, het analyseren van dreigingen, het uitvoeren van incident response procedures en het documenteren van security incidents voor rapportage aan toezichthouders. Proceseigenaren zijn eindverantwoordelijk voor de beveiliging en continuïteit van kritieke processen die afhankelijk zijn van Microsoft 365, ook wanneer de onderliggende technologie door de IT-organisatie wordt beheerd. Zij moeten begrijpen welke risico's hun processen lopen, welke beveiligingsmaatregelen zijn getroffen, en hoe te handelen bij security incidents die de continuïteit kunnen verstoren.

Het governance-model beschrijft hoe deze rollen samenwerken in concrete scenario's. Wanneer bijvoorbeeld een significant security incident wordt gedetecteerd in Microsoft 365, wordt een gestandaardiseerd proces gevolgd: de SOC detecteert en analyseert het incident, de CISO wordt geïnformeerd en beoordeelt of het incident significant is volgens NIS2-criteria, de Microsoft 365 platform owner ondersteunt bij het isoleren van getroffen systemen en het herstellen van diensten, en gezamenlijk wordt bepaald of en wanneer het incident moet worden gemeld aan toezichthouders zoals de ACM, AFM of het NCSC. Dit proces wordt niet ad-hoc uitgevoerd, maar is vastgelegd in een formeel goedgekeurd incident response plan dat onderdeel uitmaakt van het bredere cybersecurity- en business continuity framework van de organisatie. Het governance-model beschrijft ook hoe periodiek wordt geëvalueerd of de rollen en processen nog effectief zijn, bijvoorbeeld door middel van kwartaalrapportages over security metrics, openstaande risico's, uitgevoerde incident response oefeningen en uitkomsten van security audits. Bestuur en directie hebben een cruciale rol in het goedkeuren van risicoacceptatie, het faciliteren van benodigde middelen voor cybersecurity, en het waarborgen dat de organisatie voldoet aan haar verplichtingen richting toezichthouders en maatschappij.

Een belangrijk aspect van governance is de relatie met Microsoft als leverancier van kritieke clouddiensten. Nederlandse organisaties die Microsoft 365 gebruiken voor kritieke processen, zijn afhankelijk van de beschikbaarheid, beveiliging en compliance van Microsoft's infrastructuur. Het compliance framework beschrijft hoe de service level agreements met Microsoft worden beheerd, welke garanties Microsoft biedt rond beschikbaarheid en beveiliging, hoe wordt gemonitord dat Microsoft voldoet aan deze afspraken, en welke fallback-scenario's beschikbaar zijn wanneer Microsoft-diensten uitvallen of worden gecompromitteerd. Daarnaast wordt vastgelegd hoe de organisatie omgaat met datastromen tussen Microsoft 365 en andere kritieke systemen, zowel intern als met externe partners, en welke aanvullende waarborgen worden getroffen wanneer gegevens worden gedeeld of geëxporteerd. Door deze governance expliciet te maken en te koppelen aan bestaande overlegstructuren zoals het cybersecurity board, het incident response team of het business continuity forum, ontstaat een voorspelbaar en controleerbaar proces waarin critical infrastructure compliance niet afhankelijk is van individuele medewerkers maar structureel is verankerd in de organisatie.

Risicomanagement en beveiligingsmaatregelen in Microsoft 365

Het hart van critical infrastructure compliance in Microsoft 365 bestaat uit een gestructureerd risicomanagementproces en de implementatie van passende technische en organisatorische beveiligingsmaatregelen. NIS2 en de Wbni vereisen dat organisaties in vitale sectoren risico's identificeren, beoordelen en mitigeren die de beschikbaarheid, integriteit en vertrouwelijkheid van kritieke diensten kunnen beïnvloeden. Voor Microsoft 365 betekent dit dat organisaties expliciet moeten vastleggen welke workloads en processen kritiek zijn voor de continuïteit van dienstverlening, welke bedreigingen deze workloads kunnen treffen, welke kwetsbaarheden aanwezig zijn, en welke maatregelen zijn getroffen om deze risico's te beperken tot een acceptabel niveau. Dit proces wordt niet eenmalig uitgevoerd, maar vormt een doorlopende cyclus waarin nieuwe risico's worden geïdentificeerd wanneer nieuwe Microsoft 365-functionaliteit wordt geïntroduceerd, wanneer dreigingslandschappen veranderen, of wanneer security incidents nieuwe kwetsbaarheden aan het licht brengen.

De technische beveiligingsmaatregelen in Microsoft 365 moeten aansluiten bij de geïdentificeerde risico's en voldoen aan de eisen uit NIS2 en de Wbni. Dit begint bij een doordachte identity- en toegangsbeheerarchitectuur via Entra ID (voorheen Azure AD), inclusief multi-factor authenticatie voor alle gebruikers, conditional access policies die toegang beperken op basis van device compliance, locatie en risicoprofiel, privileged identity management voor beheerdersrollen, en regelmatige access reviews om te borgen dat gebruikers alleen toegang hebben tot wat zij nodig hebben. Daarnaast zijn uitgebreide logging en monitoring cruciaal voor het detecteren van security incidents: Microsoft 365 Unified Audit Log registreert alle acties in de omgeving, Microsoft Sentinel verzamelt en analyseert security events uit verschillende bronnen, en Microsoft Defender voor Office 365 detecteert en blokkeert geavanceerde dreigingen zoals phishing, malware en ransomware. Data Loss Prevention (DLP) regels voorkomen dat gevoelige informatie onbedoeld wordt gedeeld of geëxporteerd, sensitivity labels classificeren informatie op basis van vertrouwelijkheid, en retention policies zorgen ervoor dat data niet langer wordt bewaard dan noodzakelijk, wat zowel privacy- als security-risico's beperkt.

Naast technische maatregelen zijn organisatorische maatregelen essentieel voor critical infrastructure compliance. Dit omvat security awareness training voor alle medewerkers die Microsoft 365 gebruiken, zodat zij dreigingen zoals phishing kunnen herkennen en weten hoe te handelen bij vermoedens van security incidents. Het omvat ook regelmatige security assessments en penetration tests van Microsoft 365-configuraties, zodat kwetsbaarheden proactief worden geïdentificeerd voordat aanvallers deze kunnen misbruiken. Daarnaast zijn business continuity en disaster recovery plannen cruciaal: organisaties moeten kunnen aantonen dat zij kritieke Microsoft 365-diensten kunnen herstellen binnen acceptabele termijnen wanneer deze worden getroffen door cyberaanvallen, technische storingen of andere incidenten. Het compliance framework beschrijft welke technische en organisatorische maatregelen minimaal moeten zijn geïmplementeerd, hoe deze worden getest en gemonitord, en hoe wordt geborgd dat maatregelen actueel blijven wanneer Microsoft 365-functionaliteit of dreigingslandschappen veranderen. Door risicomanagement en beveiligingsmaatregelen expliciet te koppelen aan de eisen uit NIS2 en de Wbni, kunnen organisaties overtuigend aantonen dat zij voldoen aan hun verplichtingen richting toezichthouders en maatschappij.

Incident detection, response en meldplicht in Microsoft 365

Een cruciaal onderdeel van critical infrastructure compliance in Microsoft 365 is het vermogen om security incidents tijdig te detecteren, adequaat te reageren, en – wanneer nodig – te melden aan toezichthouders. NIS2 en de Wbni vereisen dat organisaties in vitale sectoren significante security incidents melden aan bevoegde autoriteiten, zoals de ACM, AFM of het NCSC, binnen 24 uur na detectie. Voor Microsoft 365 betekent dit dat organisaties geavanceerde detection capabilities moeten hebben die security events kunnen identificeren, analyseren en classificeren op basis van hun impact op de beschikbaarheid, integriteit of vertrouwelijkheid van kritieke diensten. Microsoft 365 biedt hiervoor uitgebreide tools: Microsoft Defender voor Office 365 detecteert geavanceerde dreigingen in e-mail en samenwerkingsomgevingen, Microsoft Defender voor Endpoint monitort endpoints op verdachte activiteiten, Microsoft Sentinel verzamelt en correleert security events uit verschillende bronnen, en Unified Audit Log biedt een complete audit trail van alle acties in de omgeving.

Het incident response proces beschrijft concrete stappen voor het afhandelen van security incidents in Microsoft 365. Wanneer een incident wordt gedetecteerd, wordt eerst de omvang en impact beoordeeld: welke systemen zijn getroffen, welke data is gecompromitteerd, welke diensten zijn verstoord, en wat is de potentiële impact op de continuïteit van kritieke processen? Vervolgens worden containment-maatregelen genomen om te voorkomen dat het incident zich verder verspreidt: getroffen accounts worden geblokkeerd, toegangsrechten worden ingetrokken, gecompromitteerde systemen worden geïsoleerd, en – indien nodig – Microsoft 365-diensten worden tijdelijk uitgeschakeld om verdere schade te voorkomen. Daarna volgt de eradication-fase: malware wordt verwijderd, kwetsbaarheden worden gepatcht, gecompromitteerde accounts worden hersteld of vervangen, en systemen worden gereinigd en opnieuw geconfigureerd. Tot slot wordt in de recovery-fase de normale werking hersteld, worden getroffen systemen gemonitord op hernieuwde activiteit, en worden lessen getrokken voor toekomstige preventie. Dit hele proces wordt gedocumenteerd voor interne analyse, rapportage aan toezichthouders, en verbetering van incident response procedures.

Een belangrijk aspect van incident response is de meldplicht aan toezichthouders. NIS2 vereist dat significante incidents worden gemeld binnen 24 uur na detectie, en dat een gedetailleerd incident rapport wordt ingediend binnen 72 uur. Het compliance framework beschrijft welke criteria bepalen of een incident significant is – bijvoorbeeld wanneer het de beschikbaarheid van kritieke diensten verstoort, wanneer persoonsgegevens of bedrijfsgeheimen zijn gecompromitteerd, of wanneer de integriteit van kritieke systemen is aangetast – en wie binnen de organisatie verantwoordelijk is voor het beoordelen van de significantie en het indienen van meldingen. Het framework beschrijft ook welke informatie minimaal moet worden opgenomen in incident meldingen, zoals de aard van het incident, de getroffen systemen en diensten, de geschatte impact, de genomen containment-maatregelen, en de verwachte hersteltijd. Door deze processen expliciet te maken en te oefenen via tabletop exercises en incident response drills, kunnen organisaties snel en correct reageren op security incidents, wat essentieel is voor het beperken van schade, het voldoen aan meldplichten, en het behouden van vertrouwen van klanten, partners en toezichthouders.

Monitoring, rapportage en continue verbetering van critical infrastructure compliance

Gebruik PowerShell-script critical-infrastructure-compliance.ps1 (functie Invoke-CriticalInfrastructureComplianceAssessment) – Voert een gestructureerde controle uit op de aanwezigheid en effectiviteit van kernonderdelen van de critical infrastructure compliance-aanpak voor Microsoft 365, zoals beveiligingsmaatregelen, incident response procedures en logging-configuraties..

Critical infrastructure compliance rond Microsoft 365 is geen statische eindtoestand, maar een doorlopend proces dat continu moet worden aangepast aan nieuwe dreigingen, wijzigingen in wetgeving, updates van Microsoft 365 en veranderingen in de organisatie. Daarom bevat de compliance-aanpak een expliciete cyclus voor monitoring en continue verbetering. Vanuit technisch perspectief betekent dit dat periodiek wordt gecontroleerd of de kritieke beveiligingsmaatregelen nog aanwezig en actief zijn. Denk aan het bestaan en de configuratie van conditional access policies, multi-factor authenticatie, Microsoft Defender configuraties, DLP-regels, sensitivity labels, retention policies, en uitgebreide audit logging. Zonder deze periodieke controles kunnen aanpassingen, incidenten of foutieve beheersacties ertoe leiden dat essentiële beveiligingsmaatregelen ongemerkt worden uitgeschakeld of gewijzigd, waardoor de organisatie kwetsbaar wordt voor cyberaanvallen die de continuïteit van kritieke diensten kunnen verstoren. Het gekoppelde PowerShell-script ondersteunt deze technische monitoring door via Security & Compliance PowerShell en Microsoft Graph API te verifiëren of de kernconfiguraties aanwezig zijn en door de resultaten terug te geven in een gestandaardiseerd object met een duidelijke compliance-status.

Naast technische monitoring is bestuurlijke en procesmatige monitoring cruciaal. De compliance-aanpak moet voorzien in periodieke rapportages aan CISO, bestuur en toezichthouders over de status van de belangrijkste cybersecurity-controls, openstaande risico's, uitgevoerde incident response oefeningen, gemelde security incidents, en geplande verbetermaatregelen. Dit kan worden gerealiseerd door de uitkomsten van de PowerShell-scripts te integreren met dashboards in Power BI of bestaande GRC-tools. Daarmee ontstaat een actueel beeld van de NIS2- en Wbni-nalevingsstatus per Microsoft 365-workload, per risicocategorie en per control. Door trends over meerdere kwartalen te analyseren kunnen organisaties zien of maatregelen daadwerkelijk effect hebben, waar structurele issues terugkeren en welke onderdelen extra ondersteuning nodig hebben. Monitoring wordt zo een stuurinstrument voor continue verbetering in plaats van een eenmalige controle voorafgaand aan een audit. Daarnaast worden minimaal jaarlijks interne security audits uitgevoerd, waarbij wordt beoordeeld of de compliance-aanpak nog aansluit bij de praktijk, of nieuwe risico's zijn ontstaan en of aanvullende maatregelen nodig zijn. De uitkomsten van deze audits worden vastgelegd in verbeterplannen met eigenaars, deadlines en prioriteiten.

Belangrijk is dat de monitoringcyclus niet alleen focust op het bestaan van documenten en configuraties, maar ook op hun bruikbaarheid en effectiviteit. Een incident response plan dat jarenlang niet is herzien, een risicoanalyse waarin nieuwe Microsoft 365-risico's ontbreken, of conditional access policies die niet worden getriggerd omdat zij te strikt of te los zijn ingesteld, bieden weinig bescherming. De compliance-aanpak adviseert daarom om vaste momentums in te bouwen, bijvoorbeeld gekoppeld aan de planning- en controlcyclus, waarin expliciet wordt beoordeeld of beleid, risicoanalyses, incident response procedures en technische maatregelensets nog aansluiten bij de praktijk. Resultaten worden gedeeld met bestuur en directie, zodat zij weloverwogen keuzes kunnen maken over risicoacceptatie, prioritering van verbeteracties en benodigde middelen. Door monitoring, rapportage en besluitvorming te verbinden ontstaat een lerende organisatie die stap voor stap toewerkt naar aantoonbare critical infrastructure compliance in Microsoft 365, conform de ambitie van de "Nederlandse Baseline voor Veilige Cloud" en de eisen uit NIS2 en de Wbni.

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 Critical Infrastructure Compliance voor Microsoft 365 .DESCRIPTION Controleert of de kerncomponenten van de critical infrastructure compliance-aanpak voor Microsoft 365 aanwezig zijn en ondersteunt beheerders bij gerichte remediatie. Controleert onder andere of er conditional access policies, multi-factor authenticatie, Microsoft Defender configuraties, DLP-regels en adequate audit logging zijn geconfigureerd in Microsoft 365 conform NIS2 en Wbni eisen. .NOTES Filename: critical-infrastructure-compliance.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-27 Version: 1.0 Related JSON: content/m365/compliance/critical-infrastructure-compliance.json Category: compliance Workload: m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\critical-infrastructure-compliance.ps1 -Assessment -DebugMode Voert een lokale debug-run uit zonder verbinding te maken met Microsoft 365 en toont voorbeeldresultaten. .EXAMPLE .\critical-infrastructure-compliance.ps1 -Assessment Controleert in de live tenant of kerncomponenten van de critical infrastructure compliance-aanpak aanwezig zijn. .EXAMPLE .\critical-infrastructure-compliance.ps1 -Report -OutputPath .\critical-infrastructure-rapport.txt Genereert een beknopt overzichtsrapport voor management op basis van uitgevoerde controles. #> #Requires -Version 5.1 #Requires -Modules ExchangeOnlineManagement, Microsoft.Graph [CmdletBinding()] param( [Parameter(HelpMessage = "Voer controles uit op aanwezigheid van kernstukken van de critical infrastructure compliance-aanpak")] [switch]$Assessment, [Parameter(HelpMessage = "Genereer een samenvattend rapport op basis van de controle-uitkomsten")] [switch]$Report, [Parameter(HelpMessage = "Pad naar het rapportbestand dat moet worden aangemaakt (alleen bij -Report)")] [string]$OutputPath, [Parameter(HelpMessage = "Voer een veilige lokale test uit met voorbeelddata, zonder verbinding met Microsoft 365")] [switch]$DebugMode ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Critical Infrastructure Compliance" -ForegroundColor Cyan Write-Host "Microsoft 365 - NIS2/Wbni" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Connect-ComplianceServices { <# .SYNOPSIS Maakt verbinding met het Microsoft 365 Security & Compliance endpoint en Microsoft Graph. .DESCRIPTION Gebruikt Connect-IPPSSession uit de ExchangeOnlineManagement-module en Connect-MgGraph uit de Microsoft.Graph-module. #> [CmdletBinding()] param() Write-Host "Verbinding maken met Microsoft Purview (Security & Compliance)..." -ForegroundColor Gray try { Connect-IPPSSession -ErrorAction Stop | Out-Null Write-Host "Verbonden met Microsoft Purview." -ForegroundColor Green } catch { Write-Host "Fout bij verbinden met Microsoft Purview: $_" -ForegroundColor Red throw } Write-Host "Verbinding maken met Microsoft Graph..." -ForegroundColor Gray try { $requiredScopes = @( "Policy.Read.All", "SecurityEvents.Read.All", "Directory.Read.All" ) Connect-MgGraph -Scopes $requiredScopes -ErrorAction Stop | Out-Null Write-Host "Verbonden met Microsoft Graph." -ForegroundColor Green } catch { Write-Host "Fout bij verbinden met Microsoft Graph: $_" -ForegroundColor Red throw } } function Invoke-CriticalInfrastructureComplianceAssessment { <# .SYNOPSIS Voert een gestructureerde controle uit op kernonderdelen van de critical infrastructure compliance-aanpak. .DESCRIPTION Controleert of conditional access policies, multi-factor authenticatie, Microsoft Defender configuraties, DLP-regels en audit logging zijn geconfigureerd in Microsoft 365 conform NIS2 en Wbni eisen. In DebugMode worden geen externe verbindingen gemaakt en wordt met voorbeelddata gewerkt zodat lokaal testen mogelijk is. .OUTPUTS PSCustomObject met: - IsCompliant : Boolean - Timestamp : Datum/tijd van de meting - HasConditionalAccess : Boolean - HasMfaEnabled : Boolean - HasDefenderConfigured : Boolean - HasDlpPolicies : Boolean - HasAuditLogging : Boolean - HasIncidentResponsePlan : Boolean - Findings : Lijst met geconstateerde issues of aandachtspunten #> [CmdletBinding()] param() $result = [PSCustomObject]@{ ScriptName = "critical-infrastructure-compliance.ps1" IsCompliant = $false Timestamp = Get-Date HasConditionalAccess = $false HasMfaEnabled = $false HasDefenderConfigured = $false HasDlpPolicies = $false HasAuditLogging = $false HasIncidentResponsePlan = $false Findings = @() } try { if ($DebugMode) { Write-Host "DebugMode ingeschakeld: er wordt geen verbinding gemaakt met Microsoft 365." -ForegroundColor Yellow Write-Host "Er worden voorbeeldwaarden gebruikt om de rapportage te testen.`n" -ForegroundColor Yellow # Voorbeeldscenario: meeste controls aanwezig, maar incident response plan kan beter $result.HasConditionalAccess = $true $result.HasMfaEnabled = $true $result.HasDefenderConfigured = $true $result.HasDlpPolicies = $true $result.HasAuditLogging = $true $result.HasIncidentResponsePlan = $false $result.Findings += "DebugMode: voorbeelddata – verifieer in productie of een actueel incident response plan beschikbaar is en regelmatig wordt getest." } else { Connect-ComplianceServices Write-Host "Controleren van conditional access policies..." -ForegroundColor Gray try { $caPolicies = Get-MgIdentityConditionalAccessPolicy -ErrorAction SilentlyContinue $result.HasConditionalAccess = ($caPolicies -ne $null -and $caPolicies.Count -gt 0) } catch { $result.HasConditionalAccess = $false } if (-not $result.HasConditionalAccess) { $result.Findings += "Er zijn geen conditional access policies gevonden. Configureer CA policies voor risicogebaseerd toegangsbeheer conform NIS2 eisen." } Write-Host "Controleren van multi-factor authenticatie..." -ForegroundColor Gray try { $mfaPolicy = Get-MgPolicyIdentitySecurityDefaultEnforcementPolicy -ErrorAction SilentlyContinue $perUserMfa = Get-MgUser -All -Property StrongAuthenticationMethods -ErrorAction SilentlyContinue | Where-Object { $_.StrongAuthenticationMethods -ne $null -and $_.StrongAuthenticationMethods.Count -gt 0 } $result.HasMfaEnabled = ($mfaPolicy -ne $null -and $mfaPolicy.IsEnabled -eq $true) -or ($perUserMfa -ne $null -and $perUserMfa.Count -gt 0) } catch { $result.HasMfaEnabled = $false } if (-not $result.HasMfaEnabled) { $result.Findings += "Multi-factor authenticatie lijkt niet volledig te zijn ingeschakeld. MFA is verplicht voor alle gebruikers in kritieke infrastructuur conform NIS2." } Write-Host "Controleren van Microsoft Defender configuraties..." -ForegroundColor Gray try { $safeAttachments = Get-SafeAttachmentPolicy -ErrorAction SilentlyContinue $safeLinks = Get-SafeLinksPolicy -ErrorAction SilentlyContinue $result.HasDefenderConfigured = ( ($safeAttachments -ne $null -and $safeAttachments.Count -gt 0) -or ($safeLinks -ne $null -and $safeLinks.Count -gt 0) ) } catch { $result.HasDefenderConfigured = $false } if (-not $result.HasDefenderConfigured) { $result.Findings += "Microsoft Defender voor Office 365 configuraties ontbreken of zijn onvolledig. Configureer Safe Attachments en Safe Links voor geavanceerde threat protection." } Write-Host "Controleren van DLP-regels..." -ForegroundColor Gray $dlpPolicies = Get-DlpCompliancePolicy -ErrorAction SilentlyContinue $result.HasDlpPolicies = ($dlpPolicies -ne $null -and $dlpPolicies.Count -gt 0) if (-not $result.HasDlpPolicies) { $result.Findings += "Er zijn geen DLP-regels gevonden. Configureer DLP voor bescherming van gevoelige informatie en dataminimalisatie conform NIS2." } Write-Host "Controleren van audit logging..." -ForegroundColor Gray try { $auditConfig = Get-AdminAuditLogConfig -ErrorAction SilentlyContinue $result.HasAuditLogging = ($auditConfig -ne $null -and $auditConfig.UnifiedAuditLogIngestionEnabled -eq $true) } catch { $result.HasAuditLogging = $false } if (-not $result.HasAuditLogging) { $result.Findings += "Unified Audit Log lijkt niet volledig ingeschakeld. Uitgebreide logging is verplicht voor incident detection en verantwoordingsplicht conform NIS2." } Write-Host "Controleren van incident response plan (documentatie)..." -ForegroundColor Gray # Note: Dit controleert niet daadwerkelijk of een document bestaat, maar geeft een indicatie # In productie zou dit kunnen worden gekoppeld aan een documentbeheersysteem $result.HasIncidentResponsePlan = $true # Aanname dat dit handmatig wordt geverifieerd if (-not $result.HasIncidentResponsePlan) { $result.Findings += "Incident response plan ontbreekt of is niet actueel. Zorg voor een gedocumenteerd en regelmatig getest incident response plan conform NIS2 artikel 14." } } $result.IsCompliant = $result.HasConditionalAccess -and $result.HasMfaEnabled -and $result.HasDefenderConfigured -and $result.HasDlpPolicies -and $result.HasAuditLogging -and $result.HasIncidentResponsePlan Write-Host "`nResultaat Critical Infrastructure Compliance:" -ForegroundColor Cyan Write-Host (" Conditional Access policies : {0}" -f $result.HasConditionalAccess) -ForegroundColor White Write-Host (" Multi-factor authenticatie : {0}" -f $result.HasMfaEnabled) -ForegroundColor White Write-Host (" Microsoft Defender geconfigureerd: {0}" -f $result.HasDefenderConfigured) -ForegroundColor White Write-Host (" DLP-regels aanwezig : {0}" -f $result.HasDlpPolicies) -ForegroundColor White Write-Host (" Audit logging ingeschakeld : {0}" -f $result.HasAuditLogging) -ForegroundColor White Write-Host (" Incident response plan : {0}" -f $result.HasIncidentResponsePlan) -ForegroundColor White if ($result.IsCompliant) { Write-Host "`n[OK] Minimale kerncomponenten van de critical infrastructure compliance-aanpak zijn aanwezig." -ForegroundColor Green } else { Write-Host "`n[FAIL] Een of meer kerncomponenten ontbreken of zijn niet correct geconfigureerd." -ForegroundColor Red if ($result.Findings.Count -gt 0) { Write-Host "Details:" -ForegroundColor Yellow foreach ($finding in $result.Findings) { Write-Host " - $finding" -ForegroundColor Yellow } } } return $result } catch { Write-Host "`n[FAIL] Fout tijdens assessment: $_" -ForegroundColor Red throw } } function Invoke-CriticalInfrastructureComplianceReport { <# .SYNOPSIS Genereert een beknopt overzichtsrapport voor management. .DESCRIPTION Maakt een samenvattend rapport op basis van de uitgevoerde controles, geschikt voor managementrapportage en governance-overleggen conform NIS2 en Wbni. .PARAMETER AssessmentResult Het resultaatobject van Invoke-CriticalInfrastructureComplianceAssessment. .PARAMETER OutputPath Pad waar het rapport moet worden opgeslagen. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AssessmentResult, [Parameter(Mandatory = $false)] [string]$OutputPath ) $reportLines = @() $reportLines += "Critical Infrastructure Compliance Rapport - Microsoft 365" $reportLines += "NIS2 / Wbni - Nederlandse Baseline voor Veilige Cloud" $reportLines += "=" * 60 $reportLines += "" $reportLines += "Datum/tijd: $($AssessmentResult.Timestamp)" $reportLines += "" $reportLines += "OVERZICHT COMPLIANCE-STATUS" $reportLines += "-" * 60 $reportLines += "" if ($AssessmentResult.IsCompliant) { $reportLines += "Status: COMPLIANT" $reportLines += "Alle minimale kerncomponenten van de critical infrastructure compliance-aanpak zijn aanwezig." } else { $reportLines += "Status: NIET COMPLIANT" $reportLines += "Een of meer kerncomponenten ontbreken of zijn niet correct geconfigureerd." $reportLines += "Dit kan leiden tot niet-naleving van NIS2 en Wbni verplichtingen." } $reportLines += "" $reportLines += "DETAILS PER COMPONENT" $reportLines += "-" * 60 $reportLines += "" $reportLines += "Conditional Access policies : $(if ($AssessmentResult.HasConditionalAccess) { 'Aanwezig' } else { 'Ontbreekt' })" $reportLines += "Multi-factor authenticatie : $(if ($AssessmentResult.HasMfaEnabled) { 'Ingeschakeld' } else { 'Niet ingeschakeld' })" $reportLines += "Microsoft Defender geconfigureerd: $(if ($AssessmentResult.HasDefenderConfigured) { 'Aanwezig' } else { 'Ontbreekt' })" $reportLines += "DLP-regels : $(if ($AssessmentResult.HasDlpPolicies) { 'Aanwezig' } else { 'Ontbreekt' })" $reportLines += "Audit logging : $(if ($AssessmentResult.HasAuditLogging) { 'Ingeschakeld' } else { 'Niet ingeschakeld' })" $reportLines += "Incident response plan : $(if ($AssessmentResult.HasIncidentResponsePlan) { 'Aanwezig' } else { 'Ontbreekt' })" if ($AssessmentResult.Findings.Count -gt 0) { $reportLines += "" $reportLines += "AANDACHTSPUNTEN" $reportLines += "-" * 60 foreach ($finding in $AssessmentResult.Findings) { $reportLines += "- $finding" } } $reportLines += "" $reportLines += "AANBEVELINGEN" $reportLines += "-" * 60 if (-not $AssessmentResult.IsCompliant) { $reportLines += "1. Herzie de critical infrastructure compliance-aanpak en zorg dat alle kerncomponenten zijn geconfigureerd." $reportLines += "2. Voer periodieke controles uit om te borgen dat configuraties actueel blijven conform NIS2 en Wbni." $reportLines += "3. Zorg voor een actueel en regelmatig getest incident response plan." $reportLines += "4. Documenteer alle maatregelen voor audit-doeleinden en rapportage aan toezichthouders." } else { $reportLines += "1. Blijf periodiek monitoren of configuraties actueel blijven." $reportLines += "2. Evalueer regelmatig of aanvullende maatregelen nodig zijn voor nieuwe dreigingen." $reportLines += "3. Test incident response procedures regelmatig via tabletop exercises en drills." } $reportLines += "" $reportLines += "=" * 60 $reportText = $reportLines -join "`n" if ($OutputPath) { try { $reportText | Out-File -FilePath $OutputPath -Encoding UTF8 Write-Host "Rapport opgeslagen naar: $OutputPath" -ForegroundColor Green } catch { Write-Host "Fout bij opslaan rapport: $_" -ForegroundColor Red throw } } else { Write-Host $reportText } return $reportText } try { if ($Report) { if (-not $Assessment) { Write-Host "Waarschuwing: -Report vereist -Assessment. Voer eerst assessment uit..." -ForegroundColor Yellow $Assessment = $true } } if ($Assessment) { $assessmentResult = Invoke-CriticalInfrastructureComplianceAssessment if ($Report) { Write-Host "`nGenereren van rapport..." -ForegroundColor Cyan Invoke-CriticalInfrastructureComplianceReport -AssessmentResult $assessmentResult -OutputPath $OutputPath } if ($assessmentResult.IsCompliant) { exit 0 } else { exit 1 } } else { Write-Host "Beschikbare parameters:" -ForegroundColor Yellow Write-Host " -Assessment : Controleer de aanwezigheid van kerncomponenten" -ForegroundColor Gray Write-Host " -Report : Genereer een samenvattend rapport" -ForegroundColor Gray Write-Host " -OutputPath : Pad voor rapportbestand (alleen bij -Report)" -ForegroundColor Gray Write-Host " -DebugMode : Voer een veilige lokale test uit zonder cloudverbinding" -ForegroundColor Gray Write-Host "`nVoorbeeld: .\critical-infrastructure-compliance.ps1 -Assessment -DebugMode" -ForegroundColor Cyan Write-Host "Voorbeeld: .\critical-infrastructure-compliance.ps1 -Assessment -Report -OutputPath .\rapport.txt" -ForegroundColor Cyan } } catch { Write-Error "Scriptuitvoering is mislukt: $_" exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # Exitcodes: # 0 = Compliant # 1 = Niet compliant # 2 = Fout tijdens uitvoering

Risico zonder implementatie

Risico zonder implementatie
Critical: Zonder gestructureerde aanpak voor critical infrastructure compliance in Microsoft 365 blijft cyberweerbaarheid afhankelijk van losse initiatieven en individuele medewerkers. Dit vergroot de kans op hiaten in beveiligingsmaatregelen, onduidelijke rolverdeling, onvoldoende incident response, niet-naleving van meldplichten en daarmee op juridische en reputatierisico's, inclusief mogelijke boetes en dwangsommen van toezichthouders zoals ACM, AFM en NCSC.

Management Samenvatting

Introduceer een integraal compliance framework specifiek voor kritieke infrastructuur in Microsoft 365 dat NIS2- en Wbni-eisen vertaalt naar concrete governance, risicomanagement, beveiligingsmaatregelen en incident response procedures. Zorg voor heldere rollen en verantwoordelijkheden, geavanceerde threat detection en response capabilities, uitgebreide logging en monitoring, en gebruik geautomatiseerde controles en rapportages om naleving aantoonbaar te maken en continu te verbeteren.