Microsoft 365 Compliance: Overzicht En Governance Voor Nederlandse Overheidsorganisaties

💼 Management Samenvatting

Microsoft 365 vormt voor Nederlandse overheidsorganisaties de ruggengraat van digitale samenwerking, communicatie en gegevensopslag. Een stevig compliance-raamwerk rond Microsoft 365 is daarom onmisbaar om te voldoen aan wet- en regelgeving én om burgers, bestuur en toezichthouders te laten zien dat informatie veilig en zorgvuldig wordt behandeld.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
200u (tech: 80u)
Van toepassing op:
M365
Exchange Online
SharePoint Online
OneDrive
Teams
Publieke Sector
Overheidsorganisaties

Zonder integraal compliance-raamwerk rond Microsoft 365 ontstaat een lappendeken van losse instellingen, projecten en maatregelen. Verschillende teams richten zelfstandig DLP-beleid, retentieregels of auditlogging in, vaak zonder onderlinge afstemming of duidelijke koppeling met juridische eisen. Hierdoor ontstaan hiaten en doublures: gevoelige informatie wordt niet overal gelijk beschermd, bewaartermijnen zijn inconsistent, auditlogging is onvolledig en het is lastig om tijdens audits of incidenten aan te tonen welke maatregelen precies gelden. Tegelijkertijd neemt de druk vanuit wetgeving als de AVG, NIS2, de Archiefwet en de BIO toe, en verwachten bestuurders en burgers aantoonbare beheersing van privacy- en beveiligingsrisico’s. Zonder duidelijke governance, centrale regie en herhaalbare controles groeit de complexiteit exponentieel naarmate meer workloads, teams en samenwerkingsomgevingen in Microsoft 365 worden toegevoegd.

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

Implementatie

Dit index-artikel biedt een overkoepelend overzicht van het compliance-domein binnen Microsoft 365 voor Nederlandse overheidsorganisaties. Het beschrijft het governance-model, de belangrijkste juridische en normatieve kaders, de vertaling naar concrete Microsoft 365-functionaliteit (zoals Microsoft Purview, DLP, retentie, auditlogging en eDiscovery) en de manier waarop monitoring en remediatie structureel worden ingericht. Vanuit dit overzicht wordt verwezen naar verdiepende artikelen, zoals geautomatiseerde evidence automation, geïntegreerde compliance-frameworks, incident reporting en verzekerings- of vendorcompliance. Samen vormen deze artikelen het Microsoft 365-gedeelte van de "Nederlandse Baseline voor Veilige Cloud", waarmee organisaties een aantoonbaar en toekomstbestendig compliance-raamwerk kunnen opbouwen.

Het Microsoft 365 compliance-landschap voor de Nederlandse publieke sector

Voor Nederlandse overheidsorganisaties is Microsoft 365 geen gewone SaaS-dienst, maar een kernplatform voor bestuurlijke besluitvorming, dienstverleningsprocessen, beleidsontwikkeling en ketensamenwerking. Mail, documenten, chatberichten, vergadernotities en Teams-kanalen bevatten grote hoeveelheden gevoelige en vaak archiefwaardige informatie. Dit betekent dat vrijwel alle belangrijke normenkaders direct op Microsoft 365 van toepassing zijn. De Baseline Informatiebeveiliging Overheid (BIO) stelt eisen aan logging, toegangsbeheer, classificatie, continuïteit en governance. De Algemene Verordening Gegevensbescherming (AVG) legt verplichtingen op rond transparante gegevensverwerking, dataminimalisatie, bewaartermijnen en rechten van betrokkenen. NIS2 versterkt deze eisen voor vitale en belangrijke organisaties, met nadruk op risicomanagement, incidentmeldingen, ketenbeveiliging en doorlopende monitoring. Daarnaast gelden archiefwetgeving, sectorspecifieke toezichtskaders en soms aanvullende politieke of bestuurlijke afspraken over datasoevereiniteit, transparantie en verantwoording. Microsoft 365 is daarmee een knooppunt waar juridische, organisatorische en technische eisen samenkomen.

