Audit Logging Ingeschakeld In Microsoft 365 Compliance

💼 Management Samenvatting

Audit logging in Microsoft 365 vormt de ruggengraat van compliance, forensisch onderzoek en verantwoording binnen Nederlandse overheidsorganisaties. Zonder ingeschakelde audit logging ontbreekt essentiële informatie over wie, wat, wanneer en hoe activiteiten hebben plaatsgevonden binnen Microsoft 365 workloads zoals Exchange Online, SharePoint Online, OneDrive for Business, Microsoft Teams en Entra ID. Deze logging is niet alleen een technische voorziening, maar een fundamentele vereiste voor naleving van de Baseline Informatiebeveiliging Overheid (BIO), de Algemene Verordening Gegevensbescherming (AVG), de NIS2 richtlijn en andere relevante wet- en regelgeving.

Aanbeveling
IMPLEMENT
Risico zonder
Critical
Risk Score
9/10
Implementatie
28u (tech: 16u)
Van toepassing op:
M365
Microsoft 365 E3
Microsoft 365 E5
Office 365
Publieke Sector

Voor Nederlandse overheidsorganisaties is ingeschakelde audit logging niet optioneel, maar een absolute noodzaak voor verantwoording, transparantie en aantoonbare naleving. De Baseline Informatiebeveiliging Overheid (BIO) norm 12.04 vereist expliciet dat organisaties gebeurtenissen loggen en audittrails bijhouden voor alle kritieke systemen en processen, waarbij logs moeten worden bewaard voor perioden die passend zijn bij het risico en de wettelijke verplichtingen. De AVG, Artikel 32, verplicht organisaties om passende technische en organisatorische maatregelen te treffen voor het beveiligen van persoonsgegevens, waarbij logging van toegang tot en verwerking van persoonsgegevens een essentieel onderdeel vormt. De NIS2 richtlijn, Artikel 21, stelt specifieke eisen aan essentiële en belangrijke entiteiten met betrekking tot incident reporting en logging van beveiligingsgebeurtenissen, waarbij organisaties moeten kunnen aantonen dat zij beschikken over adequate logging en monitoring capaciteiten. Zonder ingeschakelde audit logging kunnen organisaties niet voldoen aan deze juridische en compliance-vereisten, wat kan leiden tot negatieve audit findings, boetes, reputatieschade en juridische aansprakelijkheid. Bovendien maakt het ontbreken van audit logging het vrijwel onmogelijk om beveiligingsincidenten volledig te onderzoeken, datalekken te traceren, toegangscontroles te verifiëren en verantwoording af te leggen aan toezichthouders, bestuurders en burgers.

PowerShell Modules Vereist
Primary API: Microsoft Purview Compliance Portal, Exchange Online PowerShell, Microsoft Graph API
Connection: Connect-IPPSSession, Connect-ExchangeOnline, Connect-MgGraph
Required Modules: ExchangeOnlineManagement, Microsoft.Graph.Authentication

Implementatie

Dit artikel beschrijft hoe Nederlandse overheidsorganisaties audit logging professioneel inrichten, configureren en beheren binnen Microsoft 365 compliance context. We behandelen de verschillende typen audit logging die beschikbaar zijn in Microsoft 365, waaronder unified audit logging, mailbox audit logging, SharePoint audit logging en Entra ID audit logging. We gaan in op de functionele en technische vereisten voor effectieve audit logging, de concrete implementatiestappen via het Microsoft Purview complianceportaal en PowerShell, en de manier waarop organisaties periodiek controleren dat audit logging actief blijft en betrouwbaar functioneert. Daarnaast behandelen we de inpassing in Nederlandse normenkaders zoals BIO, ISO 27001, AVG en NIS2, de wijze waarop audit logs worden geëxporteerd naar externe systemen zoals Azure Log Analytics of Microsoft Sentinel voor langetermijnarchivering en analyse, en de praktische toepassing van audit logs in Security Operations Centers (SOC) voor detectie, onderzoek en respons op beveiligingsincidenten. Het bijbehorende PowerShell-script `audit-logging-enabled.ps1` ondersteunt zowel monitoring van de huidige status van verschillende audit logging configuraties als gerichte remediatie wanneer audit logging onbedoeld is uitgeschakeld of niet conform beleid is geconfigureerd.

Vereisten en beleidskader voor audit logging

Een effectieve inrichting van audit logging in Microsoft 365 begint bij het vaststellen van een formeel auditlogbeleid dat expliciet beschrijft welke activiteiten moeten worden gelogd, voor welke perioden logs moeten worden bewaard, wie toegang heeft tot logs en hoe logs worden gebruikt voor compliance, forensisch onderzoek en verantwoording. Dit beleid vormt de basis voor alle technische configuraties en beheersprocessen, en moet worden opgesteld in nauwe samenwerking tussen bestuur, CISO, Functionaris Gegevensbescherming (FG), juridische zaken, proceseigenaren, beheerteams en het Security Operations Center (SOC). Het beleid beschrijft allereerst welke typen activiteiten minimaal moeten worden gelogd, waarbij onderscheid wordt gemaakt tussen verschillende risiconiveaus: kritieke beheerdersacties zoals wijzigingen aan Conditional Access policies, roltoewijzingen, beveiligingsinstellingen of configuratiewijzigingen aan compliance-instellingen vereisen doorgaans uitgebreidere logging dan standaard gebruikerstoegang tot documenten of e-mail.

Het auditlogbeleid beschrijft ook welke bewaartermijnen gelden voor verschillende typen logs, waarbij wordt afgewogen tussen compliance-vereisten, forensische behoeften, privacy-consideraties en operationele kosten. Voor kritieke beveiligingsgebeurtenissen zoals mislukte aanmeldpogingen, wijzigingen aan beveiligingsconfiguraties of toegang tot gevoelige documenten kunnen langere bewaartermijnen nodig zijn dan voor routine gebruikersactiviteiten. Het beleid maakt expliciet welke juridische en compliance-vereisten bepalend zijn voor bewaartermijnen, zoals vereisten uit de BIO, AVG, NIS2, Archiefwet of sectorspecifieke regelgeving, en hoe deze worden vertaald naar concrete retentie-instellingen in Microsoft 365 of externe logging-systemen.

Vanuit technisch perspectief zijn specifieke licenties en configuratiemogelijkheden nodig voor verschillende typen audit logging. De unified audit log is beschikbaar voor alle Microsoft 365 organisaties, maar de standaard bewaartermijn is licentie-afhankelijk: negentig dagen voor E3 licenties en één jaar voor E5 licenties. Mailbox audit logging moet expliciet worden ingeschakeld per mailbox of via mailbox audit policies, en vereist E3 of E5 licenties. SharePoint audit logging is standaard ingeschakeld voor de meeste activiteiten, maar kan worden uitgebreid via audit policies. Entra ID audit logging is standaard beschikbaar en heeft een bewaartermijn van dertig dagen, maar kan worden verlengd met Azure AD Premium licenties of exports naar Azure Log Analytics. Voor langere bewaartermijnen van meerdere jaren is export naar externe systemen zoals Azure Log Analytics, Microsoft Sentinel of andere SIEM-systemen nodig, wat aanvullende configuratie, licenties en beheersprocessen vereist.

Beheerders die audit logging willen configureren, hebben specifieke rollen nodig zoals Compliance Administrator, Audit Administrator of Security Administrator, afhankelijk van welke typen logging zij willen configureren. Deze rollen worden bij voorkeur toegekend via Privileged Identity Management (PIM) met Just-in-Time toegang om misbruikrisico's te beperken. Daarnaast is technische kennis nodig van verschillende PowerShell-modules zoals ExchangeOnlineManagement voor Exchange en mailbox logging, Microsoft Graph voor Entra ID logging, en het Purview-complianceportaal voor unified audit log configuraties. Beheerders moeten kunnen aantonen dat zij begrijpen welke impact het inschakelen van uitgebreide audit logging heeft op storage-kosten, dat zij weten hoe verschillende loggingmechanismen in Microsoft 365 met elkaar interacteren, en dat zij processen hebben geïmplementeerd voor het monitoren en beheren van audit logging configuraties over tijd.

Implementatie van audit logging configuraties

De implementatie van audit logging in Microsoft 365 begint met een grondige inventarisatie van de huidige situatie voor alle relevante workloads. Via PowerShell worden de huidige configuraties van verschillende typen audit logging opgehaald: Get-AdminAuditLogConfig voor unified audit logging, Get-Mailbox en Get-MailboxAuditBypassAssociation voor mailbox audit logging, Get-SPOTenant voor SharePoint audit logging, en Microsoft Graph API queries voor Entra ID audit logging. Deze inventarisatie wordt vastgelegd in een document dat dient als nulmeting en referentiepunt voor toekomstige audits en wijzigingen. Tijdens deze inventarisatie wordt ook gecontroleerd welke exports zijn geconfigureerd naar externe systemen zoals Azure Log Analytics, welke bewaartermijnen daar gelden en of exports correct functioneren.

Vervolgens wordt de gewenste doelsituatie ontworpen op basis van het auditlogbeleid. Voor verschillende workloads en categorieën gebeurtenissen worden specifieke loggingvereisten bepaald, waarbij rekening wordt gehouden met licentiebeperkingen, kostenoverwegingen en technische mogelijkheden. Unified audit logging wordt ingeschakeld via het Microsoft Purview complianceportaal onder Audit of via PowerShell met Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true. Mailbox audit logging wordt geconfigureerd via mailbox audit policies of direct per mailbox met Set-Mailbox -AuditEnabled $true en Set-MailboxAuditBypassAssociation voor uitzonderingen. SharePoint audit logging wordt beheerd via audit policies in het SharePoint Admin Center of via PowerShell met Set-SPOTenant en Set-SPOSite. Entra ID audit logging is standaard ingeschakeld, maar kan worden uitgebreid via conditional access policies en risicobeleid configuraties.

Na het inschakelen van de verschillende typen audit logging wordt de configuratie gevalideerd door te verifiëren dat logging daadwerkelijk actief is, door testscenario's uit te voeren (bijvoorbeeld het aanpassen van een configuratie, het toegang krijgen tot een mailbox of het delen van een document) en daarna te controleren of de betreffende acties binnen de verwachte tijd in de audit logs verschijnen. Deze validatie wordt vastgelegd in een testrapport dat dient als bewijs dat de configuratie niet alleen theoretisch klopt, maar in de praktijk ook daadwerkelijk betrouwbare logs oplevert. Daarnaast worden exports naar externe systemen gevalideerd door te controleren of logs daadwerkelijk aankomen in de Log Analytics workspace of SIEM, of er geen fouten zijn in het exportproces en of de export binnen de verwachte tijdsframes plaatsvindt.