In de praktijk worden deze kaders nog te vaak los van elkaar benaderd. Een privacyteam richt zich op DPIA’s en verwerkersovereenkomsten, securityteams focussen op Conditional Access en Defender, terwijl archivarissen en informatiebeheerders zich buigen over bewaartermijnen en archivering. Zonder geïntegreerde benadering leidt dit tot conflicterende keuzes, bijvoorbeeld wanneer strikte bewaartermijnen uit de AVG botsen met verplichtingen tot langdurige archivering uit de Archiefwet, of wanneer securitymaatregelen samenwerken met ketenpartners bemoeilijken. Een volwassen Microsoft 365 compliance-raamwerk begint daarom met een samenhangende interpretatie van deze kaders: welke informatiecategorieën en processen zijn kritisch, welke risico’s zijn acceptabel, welke data mag in welke omgevingen worden opgeslagen, en welke normen hebben bij tegenstrijdigheid voorrang? Deze afwegingen worden vastgelegd in beleid en architectuurrichtlijnen die specifiek zijn toegesneden op Microsoft 365 en duidelijk maken hoe abstracte wettelijke eisen terugkomen in concrete inrichting, zoals sensitivity labels, DLP- en retentiebeleid, toegangsmodellen en provisioning-standaarden.

Microsoft levert voor het compliance-domein in M365 een breed scala aan functionaliteit, met Microsoft Purview als centrale schil rondom governance, risicobeheer en compliance. Functionaliteiten als informatieclassificatie, gegevensverliespreventie (DLP), retentie en records management, auditlogging, eDiscovery, insider risk management en communication compliance kunnen direct worden ingezet om aan Nederlandse eisen te voldoen. Maar deze tools zijn geen kant-en-klaar antwoord; ze moeten worden geconfigureerd op basis van het eigen normenkader, de specifieke risico’s van de organisatie en de afspraken in de keten. Dit artikel schetst daarom niet alleen welke functionaliteiten beschikbaar zijn, maar vooral hoe zij in samenhang moeten worden ingezet als onderdeel van een integraal compliance-landschap voor Microsoft 365 in de Nederlandse publieke sector.

Governance, eigenaarschap en rollen voor M365-compliance

Een effectief compliance-raamwerk voor Microsoft 365 begint bij helder eigenaarschap. In Nederlandse overheidsorganisaties zijn doorgaans meerdere functionarissen betrokken: de CISO is verantwoordelijk voor de integrale beveiligings- en risicostrategie, de Functionaris Gegevensbescherming (FG) bewaakt de AVG-naleving, de CIO en platform owner sturen op technische inrichting en lifecyclemanagement, terwijl lijnmanagers en proceseigenaren verantwoordelijk blijven voor de juiste omgang met informatie binnen hun domein. Zonder expliciete afspraken ontstaat al snel de situatie waarin niemand zich eigenaar voelt van kritieke keuzes, zoals het aanscherpen van DLP-regels, het activeren van extra auditlogging of het aanpassen van retentiebeleid. Dit leidt tot uitstelgedrag, suboptimale compromissen en een kwetsbaar compliance-niveau dat sterk afhankelijk is van individuele beheerders.

Governance rond M365-compliance moet daarom worden ingericht als een expliciet besluitvormings- en adviesproces. Vaak gebeurt dit via een multidisciplinair overleg, bijvoorbeeld een privacy- en securityboard of een Microsoft 365-governanceboard, waarin vertegenwoordigers van security, privacy, architectuur, informatiebeheer, IT-beheer en belangrijke businessdomeinen zijn vertegenwoordigd. Dit overleg vertaalt juridische en bestuurlijke kaders naar concrete ontwerpkeuzes: welke standaard Teams-sjablonen zijn toegestaan, welke minimalistische maar voldoende beschermende standaardinstellingen gelden voor externe delen, welke typen sites en Teams krijgen verplichte records management-regels, en hoe worden uitzonderingen beoordeeld en vastgelegd. Daarbij wordt nadrukkelijk gekeken naar de balans tussen veiligheid, werkbaarheid en kosten. Governance-documenten beschrijven deze keuzes, de onderliggende rationale en de manier waarop wijzigingen worden doorgevoerd via change-managementprocessen.

Rollen en verantwoordelijkheden moeten tevens worden gekoppeld aan concrete instrumenten. Zo moet duidelijk zijn wie toegang heeft tot Microsoft Purview voor het beheren van DLP- en retentiebeleid, wie eDiscovery-cases mag aanmaken en legal holds mag plaatsen, wie auditlogs kan inzien, wie tenantbrede wijzigingen in beveiligingsinstellingen mag doorvoeren en welke checks en balances daarbij gelden. Voorbeelden zijn gescheiden rollen voor configuratie en goedkeuring, vier-ogen-principes bij gevoelige wijzigingen en logging van alle config-changes. In volwassen organisaties worden deze rollen vastgelegd in rolbeschrijvingen, IAM-groepen en toewijzingen in zowel Azure AD-rollen als Purview-roltoewijzingen. Dit artikel geeft richting hoe die verdeling in de context van de "Nederlandse Baseline voor Veilige Cloud" kan worden vormgegeven en hoe governance wordt verbonden met de onderliggende technische inrichting.

Implementatieframework: van normenkader naar M365-configuratie

De stap van juridische en organisatorische eisen naar concrete Microsoft 365-configuratie vraagt om een gestructureerd implementatieframework. Dit begint met een vertalingstabel waarin per norm (bijvoorbeeld BIO-controle, AVG-artikel of NIS2-vereiste) wordt vastgelegd welke Microsoft 365-mogelijkheden kunnen bijdragen aan naleving. Zo wordt een BIO-eis rond logging gekoppeld aan het inschakelen van Unified Audit Logging, het veilig bewaren van auditlogs gedurende een afgesproken termijn en het opnemen van auditrapportages in het ISMS. AVG-eisen rond bewaartermijnen en dataminimalisatie worden vertaald naar retentielabels en -beleid in Purview, inclusief richtlijnen voor welke soorten Teams-omgevingen of SharePoint-sites welke bewaartermijnen hanteren. NIS2-vereisten rond detectie en rapportage worden onder meer gekoppeld aan Defender for Office 365, Defender for Cloud Apps, gecombineerd met SOC-processen die signalen vanuit deze componenten verwerken.

Vervolgens worden deze vertalingen samengebracht in standaardinrichtingen en sjablonen. Denk aan basisconfiguraties voor Teams (inclusief standaardgevoeligheidslabels, gasttoegangsinstellingen en bewaartermijnen), SharePoint-sitesjablonen voor beleidsontwikkeling of zaakdossiers, standaard mailboxinstellingen voor bestuurders, en centrale tenantinstellingen rond externe toegang, third-party apps en integraties. Door deze standaarden vast te leggen in zowel documentatie als PowerShell-scripts ontstaat configuration as code: wijzigingen kunnen worden gepland, getest in een acceptatieomgeving, peer-reviewed en gecontroleerd uitgerold. Dit verkleint de kans op foutieve handmatige wijzigingen en maakt het eenvoudiger om tijdens audits aan te tonen welke configuraties gelden, sinds wanneer en met welk doel. De detailartikelen in het M365-compliancedomein – zoals evidence automation en geïntegreerde compliance-frameworks – vullen dit implementatiebeeld verder in met concrete voorbeelden, configuratiestappen en scripts.

Tot slot omvat het implementatieframework ook het inbedden van M365-configuratie in bredere organisatieprocessen. Nieuwe Teams-omgevingen worden bijvoorbeeld niet ad-hoc aangemaakt, maar via een provisioningproces dat automatisch de juiste classificatie, bewaartermijnen, gasttoegangsinstellingen en eigenaarstoewijzing toepast. Nieuwe samenwerkingen met leveranciers worden voorzien van standaardsjablonen voor gegevensuitwisseling, toegangsbeheer en logging. Wijzigingen in wetgeving of normenkaders leiden niet tot paniekacties, maar worden opgepakt via een vaste cyclus: impactanalyse, ontwerpwijziging, testen, besluitvorming in governance-overleg, uitrol en monitoring. Microsoft 365 wordt zo niet alleen technisch compliant ingericht, maar ook organisatorisch verankerd als onderdeel van een volwassen informatie- en compliancehuishouding.