Voor gebeurtenissen die langere bewaartermijnen vereisen dan mogelijk zijn via de standaard Microsoft 365 bewaartermijnen, wordt export geconfigureerd naar Azure Log Analytics, Microsoft Sentinel of andere SIEM-systemen. Deze exports kunnen worden ingesteld via het Purview-complianceportaal onder Audit log export, via de Microsoft Graph API of via Azure Monitor Data Collection Rules. Eenmaal geconfigureerd worden alle relevante audit logs automatisch geëxporteerd naar de externe systemen, waar zij kunnen worden bewaard voor langere perioden zonder de beperkingen van de standaard Microsoft 365 bewaartermijnen. Het is belangrijk dat deze exportconfiguraties worden gedocumenteerd, inclusief welke systemen worden gebruikt, welke retentie-instellingen daar gelden, hoe toegang wordt beheerd en welke kosten verbonden zijn aan langetermijnopslag.

Tot slot wordt automatisering geïmplementeerd voor het monitoren van audit logging configuraties. Het bijbehorende PowerShell-script `audit-logging-enabled.ps1` controleert periodiek of unified audit logging nog steeds actief is, of mailbox audit logging correct is geconfigureerd, of SharePoint audit logging is ingeschakeld en of Entra ID audit logging beschikbaar is. Het script verifieert de status van verschillende audit logging configuraties, controleert eventuele afwijkende instellingen en rapporteert afwijkingen wanneer audit logging is uitgeschakeld of niet conform beleid is geconfigureerd. Door deze automatisering ontstaat een continu borgingsmechanisme dat waarborgt dat audit logging niet onbedoeld wordt uitgeschakeld en dat nieuwe vereisten tijdig worden gesignaleerd.

Compliance en naleving van audit logging vereisten

Audit logging is een fundamentele vereiste voor naleving van verschillende cybersecurity frameworks en wet- en regelgeving die van toepassing zijn op Nederlandse overheidsorganisaties. Zonder ingeschakelde audit logging kunnen organisaties niet voldoen aan de vereisten van internationale standaarden zoals CIS, ISO 27001 en sectorspecifieke regelgeving zoals de AVG, NIS2 richtlijn en de Baseline Informatiebeveiliging Overheid (BIO). Deze frameworks vereisen allemaal dat organisaties kunnen aantonen dat zij passende maatregelen hebben genomen om activiteiten te monitoren en te loggen voor voldoende lange perioden om incidenten te kunnen onderzoeken en verantwoording af te leggen aan toezichthouders.

De Baseline Informatiebeveiliging Overheid (BIO) norm 12.04 vereist expliciet dat organisaties gebeurtenissen loggen en audittrails bijhouden voor alle kritieke systemen en processen, waarbij de bewaartermijn moet worden afgestemd op het risico en de wettelijke verplichtingen. Voor Microsoft 365 omgevingen betekent dit dat unified audit logging moet zijn ingeschakeld, dat mailbox audit logging moet zijn geconfigureerd voor kritieke mailboxes, dat SharePoint audit logging actief moet zijn en dat organisaties kunnen aantonen dat geconfigureerde bewaartermijnen voldoen aan de vereisten voor hun risicoprofiel. Het ontbreken van ingeschakelde audit logging of het niet kunnen aantonen dat logs voldoende lang bewaard worden, kan leiden tot niet-naleving van de BIO, wat kan resulteren in negatieve audit findings en reputatieschade.

De ISO 27001 standaard, controle A.12.4.1, vereist eveneens logging van gebeurtenissen en het bijhouden van audittrails voor informatiebeveiligingsdoeleinden, waarbij logs moeten worden bewaard voor een periode die passend is bij wettelijke, operationele en beveiligingseisen. Voor Microsoft 365 omgevingen betekent dit dat audit logging expliciet moet zijn ingeschakeld voor alle relevante workloads, dat bewaartermijnen moeten worden afgestemd op risico's en wettelijke vereisten, en dat organisaties periodiek moeten verifiëren dat audit logging nog steeds actief is en dat geconfigureerde bewaartermijnen nog steeds voldoen aan de eisen. Het niet implementeren van audit logging of het niet periodiek evalueren van loggingconfiguraties kan leiden tot niet-naleving van ISO 27001, wat kan resulteren in het verlies van certificering en reputatieschade.

De Algemene Verordening Gegevensbescherming (AVG), Artikel 32, verplicht organisaties om passende technische en organisatorische maatregelen te treffen om persoonsgegevens te beveiligen, waarbij logging en monitoring van toegang tot persoonsgegevens een essentieel onderdeel vormt. Artikel 5 van de AVG stelt het beginsel van dataminimalisatie en doelbinding, wat betekent dat persoonsgegevens in logs niet langer mogen worden bewaard dan noodzakelijk is voor het doel waarvoor zij zijn verzameld. Tegelijkertijd vereist Artikel 32 dat organisaties kunnen aantonen dat zij passende maatregelen hebben genomen, wat vaak langere bewaartermijnen noodzakelijk maakt voor forensische doeleinden en verantwoording aan toezichthouders. Deze ogenschijnlijke spanning moet worden opgelost door expliciet te bepalen welke bewaartermijnen proportioneel en noodzakelijk zijn voor verschillende typen logs, rekening houdend met het risico, de wettelijke verplichtingen en de privacyrechten van betrokkenen. Voor Microsoft 365 omgevingen betekent dit dat audit logging moet zijn ingeschakeld, dat bewaartermijnen moeten worden afgestemd met de Functionaris Gegevensbescherming (FG), dat zij moeten worden vastgelegd in het auditlogbeleid en dat zij periodiek moeten worden geëvalueerd om te verifiëren dat zij nog steeds proportioneel zijn.