Monitoring, rapportage en koppeling met scripts

Gebruik PowerShell-script index.ps1 (functie Invoke-Monitoring) – Geeft een samenvattend overzicht van de Microsoft 365 compliance-status en controleert of alle M365-compliance-artikelen een gekoppeld JSON- en PS1-bestand hebben. Ondersteunt veilige lokale debugruns en gebruik in CI/CD-pijplijnen..

Compliance-monitoring in Microsoft 365 kent twee lagen: de inhoudelijke status van de tenantconfiguratie en de volledigheid van het eigen complianceraamwerk. Op tenantniveau gaat het bijvoorbeeld om de status van auditlogging, retentiebeleid, DLP-regels, eDiscovery-configuratie en Purview-waarschuwingen. Op raamwerkniveau gaat het om de vraag of alle relevante onderwerpen zijn uitgewerkt in artikelen, of bijbehorende scripts bestaan en of deze scripts regelmatig worden uitgevoerd. Het bijbehorende script `index.ps1` voor het M365-compliancedomein is ontworpen om juist die tweede laag te ondersteunen: het inventariseert welke JSON- en PS1-bestanden in de `content/m365/compliance`- en `code/m365/compliance`-structuur aanwezig zijn, signaleert ontbrekende koppelingen en kan in DebugMode lokaal worden gedraaid zonder dat er verbinding met de tenant nodig is. Zo kan de consistentie van de "Nederlandse Baseline voor Veilige Cloud" worden bewaakt, ongeacht of een beheerder op dat moment toegang heeft tot een productieomgeving.

Naarmate het complianceraamwerk volwassener wordt, kan `index.ps1` worden gecombineerd met inhoudelijke scripts zoals `evidence-automation.ps1` en `integrated-compliance-framework.ps1`. Samen leveren zij input voor dashboards en rapportages die laten zien hoe de Microsoft 365-omgeving ervoor staat ten opzichte van interne doelen en externe normenkaders. Rapportages kunnen worden geautomatiseerd via geplande taken of CI/CD-pijplijnen, waarbij scriptuitvoer wordt opgeslagen als JSON, CSV of direct wordt gepubliceerd naar monitoring- of GRC-platformen. Hierdoor ontstaat een objectief, reproduceerbaar beeld van de nalevingsstatus, waarmee CISO’s, FG’s en bestuurders weloverwogen beslissingen kunnen nemen over prioriteiten en investeringen. Dit artikel benadrukt dat monitoring niet alleen een technische activiteit is, maar een bestuurlijk instrument om verantwoording af te leggen en de organisatie gericht te verbeteren.

Remediatie en continue volwassenwording van M365-compliance

Gebruik PowerShell-script index.ps1 (functie Invoke-Remediation) – Genereert een overzicht van hiaten in het M365-compliancedomein, zoals ontbrekende JSON/PS1-koppelingen, en biedt handvatten voor vervolgstappen in lijn met de "Nederlandse Baseline voor Veilige Cloud"..

Remediatie binnen het M365-compliancedomein betekent dat verschillen tussen de gewenste en feitelijke situatie systematisch worden opgespoord en weggewerkt. Dat geldt zowel op tenantniveau (bijvoorbeeld ontbrekende auditlogging of onvoldoende afgedekte bewaartermijnen) als op raamwerkniveau (bijvoorbeeld onderwerpen die nog niet zijn uitgewerkt in JSON-artikelen of scripts). Het script `index.ps1` helpt bij deze laatste categorie: het maakt zichtbaar welke onderdelen van het M365-complianceraamwerk nog geen volledig uitgewerkte combinatie van artikel en script hebben. Dit inzicht kan worden gebruikt om een gerichte roadmap op te stellen: welke onderwerpen krijgen prioriteit, welke expertise is nodig, en hoe worden nieuwe artikelen en scripts volgens dezelfde structuur toegevoegd. Zo groeit de "Nederlandse Baseline voor Veilige Cloud" stap voor stap naar een volledig dekkend en goed onderhouden kennis- en scriptportfolio.