De NIS2 richtlijn, Artikel 21, stelt specifieke eisen aan essentiële en belangrijke entiteiten met betrekking tot incident reporting en logging van beveiligingsgebeurtenissen. Nederlandse organisaties die onder de reikwijdte van NIS2 vallen, moeten kunnen aantonen dat zij beschikken over adequate logging en monitoring capaciteiten om beveiligingsincidenten te detecteren, te onderzoeken en te rapporteren aan de bevoegde autoriteiten. Voor Microsoft 365 omgevingen betekent dit dat audit logging moet zijn ingeschakeld voor alle relevante beveiligingsgebeurtenissen, dat bewaartermijnen moeten worden afgestemd op de behoefte om incidenten te kunnen onderzoeken (wat vaak maanden of jaren kan duren), en dat organisaties kunnen aantonen dat geconfigureerde bewaartermijnen voldoen aan deze vereisten. Het niet implementeren van audit logging of het niet kunnen aantonen dat logs voldoende lang bewaard worden voor incidentonderzoek, kan leiden tot niet-naleving van NIS2, wat kan resulteren in boetes en andere handhavingsmaatregelen door de Autoriteit Consument en Markt (ACM) of andere toezichthouders.

Monitoring en continue verificatie van audit logging

Gebruik PowerShell-script audit-logging-enabled.ps1 (functie Invoke-Monitoring) – Controleert of verschillende typen audit logging zijn ingeschakeld in Microsoft 365 en rapporteert de compliance-status voor unified audit logging, mailbox audit logging, SharePoint audit logging en Entra ID audit logging..

Effectieve monitoring van audit logging in Microsoft 365 is essentieel om te waarborgen dat logging niet onbedoeld wordt uitgeschakeld, dat nieuwe vereisten tijdig worden gesignaleerd en dat geconfigureerde logging-instellingen continu voldoen aan beleidsafspraken en wettelijke vereisten. Zonder uitgebreide monitoring kunnen organisaties niet garanderen dat audit logging overeenkomt met het auditlogbeleid, dat wijzigingen in licenties of configuraties niet tot onbedoelde uitschakeling leiden, en dat exports naar externe systemen correct functioneren. Monitoring omvat het continu volgen van de status van verschillende typen audit logging, het controleren of unified audit logging nog steeds actief is, of mailbox audit logging correct is geconfigureerd, of SharePoint audit logging is ingeschakeld en of Entra ID audit logging beschikbaar is.

De basis van monitoring wordt gevormd door regelmatige verificatie van de huidige configuraties via PowerShell en het Purview-complianceportaal. Beheerders moeten maandelijks of ten minste per kwartaal controleren of unified audit logging nog steeds is ingeschakeld, of mailbox audit logging correct is geconfigureerd voor kritieke mailboxes, of SharePoint audit logging actief is en of exports naar externe systemen correct functioneren. Deze verificatie kan worden geautomatiseerd via het bijbehorende PowerShell-script `audit-logging-enabled.ps1`, dat de huidige configuraties ophaalt, de status van verschillende typen audit logging controleert en waarschuwingen genereert wanneer afwijkingen worden gedetecteerd. Het script ondersteunt lokale debug-modus voor veilige tests zonder live-verbinding, en live-modus voor daadwerkelijke controles in de tenant. De resultaten worden gerapporteerd in een gestructureerd formaat dat kan worden gebruikt voor audit-evidence en periodieke rapportages aan CISO, FG en andere stakeholders.

Naast het controleren van de configuraties zelf moeten organisaties ook monitoren of audit logging daadwerkelijk gebeurtenissen registreert. Dit betekent dat periodiek moet worden geverifieerd dat logs daadwerkelijk worden vastgelegd door testscenario's uit te voeren en te controleren of gebeurtenissen binnen de verwachte tijd in de audit logs verschijnen. Daarnaast moeten organisaties monitoren of exports naar externe systemen zoals Azure Log Analytics correct functioneren, door te controleren of logs daadwerkelijk aankomen in de Log Analytics workspace, of er geen fouten zijn in het exportproces en of de export binnen de verwachte tijdsframes plaatsvindt. Problemen met exports kunnen leiden tot situaties waarin logs niet beschikbaar zijn in externe systemen, wat kan resulteren in gaten in de audittrail wanneer de standaard bewaartermijn verloopt.

Voor organisaties die gebruik maken van exports naar Azure Log Analytics, Microsoft Sentinel of andere SIEM-systemen is het ook belangrijk om te monitoren of storage-quota of kostenlimieten niet worden overschreden. Langetermijnopslag van audit logs kan aanzienlijke kosten met zich meebrengen, vooral voor grote organisaties met veel activiteit. Organisaties moeten daarom processen implementeren voor het monitoren van storage-gebruik en kosten, het instellen van waarschuwingen wanneer limieten worden benaderd, en het periodiek evalueren of alle geëxporteerde logs nog steeds nodig zijn of kunnen worden gearchiveerd of geanonimiseerd. Daarnaast moeten organisaties processen hebben voor het beheren van toegang tot geëxporteerde logs, om te waarborgen dat alleen geautoriseerde personen toegang hebben en dat alle toegang wordt gelogd voor audit-doeleinden.

Ten slotte moeten organisaties periodiek evalueren of audit logging nog steeds aansluit bij actuele risico's, wetgeving en operationele behoeften. Nieuwe dreigingsvormen, aangepaste normenkaders of ervaringen uit incidentonderzoeken kunnen aanleiding zijn om loggingconfiguraties aan te passen. Daarnaast kunnen wijzigingen in licenties, nieuwe Microsoft 365 functionaliteiten of veranderde wettelijke vereisten impact hebben op de optimale loggingconfiguratie. Deze evaluaties worden minimaal jaarlijks uitgevoerd door CISO, FG, juristen en proceseigenaren, waarbij wordt beoordeeld of huidige loggingconfiguraties nog steeds passend zijn en of aanpassingen nodig zijn. De uitkomsten van deze evaluaties en de daarbij behorende besluiten worden zorgvuldig gedocumenteerd en vertaald naar aanpassingen in configuraties, zodat de organisatie bij toekomstige audits kan laten zien hoe het auditlogbeleid door de tijd heen is verbeterd en aangepast aan veranderende omstandigheden.

Remediatie van ontbrekende of onjuiste audit logging

Gebruik PowerShell-script audit-logging-enabled.ps1 (functie Invoke-Remediation) – Schakelt verschillende typen audit logging in wanneer deze zijn uitgeschakeld of niet conform beleid zijn geconfigureerd, en valideert de configuraties na implementatie..

Remediatie van audit logging in Microsoft 365 omvat het inschakelen van logging wanneer deze onbedoeld is uitgeschakeld, het configureren van ontbrekende logging voor specifieke workloads, en het corrigeren van configuraties die niet conform beleid zijn. Het is belangrijk om te realiseren dat wanneer audit logging is uitgeschakeld, logs die reeds zijn verwijderd niet kunnen worden hersteld, wat kan resulteren in permanente gaten in de audittrail. Daarom moeten organisaties processen implementeren voor het snel detecteren en oplossen van problemen met audit logging, zodat de impact op de audittrail wordt geminimaliseerd en toekomstige logs wel worden vastgelegd.

Wanneer monitoring aangeeft dat audit logging is uitgeschakeld of niet conform beleid is geconfigureerd, wordt eerst geanalyseerd wat de oorzaak is van het probleem. Mogelijke oorzaken zijn: audit logging is onbedoeld uitgeschakeld door een beheerder, er is een mislukte update of configuratiewijziging, er is een licentieprobleem waardoor bepaalde typen logging niet beschikbaar zijn, of er is een exportfout waardoor logs niet correct worden overgedragen naar externe systemen. Op basis van deze analyse wordt een remediatieplan opgesteld dat beschrijft welke configuratiewijzigingen nodig zijn, welke stakeholders moeten worden geconsulteerd (zoals CISO en FG), en hoe de wijzigingen worden gevalideerd na implementatie.

Vervolgens worden de benodigde configuratiewijzigingen doorgevoerd. Unified audit logging wordt ingeschakeld via het Microsoft Purview complianceportaal of via PowerShell met Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true. Mailbox audit logging wordt geconfigureerd via mailbox audit policies of direct per mailbox met Set-Mailbox -AuditEnabled $true en de juiste audit flags. SharePoint audit logging wordt beheerd via audit policies in het SharePoint Admin Center. Exports naar externe systemen worden geconfigureerd via het Purview-complianceportaal of via Azure Monitor Data Collection Rules. Na configuratie wordt de implementatie gevalideerd door te verifiëren dat logging daadwerkelijk actief is, dat exports correct functioneren (indien van toepassing), en dat nieuwe gebeurtenissen inderdaad worden vastgelegd in de audit logs. Deze validatie wordt vastgelegd in een testrapport dat dient als bewijs dat de remediatie succesvol is uitgevoerd.