Continue volwassenwording vraagt daarnaast om het verankeren van leren en verbeteren. Bevindingen uit audits, incidenten, oefeningen, DPIA’s en gebruikersfeedback moeten expliciet worden teruggekoppeld naar zowel tenantconfiguratie als documentatie en scripts. Wanneer bijvoorbeeld blijkt dat bepaalde Teams-omgevingen structureel niet conform beleid worden ingericht, kan dit aanleiding zijn om provisioning-scripts uit te breiden, governance-richtlijnen aan te scherpen of aanvullende awarenesscampagnes op te zetten. Evenzo kan een wijziging in wetgeving – zoals aangescherpte NIS2-richtlijnen of nieuwe guidance van de Autoriteit Persoonsgegevens – ertoe leiden dat bestaande artikelen moeten worden aangepast en scripts moeten worden uitgebreid met extra controles. Door remediatie te koppelen aan duidelijke eigenaarschap, een prioritering op basis van risico’s en een vaste verbetercyclus, wordt M365-compliance een dynamisch, lerend systeem in plaats van een statische set documenten.

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 Overzichtsmonitoring en remediatie voor Microsoft 365 Compliance-status .DESCRIPTION Geeft een samenvattend beeld van de compliance-status van het M365-compliancedomein in deze repository en controleert of voor alle M365-compliance-artikelen zowel JSON- als PS1-bestanden aanwezig zijn. Ondersteunt veilige lokale debugruns zonder tenantverbinding en kan worden gebruikt in CI/CD-pijplijnen. .NOTES Filename: index.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-27 Version: 1.0 Related JSON: content/m365/compliance/index.json Category: compliance Workload: m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\index.ps1 -Monitoring -DebugMode Voert een lokale debug-run uit zonder verbinding met Microsoft 365 en toont een overzicht van JSON/PS1-koppelingen. .EXAMPLE .\index.ps1 -Monitoring Voert dezelfde repositorycontroles uit; optioneel uit te breiden met live tenantcontroles in andere scripts. .EXAMPLE .\index.ps1 -Remediation -WhatIf Toont welke acties je zou kunnen ondernemen om hiaten in het M365-compliancedomein te dichten. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(HelpMessage = "Voer een samenvattende monitoring uit van het M365-compliancedomein in de repository.")] [switch]$Monitoring, [Parameter(HelpMessage = "Genereer remediatie-overzichten en handvatten voor verbeteracties binnen het M365-compliancedomein.")] [switch]$Remediation, [Parameter(HelpMessage = "Toon welke acties zouden worden voorgesteld zonder daadwerkelijk te wijzigen.")] [switch]$WhatIf, [Parameter(HelpMessage = "Voer een veilige lokale test uit zonder verbinding met Microsoft 365.")] [switch]$DebugMode ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' function Get-RepositoryRoot { <# .SYNOPSIS Bepaalt de rootmap van de repository op basis van de locatie van dit script. .OUTPUTS String met pad naar repository-root. #> [CmdletBinding()] param() $root = Resolve-Path (Join-Path $PSScriptRoot "..\..\..") -ErrorAction SilentlyContinue if (-not $root) { throw "Kon de repository-root niet bepalen op basis van PSScriptRoot: $PSScriptRoot" } return $root.Path } function Get-M365ComplianceInventory { <# .SYNOPSIS Stelt een overzicht op van M365-compliancegerelateerde JSON- en PS1-bestanden. .OUTPUTS PSCustomObject met aantallen en details. #> [CmdletBinding()] param() $repoRoot = Get-RepositoryRoot $contentRoot = Join-Path $repoRoot "content\m365\compliance" $codeRoot = Join-Path $repoRoot "code\m365\compliance" $jsonFiles = @() if (Test-Path -Path $contentRoot) { $jsonFiles = Get-ChildItem -Path $contentRoot -Filter "*.json" -File -ErrorAction SilentlyContinue } $ps1Files = @() if (Test-Path -Path $codeRoot) { $ps1Files = Get-ChildItem -Path $codeRoot -Filter "*.ps1" -File -ErrorAction SilentlyContinue } $byName = @{} foreach ($json in $jsonFiles) { $base = [System.IO.Path]::GetFileNameWithoutExtension($json.Name) if (-not $byName.ContainsKey($base)) { $byName[$base] = [pscustomobject]@{ Name = $base JsonPath = $null JsonUpdated = $null ScriptPath = $null ScriptUpdated = $null } } $entry = $byName[$base] $entry.JsonPath = $json.FullName $entry.JsonUpdated = $json.LastWriteTime $byName[$base] = $entry } foreach ($ps1 in $ps1Files) { $base = [System.IO.Path]::GetFileNameWithoutExtension($ps1.Name) if (-not $byName.ContainsKey($base)) { $byName[$base] = [pscustomobject]@{ Name = $base JsonPath = $null JsonUpdated = $null ScriptPath = $null ScriptUpdated = $null } } $entry = $byName[$base] $entry.ScriptPath = $ps1.FullName $entry.ScriptUpdated = $ps1.LastWriteTime $byName[$base] = $entry } $items = $byName.Values | Sort-Object Name $missingJson = $items | Where-Object { -not $_.JsonPath } $missingScript = $items | Where-Object { -not $_.ScriptPath } return [pscustomobject]@{ RepositoryRoot = $repoRoot Items = $items MissingJson = $missingJson MissingScripts = $missingScript TotalControls = $items.Count WithJsonAndPs1 = ($items | Where-Object { $_.JsonPath -and $_.ScriptPath }).Count } } function Invoke-Monitoring { <# .SYNOPSIS Voert een samenvattende monitoring uit van het M365-compliancedomein in de repository. .OUTPUTS PSCustomObject met overzichtsresultaten. #> [CmdletBinding()] param() Write-Host "`nMonitoring: M365 Compliance overzicht (repository)" -ForegroundColor Yellow Write-Host "===============================================" -ForegroundColor Yellow $inventory = Get-M365ComplianceInventory Write-Host "`nRepository-root: $($inventory.RepositoryRoot)" -ForegroundColor Cyan Write-Host "Totaal M365 compliance controls (JSON/PS1-combinaties): $($inventory.TotalControls)" -ForegroundColor Cyan Write-Host "Volledig gekoppeld (JSON + PS1): $($inventory.WithJsonAndPs1)" -ForegroundColor Cyan if ($inventory.MissingJson.Count -gt 0) { Write-Host "`n❌ Ontbrekende JSON voor de volgende scripts:" -ForegroundColor Red foreach ($item in $inventory.MissingJson) { Write-Host " - $($item.Name) (script: $($item.ScriptPath))" -ForegroundColor Red } } if ($inventory.MissingScripts.Count -gt 0) { Write-Host "`n❌ Ontbrekende PS1-scripts voor de volgende JSON-bestanden:" -ForegroundColor Red foreach ($item in $inventory.MissingScripts) { Write-Host " - $($item.Name) (json: $($item.JsonPath))" -ForegroundColor Red } } if (($inventory.MissingJson.Count -eq 0) -and ($inventory.MissingScripts.Count -eq 0)) { Write-Host "`n✅ Alle M365-compliance-artikelen hebben zowel JSON als PS1." -ForegroundColor Green } else { Write-Host "`n⚠️ Er zijn nog hiaten in de JSON/PS1-koppeling voor M365-compliance." -ForegroundColor Yellow Write-Host " Gebruik -Remediation om gericht met deze hiaten aan de slag te gaan." -ForegroundColor Yellow } # In deze indexscript beperken we ons tot repositorycontroles. # Eventuele live tenantcontroles worden uitgevoerd in gespecialiseerde scripts zoals # evidence-automation.ps1 en integrated-compliance-framework.ps1. $isCompliant = ($inventory.MissingJson.Count -eq 0) -and ($inventory.MissingScripts.Count -eq 0) return [pscustomobject]@{ Inventory = $inventory IsCompliant = $isCompliant DebugMode = [bool]$DebugMode } } function Invoke-Remediation { <# .SYNOPSIS Ondersteunt remediatie door hiaten inzichtelijk te maken en vervolgstappen te adviseren. .OUTPUTS PSCustomObject met remediatieadvies. #> [CmdletBinding()] param() Write-Host "`nRemediatie: M365 Compliance verbetering (repository)" -ForegroundColor Yellow Write-Host "====================================================" -ForegroundColor Yellow $inventory = Get-M365ComplianceInventory $actions = @() if ($inventory.MissingJson.Count -gt 0) { $action = [pscustomobject]@{ Priority = "High" Issue = "Scripts zonder bijbehorend JSON-artikel" AffectedItems = $inventory.MissingJson.Count Recommendation = "Maak voor elk script in `code/m365/compliance` een corresponderend JSON-artikel in `content/m365/compliance` volgens het standaardschema." } $actions += $action Write-Host " ❌ $($action.Issue): $($action.AffectedItems) item(s)" -ForegroundColor Red Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if ($inventory.MissingScripts.Count -gt 0) { $action = [pscustomobject]@{ Priority = "High" Issue = "JSON-artikelen zonder gekoppeld PS1-script" AffectedItems = $inventory.MissingScripts.Count Recommendation = "Maak voor elk JSON-bestand in `content/m365/compliance` een gekoppeld PowerShell-script in `code/m365/compliance` dat monitoring en/of remediatie ondersteunt." } $actions += $action Write-Host " ❌ $($action.Issue): $($action.AffectedItems) item(s)" -ForegroundColor Red Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if (-not $actions) { Write-Host "`n✅ Er zijn geen structurele hiaten in het M365-compliancedomein gevonden." -ForegroundColor Green } else { Write-Host "`nVolgende stappen (suggestie):" -ForegroundColor Cyan Write-Host "1. Plan het uitwerken van ontbrekende JSON- en PS1-combinaties in de roadmap van de \"Nederlandse Baseline voor Veilige Cloud\"." -ForegroundColor White Write-Host "2. Gebruik bestaande artikelen zoals `evidence-automation` en `integrated-compliance-framework` als sjabloon voor nieuwe content." -ForegroundColor White Write-Host "3. Valideer nieuwe scripts altijd eerst met -DebugMode of lokale testdata voordat ze in een tenant worden gebruikt." -ForegroundColor White } if ($WhatIf) { Write-Host "`nWhatIf: er zijn geen wijzigingen aangebracht; bovenstaande acties zijn advies voor beheerders en auteurs." -ForegroundColor Yellow } return [pscustomobject]@{ Inventory = $inventory Actions = $actions } } try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "M365 Compliance Overzichtsmonitor" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan if ($Monitoring) { $result = Invoke-Monitoring if ($result.IsCompliant) { exit 0 } else { exit 1 } } elseif ($Remediation) { Invoke-Remediation | Out-Null } else { # Standaard: compacte compliance check via monitoring $result = Invoke-Monitoring if ($result.IsCompliant) { Write-Host "`n✅ COMPLIANT (repository M365-compliancedomein)" -ForegroundColor Green exit 0 } else { Write-Host "`n❌ NON-COMPLIANT (repository M365-compliancedomein)" -ForegroundColor Red Write-Host "Run met -Monitoring voor gedetailleerde rapportage" -ForegroundColor Yellow Write-Host "Run met -Remediation voor gericht verbeteradvies" -ForegroundColor Yellow exit 1 } } } catch { Write-Error "Er is een fout opgetreden in index.ps1 (M365/compliance): $_" exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder integraal M365-complianceraamwerk blijft naleving versnipperd, zijn risico’s slecht inzichtelijk en kan de organisatie bij incidenten of audits niet overtuigend aantonen dat zij voldoet aan BIO, AVG, NIS2 en archiefwetgeving.

Management Samenvatting

Richt een geïntegreerd compliance-raamwerk in rond Microsoft 365 waarin governance, juridische eisen, technische configuraties, monitoring en remediatie expliciet met elkaar zijn verbonden. Gebruik Microsoft Purview, PowerShell-scripts en heldere governance om naleving aantoonbaar en herhaalbaar te maken in lijn met de "Nederlandse Baseline voor Veilige Cloud".