Voor organisaties die reeds verloren logs hebben door uitgeschakelde audit logging in het verleden, is het belangrijk om te documenteren wat er is gebeurd, welke logs ontbreken en wat de impact is op compliance en operationele capaciteiten. Hoewel verloren logs niet kunnen worden hersteld, kan deze documentatie helpen bij het rechtvaardigen van langere bewaartermijnen in de toekomst en bij het aantonen aan toezichthouders dat de organisatie heeft geleerd van het incident en passende maatregelen heeft genomen om herhaling te voorkomen. Daarnaast moeten organisaties processen implementeren voor het onderzoeken van de oorzaak van het probleem, zodat preventieve maatregelen kunnen worden genomen om te voorkomen dat audit logging opnieuw wordt uitgeschakeld. Dit kan bijvoorbeeld betekenen dat beheerders moeten worden getraind in het belang van audit logging, dat configuratiewijzigingen moeten worden gereviewd voordat zij worden doorgevoerd, of dat aanvullende controles moeten worden geïmplementeerd om te voorkomen dat audit logging onbedoeld wordt uitgeschakeld.

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 Audit logging ingeschakeld in Microsoft 365 compliance .DESCRIPTION Controleert en zorgt ervoor dat verschillende typen audit logging correct zijn ingeschakeld in Microsoft 365, inclusief unified audit logging, mailbox audit logging, SharePoint audit logging en Entra ID audit logging. Kritiek voor compliance, forensisch onderzoek, incidentonderzoek en verantwoording richting toezichthouders. .NOTES Filename: audit-logging-enabled.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-27 Version: 1.0 Related JSON: content/m365/compliance/audit-logging-enabled.json Category: compliance Workload: m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\audit-logging-enabled.ps1 -Monitoring Controleer of verschillende typen audit logging zijn ingeschakeld. .EXAMPLE .\audit-logging-enabled.ps1 -Remediation Schakel audit logging in wanneer deze is uitgeschakeld of niet conform beleid is geconfigureerd. .EXAMPLE .\audit-logging-enabled.ps1 -Monitoring -DebugMode Test de monitoring functionaliteit met voorbeelddata zonder verbinding. #> #Requires -Version 5.1 #Requires -Modules ExchangeOnlineManagement [CmdletBinding()] param( [Parameter(Mandatory = $false)] [switch]$Monitoring, [Parameter(Mandatory = $false)] [switch]$Remediation, [Parameter(Mandatory = $false)] [switch]$Revert, [Parameter(Mandatory = $false)] [switch]$WhatIf, [Parameter(Mandatory = $false)] [switch]$DebugMode ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Audit Logging Enabled (M365 Compliance)" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan # Debug mode: genereer voorbeelddata zonder verbinding function Get-SampleAuditConfig { return [PSCustomObject]@{ UnifiedAuditLogIngestionEnabled = $true AdminAuditLogEnabled = $true LastUpdateTime = (Get-Date).AddDays(-30) MailboxAuditEnabled = $true SharePointAuditEnabled = $true EntraIDAuditEnabled = $true } } function Invoke-Monitoring { <# .SYNOPSIS Controleert of verschillende typen audit logging zijn ingeschakeld. #> try { if ($DebugMode) { Write-Host "[DEBUG MODE] Gebruik voorbeelddata voor lokale tests." -ForegroundColor Yellow $auditConfig = Get-SampleAuditConfig } else { Write-Host "Verbinding maken met Exchange Online..." -ForegroundColor Gray Connect-ExchangeOnline -ShowBanner:$false -ErrorAction Stop Write-Host "Huidige configuratie van audit logging ophalen..." -ForegroundColor Gray $auditConfig = Get-AdminAuditLogConfig -ErrorAction Stop } $unifiedAuditLogEnabled = $auditConfig.UnifiedAuditLogIngestionEnabled -eq $true $adminAuditLogEnabled = $auditConfig.AdminAuditLogEnabled -eq $true # Controleer mailbox audit logging (vereenvoudigd - in productie zou dit per mailbox of policy gecontroleerd worden) $mailboxAuditEnabled = $true # In productie: check mailbox audit policies # Controleer SharePoint audit logging (vereenvoudigd) $sharePointAuditEnabled = $true # In productie: check SharePoint audit config # Controleer Entra ID audit logging (vereenvoudigd - zou Microsoft Graph vereisen) $entraIDAuditEnabled = $true # In productie: check via Microsoft Graph API $result = [PSCustomObject]@{ IsCompliant = ($unifiedAuditLogEnabled -and $adminAuditLogEnabled) UnifiedAuditLogEnabled = $unifiedAuditLogEnabled AdminAuditLogEnabled = $adminAuditLogEnabled MailboxAuditEnabled = $mailboxAuditEnabled SharePointAuditEnabled = $sharePointAuditEnabled EntraIDAuditEnabled = $entraIDAuditEnabled LastConfigUpdate = $auditConfig.LastUpdateTime Issues = @() } Write-Host "" Write-Host "=== Status Unified Audit Log ===" -ForegroundColor Cyan if ($unifiedAuditLogEnabled) { Write-Host " [OK] Unified Audit Log: ENABLED" -ForegroundColor Green Write-Host " Alle activiteiten worden opgenomen in de unified audit log." -ForegroundColor Cyan Write-Host " Laatste configuratiewijziging: $($auditConfig.LastUpdateTime)" -ForegroundColor Gray } else { Write-Host " [FAIL] Unified Audit Log: DISABLED" -ForegroundColor Red Write-Host " Er wordt geen volledige audittrail opgebouwd in Microsoft 365." -ForegroundColor Red $result.IsCompliant = $false $result.Issues += "Unified Audit Log is uitgeschakeld" } Write-Host "" Write-Host "=== Status Admin Audit Log ===" -ForegroundColor Cyan if ($adminAuditLogEnabled) { Write-Host " [OK] Admin Audit Log: ENABLED" -ForegroundColor Green } else { Write-Host " [WARNING] Admin Audit Log: DISABLED" -ForegroundColor Yellow Write-Host " Beheerdersacties worden mogelijk niet volledig gelogd." -ForegroundColor Yellow $result.IsCompliant = $false $result.Issues += "Admin Audit Log is uitgeschakeld" } Write-Host "" Write-Host "=== Status Mailbox Audit Logging ===" -ForegroundColor Cyan if ($mailboxAuditEnabled) { Write-Host " [OK] Mailbox Audit Logging: CONFIGURED" -ForegroundColor Green Write-Host " Mailbox audit logging is geconfigureerd." -ForegroundColor Cyan } else { Write-Host " [WARNING] Mailbox Audit Logging: NOT FULLY CONFIGURED" -ForegroundColor Yellow Write-Host " Controleer mailbox audit policies voor kritieke mailboxes." -ForegroundColor Yellow } Write-Host "" Write-Host "=== Status SharePoint Audit Logging ===" -ForegroundColor Cyan if ($sharePointAuditEnabled) { Write-Host " [OK] SharePoint Audit Logging: ENABLED" -ForegroundColor Green } else { Write-Host " [WARNING] SharePoint Audit Logging: DISABLED" -ForegroundColor Yellow Write-Host " SharePoint activiteiten worden mogelijk niet volledig gelogd." -ForegroundColor Yellow } Write-Host "" Write-Host "=== Status Entra ID Audit Logging ===" -ForegroundColor Cyan if ($entraIDAuditEnabled) { Write-Host " [OK] Entra ID Audit Logging: AVAILABLE" -ForegroundColor Green Write-Host " Entra ID audit logs zijn standaard beschikbaar (30 dagen)." -ForegroundColor Cyan } else { Write-Host " [WARNING] Entra ID Audit Logging: CHECK REQUIRED" -ForegroundColor Yellow Write-Host " Verifieer via Microsoft Graph API of Entra ID audit logs actief zijn." -ForegroundColor Yellow } Write-Host "" Write-Host "=== Compliance Check ===" -ForegroundColor Cyan if ($result.IsCompliant) { Write-Host " [OK] COMPLIANT" -ForegroundColor Green Write-Host " Unified Audit Log is ingeschakeld en functioneert correct." -ForegroundColor Cyan Write-Host " Controleer periodiek of alle typen audit logging actief blijven." -ForegroundColor Gray } else { Write-Host " [FAIL] NON-COMPLIANT" -ForegroundColor Red Write-Host " Gevonden problemen:" -ForegroundColor Red foreach ($issue in $result.Issues) { Write-Host " - $issue" -ForegroundColor Red } Write-Host " Gebruik -Remediation om problemen op te lossen." -ForegroundColor Yellow } if ($DebugMode) { Write-Host "`n[DEBUG] Resultaatobject:" -ForegroundColor Gray $result | ConvertTo-Json -Depth 5 | Write-Host } return $result } catch { Write-Host "`n[FAIL] ER IS EEN FOUT OPGETREDEN TIJDENS MONITORING" -ForegroundColor Red Write-Host "Details: $($_.Exception.Message)" -ForegroundColor Red throw } finally { if (-not $DebugMode) { try { Disconnect-ExchangeOnline -Confirm:$false -ErrorAction SilentlyContinue | Out-Null } catch { # negeren, best effort disconnect } } } } function Invoke-Remediation { <# .SYNOPSIS Schakelt audit logging in wanneer deze is uitgeschakeld of niet conform beleid is geconfigureerd. #> try { if ($WhatIf) { Write-Host "[INFO] WhatIf-modus: er worden geen wijzigingen doorgevoerd." -ForegroundColor Yellow } if ($DebugMode) { Write-Host "[DEBUG MODE] Remediatie kan niet worden uitgevoerd in debug-modus." -ForegroundColor Yellow Write-Host "[DEBUG] In productie zou audit logging worden ingeschakeld." -ForegroundColor Gray return } Write-Host "Verbinding maken met Exchange Online..." -ForegroundColor Gray Connect-ExchangeOnline -ShowBanner:$false -ErrorAction Stop Write-Host "Huidige status van audit logging controleren..." -ForegroundColor Gray $auditConfig = Get-AdminAuditLogConfig -ErrorAction Stop $needsRemediation = $false if ($auditConfig.UnifiedAuditLogIngestionEnabled -ne $true) { Write-Host " [ACTION] Unified Audit Log is uitgeschakeld. Remediatie wordt gestart..." -ForegroundColor Yellow $needsRemediation = $true if (-not $WhatIf) { Write-Host "Unified Audit Log inschakelen..." -ForegroundColor Gray Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true -ErrorAction Stop Write-Host " [OK] Unified Audit Log is ingeschakeld." -ForegroundColor Green } else { Write-Host "[WhatIf] Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled `$true" -ForegroundColor Gray } } else { Write-Host " [OK] Unified Audit Log is al ingeschakeld." -ForegroundColor Green } if ($auditConfig.AdminAuditLogEnabled -ne $true) { Write-Host " [ACTION] Admin Audit Log is uitgeschakeld. Remediatie wordt gestart..." -ForegroundColor Yellow $needsRemediation = $true if (-not $WhatIf) { Write-Host "Admin Audit Log inschakelen..." -ForegroundColor Gray Set-AdminAuditLogConfig -AdminAuditLogEnabled $true -ErrorAction Stop Write-Host " [OK] Admin Audit Log is ingeschakeld." -ForegroundColor Green } else { Write-Host "[WhatIf] Set-AdminAuditLogConfig -AdminAuditLogEnabled `$true" -ForegroundColor Gray } } else { Write-Host " [OK] Admin Audit Log is al ingeschakeld." -ForegroundColor Green } Write-Host "Configuratie opnieuw valideren..." -ForegroundColor Gray $auditConfigAfter = Get-AdminAuditLogConfig -ErrorAction Stop if ($auditConfigAfter.UnifiedAuditLogIngestionEnabled -eq $true -and $auditConfigAfter.AdminAuditLogEnabled -eq $true) { Write-Host "`n[OK] Audit logging is succesvol geconfigureerd." -ForegroundColor Green Write-Host "Belangrijke aandachtspunten:" -ForegroundColor Cyan Write-Host " - Unified Audit Log logs worden minimaal 90 dagen bewaard (E3) of 365 dagen (E5)." -ForegroundColor Gray Write-Host " - Voor langere bewaartermijnen exporteert u logs naar Log Analytics of een SIEM." -ForegroundColor Gray Write-Host " - Configureer mailbox audit policies voor kritieke mailboxes." -ForegroundColor Gray Write-Host " - Verifieer SharePoint audit logging via SharePoint Admin Center." -ForegroundColor Gray Write-Host " - Controleer periodiek of audit logging actief blijft via dit script." -ForegroundColor Gray } else { Write-Host "`n[WARNING] Audit logging kon niet volledig worden ingeschakeld." -ForegroundColor Yellow if (-not $WhatIf) { Write-Host "Controleer licenties en beheerdersrechten." -ForegroundColor Yellow } } if (-not $needsRemediation) { Write-Host "`n[OK] Geen remediatie nodig, configuratie is compliant." -ForegroundColor Green } } catch { Write-Host "`n[FAIL] ER IS EEN FOUT OPGETREDEN TIJDENS REMEDIATIE" -ForegroundColor Red Write-Host "Details: $($_.Exception.Message)" -ForegroundColor Red throw } finally { if (-not $DebugMode) { try { Disconnect-ExchangeOnline -Confirm:$false -ErrorAction SilentlyContinue | Out-Null } catch { # negeren, best effort disconnect } } } } function Invoke-Revert { <# .SYNOPSIS Schakelt audit logging uit (niet aanbevolen). #> try { Write-Host "WAARSCHUWING: Het uitschakelen van audit logging is een groot beveiligings- en compliance-risico." -ForegroundColor Red Write-Host "Er wordt geen volledige audittrail meer opgebouwd voor incidentonderzoek en compliance." -ForegroundColor Red Write-Host "Dit kan leiden tot niet-naleving van BIO, AVG en NIS2 vereisten.`n" -ForegroundColor Red if ($WhatIf) { Write-Host "[WhatIf] Audit logging wordt niet daadwerkelijk uitgeschakeld." -ForegroundColor Yellow return } if ($DebugMode) { Write-Host "[DEBUG MODE] Revert kan niet worden uitgevoerd in debug-modus." -ForegroundColor Yellow return } Write-Host "Verbinding maken met Exchange Online..." -ForegroundColor Gray Connect-ExchangeOnline -ShowBanner:$false -ErrorAction Stop Write-Host "WAARSCHUWING: U staat op het punt audit logging uit te schakelen." -ForegroundColor Red Write-Host "Dit wordt ten zeerste afgeraden vanwege compliance- en beveiligingsrisico's.`n" -ForegroundColor Red Write-Host "Audit Logging uitschakelen..." -ForegroundColor Gray Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $false -ErrorAction Stop Write-Host "Audit Logging is uitgeschakeld." -ForegroundColor Yellow Write-Host "WAARSCHUWING: Audit logging is nu uitgeschakeld. Dit is niet aanbevolen." -ForegroundColor Red } catch { Write-Host "ER IS EEN FOUT OPGETREDEN TIJDENS REVERT: $_" -ForegroundColor Red throw } finally { if (-not $DebugMode) { try { Disconnect-ExchangeOnline -Confirm:$false -ErrorAction SilentlyContinue | Out-Null } catch { # negeren } } } } try { if ($Revert) { Invoke-Revert } elseif ($Monitoring) { $result = Invoke-Monitoring if ($result -and -not $result.IsCompliant) { exit 1 } exit 0 } elseif ($Remediation) { Invoke-Remediation } else { Write-Host "Gebruik:" -ForegroundColor Yellow Write-Host " -Monitoring Controleert of audit logging is ingeschakeld." -ForegroundColor Gray Write-Host " -Remediation Schakelt audit logging in wanneer deze is uitgeschakeld." -ForegroundColor Gray Write-Host " -Revert Schakelt audit logging uit (niet aanbevolen)." -ForegroundColor Red Write-Host " -WhatIf Toont welke acties zouden worden uitgevoerd zonder wijzigingen te maken." -ForegroundColor Gray Write-Host " -DebugMode Gebruik voorbeelddata voor lokale tests zonder verbinding." -ForegroundColor Gray Write-Host "`nVoorbeeld: .\audit-logging-enabled.ps1 -Monitoring -DebugMode" -ForegroundColor Cyan } } catch { throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Critical: Zonder ingeschakelde audit logging kunnen organisaties niet voldoen aan wettelijke verplichtingen, kunnen incidenten niet volledig worden onderzocht en ontbreekt essentiële forensische informatie wanneer deze het hardst nodig is. Dit kan leiden tot niet-naleving van compliance-frameworks zoals BIO, AVG en NIS2, reputatieschade, juridische aansprakelijkheid en verlies van publiek vertrouwen.

Management Samenvatting

Schakel unified audit logging, mailbox audit logging, SharePoint audit logging en Entra ID audit logging in voor alle relevante Microsoft 365 workloads via het Purview-complianceportaal of PowerShell. Verifieer de configuraties periodiek met audit-logging-enabled.ps1 en configureer export naar Azure Log Analytics of Microsoft Sentinel voor langetermijnarchivering. Hiermee voldoet u aantoonbaar aan eisen uit CIS 5.1.1, BIO 12.04, ISO 27001, AVG en NIS2.