Azure Monitoring: Overzicht Van Monitoring, Observability En Incidentdetectie Voor Nederlandse Overheidsorganisaties

💼 Management Samenvatting

Azure Monitoring vormt het fundament van operationele zichtbaarheid en beveiligingsdetectie binnen moderne cloudomgevingen. Een goed ingericht monitoringlandschap biedt Nederlandse overheidsorganisaties volledige inzicht in de gezondheid, prestaties en beveiligingsstatus van hun Azure-workloads, waardoor operations- en security-teams proactief kunnen reageren op problemen voordat deze impact hebben op burgers, bedrijven en ketenpartners. Zonder een doordachte monitoringstrategie ontstaat echter een gefragmenteerd zicht op de omgeving waarin incidenten te laat worden ontdekt, root cause analyses onmogelijk zijn door ontbrekende logdata, en compliance-vereisten rond logging en monitoring niet kunnen worden aangetoond.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
180u (tech: 80u)
Van toepassing op:
Azure Tenant
Azure Subscriptions
Hybride omgevingen

Veel Nederlandse overheidsorganisaties hebben Azure Monitor en gerelateerde services geïmplementeerd, maar missen een samenhangende monitoringstrategie die alle aspecten van observability afdekt. In de praktijk zien we vaak dat Log Analytics workspaces ad-hoc worden aangemaakt zonder centrale governance, dat diagnostische instellingen niet consistent zijn geconfigureerd waardoor belangrijke signalen ontbreken, dat alertregels niet zijn afgestemd op businesskritieke processen waardoor incidenten te laat worden gesignaleerd, en dat retentie-instellingen niet voldoen aan wettelijke bewaarplichten zoals vastgelegd in de Archiefwet. Deze fragmentatie leidt tot blinde vlekken in monitoring, verhoogde risico's op niet-gedetecteerde beveiligingsincidenten, moeilijk aantoonbare compliance en onnodige kosten door inefficiënte dataopslag. Bovendien ontbreekt vaak een centraal overzicht van welke workloads worden gemonitord, welke configuraties actief zijn en hoe monitoring wordt gebruikt voor incidentdetectie en service level management.

PowerShell Modules Vereist
Primary API: Azure Monitor, Log Analytics, Application Insights
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.Monitor, Az.OperationalInsights, Az.ApplicationInsights, Az.Resources

Implementatie

Dit index-artikel fungeert als centrale verzamelplaats voor alle monitoring-gerelateerde artikelen binnen het Azure-domein van de 'Nederlandse Baseline voor Veilige Cloud'. We behandelen de belangrijkste monitoring-services en -concepten die relevant zijn voor Nederlandse overheidsorganisaties, beschrijven hoe deze worden vertaald naar concrete Azure-configuraties en laten zien hoe organisaties een volwassen monitoring- en observability-raamwerk kunnen opzetten. Het artikel verbindt specifieke monitoring-artikelen zoals Log Analytics workspace-configuratie, alert rules deployment, Application Insights setup, Network Watcher configuratie en security monitoring, en biedt handvatten voor governance, kostenbeheersing en continue verbetering. Daarnaast beschrijft het artikel hoe monitoring wordt gebruikt voor incidentdetectie, performance management, compliance-rapportage en security operations.

Het monitoring-landschap voor Nederlandse overheidsorganisaties in Azure

Azure Monitoring omvat een breed spectrum aan services en mogelijkheden die organisaties helpen om volledige zichtbaarheid te krijgen op hun cloudomgeving. Azure Monitor vormt het centrale platform voor het verzamelen, analyseren en reageren op telemetrie uit Azure-resources, applicaties en workloads. Log Analytics workspaces fungeren als centrale opslagplaats voor logdata, metrische gegevens en custom queries die operations- en security-teams gebruiken voor troubleshooting, trendanalyse en incidentdetectie. Application Insights biedt diepgaande applicatiemonitoring met end-to-end tracing, performance insights en user experience analytics. Network Watcher levert netwerkdiagnostiek en monitoring voor Azure-netwerkconnectiviteit. Azure Monitor Metrics biedt real-time prestatie-indicatoren voor resources. En Azure Monitor Alerts vertaalt signalen naar actiegerichte notificaties die aansluiten op incidentresponse-processen.

Voor Nederlandse overheidsorganisaties is monitoring niet alleen een technische noodzaak, maar ook een compliance-vereiste. De Baseline Informatiebeveiliging Overheid (BIO) vereist dat organisaties logging en monitoring inrichten voor kritieke systemen en processen, zodat beveiligingsincidenten tijdig worden gedetecteerd en opgevolgd. De NIS2 richtlijn stelt specifieke eisen aan monitoring en detectie van cybersecurity-incidenten voor essentiële en belangrijke entiteiten. De Archiefwet verplicht organisaties om bepaalde logdata te bewaren voor audit- en verantwoordingsdoeleinden. En ISO 27001 vereist continue monitoring van beveiligingsgebeurtenissen en incidenten. Een effectieve monitoringstrategie integreert daarom technische observability met compliance-vereisten, zodat organisaties niet alleen operationele zichtbaarheid hebben, maar ook kunnen aantonen dat monitoring op orde is richting auditors en toezichthouders.

Een belangrijk aspect van Azure Monitoring voor Nederlandse overheidsorganisaties is data residency en soevereiniteit. Logdata kan gevoelige informatie bevatten over gebruikers, processen en beveiligingsgebeurtenissen, en moet daarom worden behandeld in overeenstemming met de AVG en andere privacywetgeving. Microsoft biedt de EU Data Boundary die garandeert dat klantgegevens binnen de Europese Unie blijven, wat essentieel is voor compliance. Daarnaast is het belangrijk om retentie-instellingen af te stemmen op wettelijke bewaarplichten: sommige logdata moet jarenlang worden bewaard voor auditdoeleinden, terwijl andere data na korte tijd kan worden verwijderd om privacyrisico's te beperken. Een doordachte monitoringstrategie maakt deze afwegingen expliciet en vertaalt ze naar concrete configuraties voor Log Analytics workspaces, diagnostische instellingen en retentiebeleid.

Implementatieframework: van observability naar actie

Het implementeren van een volwassen monitoring-raamwerk in Azure begint met het definiëren van wat er moet worden gemonitord en waarom. Dit proces start bij een grondige analyse van businesskritieke processen en de onderliggende Azure-resources die deze ondersteunen. Voor een Nederlandse overheidsorganisatie betekent dit bijvoorbeeld: welke diensten zijn absoluut beschikbaar moeten blijven – denk aan burgerzaken, omgevingsvergunningen, uitkeringssystemen of meldkamers – en welke Azure-resources en -platformdiensten dragen daar direct aan bij? Vanuit deze businesskant bepaalt u vervolgens welke gebeurtenissen zo belangrijk zijn dat zij altijd een alert moeten genereren: bijvoorbeeld mislukte back-ups, uitval van een cluster, afwijkende prestaties, mislukte authenticaties op beheerdersaccounts of uitschakeling van belangrijke beveiligingsfuncties. Dit voorkomt dat u willekeurig monitoring aanzet op basis van technische mogelijkheden in plaats van echte informatiebehoefte.

Vervolgens wordt deze informatiebehoefte vertaald naar concrete Azure-configuraties. Log Analytics workspaces worden ingericht met een doordachte structuur: centrale workspaces voor tenant-brede logging, specifieke workspaces voor gevoelige workloads of compliance-vereisten, en duidelijke naamgeving en tagging voor governance. Diagnostische instellingen worden geconfigureerd voor alle kritieke resources om platformlogs, metrische gegevens en resource-specifieke telemetrie te verzamelen. Application Insights wordt geïmplementeerd voor businesskritieke applicaties om end-to-end tracing en performance monitoring te bieden. Alertregels worden ontworpen op basis van risico's en business requirements, met duidelijke drempelwaarden, aggregatieperioden en gekoppelde action groups die aansluiten op incidentresponse-processen. En Network Watcher wordt geconfigureerd voor netwerkdiagnostiek en security monitoring.

Een volwassen monitoring-implementatie gaat verder dan alleen technische configuraties. Het omvat ook organisatorische processen: wie is verantwoordelijk voor monitoring, hoe worden alerts opgevolgd, hoe vaak worden monitoring-configuraties gereviewd, en hoe wordt gerapporteerd richting bestuur en toezichthouders? Deze processen moeten worden vastgelegd in procedures en geïntegreerd in de reguliere governance- en changeprocessen. Geautomatiseerde monitoring-rapportages, dashboards en alerts zorgen ervoor dat monitoring niet wordt vergeten in de dagelijkse operatie, maar continu wordt bewaakt en verbeterd. Door monitoring expliciet te koppelen aan incidentresponse, security operations en service level management ontstaat een proactieve cultuur waarin problemen snel worden gesignaleerd en opgelost, in plaats van reactief na incidenten of tijdens audits.

Azure Monitor Services en hun toepassing

Azure Monitor vormt het centrale platform voor observability in Azure. Het verzamelt telemetrie uit verschillende bronnen: platformlogs van Azure-resources (zoals Activity Log, Resource Logs), metrische gegevens over resourceprestaties, applicatietelemetrie via Application Insights, en custom logs van on-premises systemen of externe bronnen. Deze data wordt opgeslagen in Log Analytics workspaces waar het kan worden geanalyseerd met KQL (Kusto Query Language), gevisualiseerd in dashboards, en gebruikt voor alerting en automation. Azure Monitor biedt ook ingebouwde workbooks en oplossingen voor specifieke scenario's, zoals VM insights voor virtuele machines, Container insights voor Kubernetes-workloads, en Network insights voor netwerkmonitoring. Voor Nederlandse overheidsorganisaties is het belangrijk om Azure Monitor te configureren met aandacht voor data residency, retentie-instellingen en toegangscontrole, zodat logdata wordt bewaard in overeenstemming met compliance-vereisten en alleen geautoriseerde personen toegang hebben tot gevoelige informatie.

Log Analytics workspaces zijn de centrale opslagplaats voor logdata in Azure. Een doordachte workspace-architectuur is essentieel voor governance, kostenbeheersing en compliance. Organisaties kunnen kiezen voor een centrale workspace-architectuur waarin alle logdata wordt verzameld in één of enkele centrale workspaces, of voor een gedistribueerde aanpak met workspaces per workload, omgeving of compliance-vereiste. Beide benaderingen hebben voor- en nadelen: centrale workspaces bieden betere cross-workload analyse en kostenbesparingen door gedeelde resources, terwijl gedistribueerde workspaces betere isolatie en compliance-controle bieden. Voor Nederlandse overheidsorganisaties adviseren we vaak een hybride aanpak: centrale workspaces voor algemene platformlogging en security monitoring, en specifieke workspaces voor gevoelige workloads of compliance-vereisten. Belangrijk is dat retentie-instellingen worden afgestemd op wettelijke bewaarplichten: sommige logdata moet jarenlang worden bewaard voor auditdoeleinden, terwijl andere data na korte tijd kan worden verwijderd om privacyrisico's te beperken.

Application Insights biedt diepgaande applicatiemonitoring voor cloud-native en hybride applicaties. Het verzamelt telemetrie over applicatieprestaties, gebruikerservaringen, afhankelijkheden en beveiligingsgebeurtenissen, waardoor developers en operations-teams proactief kunnen reageren op problemen voordat gebruikers impact ervaren. Application Insights ondersteunt verschillende programmeertalen en frameworks, biedt end-to-end distributed tracing voor microservices-architecturen, en integreert met Azure DevOps voor continuous monitoring in CI/CD-pipelines. Voor Nederlandse overheidsorganisaties is het belangrijk om Application Insights te configureren met aandacht voor privacy: gevoelige gegevens zoals burgerservicenummers of persoonsgegevens moeten worden gemaskerd in telemetrie, sampling moet worden geconfigureerd om kosten te beheersen zonder kritieke signalen te verliezen, en retentie-instellingen moeten worden afgestemd op AVG-vereisten. Het artikel over Application Insights configuratie beschrijft deze aspecten in detail.

Azure Monitor Alerts vertalen signalen uit logs, metrische gegevens en applicatietelemetrie naar actiegerichte notificaties. Alertregels kunnen worden gebaseerd op metrische drempelwaarden (bijvoorbeeld CPU > 80% gedurende 5 minuten), logquery-resultaten (bijvoorbeeld meer dan X mislukte aanmeldingen binnen Y minuten), of Activity Log-gebeurtenissen (bijvoorbeeld het uitschakelen van een kritieke resource). Alerts worden gekoppeld aan action groups die notificaties versturen via e-mail, SMS, Teams, webhooks of ITSM-systemen, en kunnen worden gebruikt om automation runbooks te triggeren voor geautomatiseerde remediatie. Voor Nederlandse overheidsorganisaties is het belangrijk om alertregels te ontwerpen op basis van risico's en business requirements, met duidelijke eigenaarschap en escalatieroutes, zodat incidenten tijdig worden opgepikt en opgevolgd. Het artikel over alert rules deployment beschrijft hoe u een doordachte set alertregels ontwerpt, implementeert en beheert.

Governance en relatie met andere monitoring-artikelen

Monitoring in Azure is geen geïsoleerde discipline, maar moet worden ingebed in een breder governance-raamwerk dat enterprise architectuur, risicomanagement, security operations en change management met elkaar verbindt. Zonder duidelijke governance ontstaat het risico dat monitoring wordt gezien als een technische verplichting die vooral tijdens incidenten belangrijk is, in plaats van een integraal onderdeel van de cloudstrategie. Een effectief governance-model benoemt daarom expliciete rollen en verantwoordelijkheden: wie is eindverantwoordelijk voor monitoring (vaak de CISO of operations manager), wie beheert Log Analytics workspaces en monitoring-configuraties (vaak een cloud architect of monitoring specialist), wie analyseert alerts en incidenten (vaak het SOC of operations team), en wie rapporteert richting bestuur en toezichthouders? Deze rollen worden vertaald naar concrete taken en processen die vastgelegd worden in governance-documenten, zodat zij organisatiebreed herkenbaar zijn.

Dit index-artikel moet expliciet worden gelezen in samenhang met andere monitoring-artikelen binnen de 'Nederlandse Baseline voor Veilige Cloud'. Het artikel over Log Analytics workspace-configuratie beschrijft hoe u workspaces ontwerpt, implementeert en beheert met aandacht voor governance, kostenbeheersing en compliance. Het artikel over alert rules deployment beschrijft hoe u een doordachte set alertregels ontwerpt, implementeert en beheert voor kritieke workloads. Het artikel over Application Insights configuratie behandelt applicatiemonitoring met aandacht voor privacy, kostenbeheersing en performance. Het artikel over Network Watcher configuratie beschrijft netwerkdiagnostiek en security monitoring. Het artikel over security monitoring beschrijft hoe monitoring wordt gebruikt voor beveiligingsdetectie en incidentresponse. Samen vormen deze artikelen een compleet beeld: dit index-artikel schetst de overkoepelende lijnen en het governance-kader, terwijl de deelartikelen verdieping bieden op specifieke monitoring-aspecten en technische implementaties.

Voor auditors en toezichthouders is vooral van belang dat de samenhang tussen monitoring-beleid, technische configuraties, alerting en incidentresponse aantoonbaar is. Dat betekent dat u niet alleen monitoring-documenten en procesbeschrijvingen beschikbaar heeft, maar ook concreet kunt laten zien welke Log Analytics workspaces zijn ingericht, welke diagnostische instellingen actief zijn, welke alertregels zijn geconfigureerd, hoe vaak monitoring-configuraties worden gereviewd en welke verbeteracties zijn ondernomen. De in dit domein beschreven PowerShell-scripts – waaronder het index-script bij dit artikel en de scripts voor specifieke monitoring-aspecten – helpen om deze informatie snel en reproduceerbaar te verzamelen. Door hun output te koppelen aan dashboards en rapportages wordt monitoring niet beperkt tot papieren documenten, maar ondersteund door actuele operationele data die aantoonbaar maakt dat het monitoring-raamwerk daadwerkelijk wordt nageleefd, gemonitord en verbeterd. Dit vormt de basis voor vertrouwen bij toezichthouders en het bestuur, en helpt om monitoring te positioneren als een proactieve, waarde-toevoegende activiteit in plaats van een reactieve, lastige verplichting.

Monitoring, rapportage en continue verbetering

Gebruik PowerShell-script index.ps1 (functie Invoke-Monitoring) – Geeft een overzicht van de monitoring-status van de Azure-omgeving, inclusief Log Analytics workspaces, diagnostische instellingen, alertregels en belangrijke monitoring-indicatoren..

Monitoring is geen eenmalige activiteit, maar vereist continue monitoring en rapportage om te verifiëren dat de Azure-omgeving blijft voldoen aan de gestelde observability-vereisten. Azure Monitor en Log Analytics leveren gedetailleerde informatie over de gezondheid, prestaties en beveiligingsstatus van workloads, met specifieke dashboards en workbooks voor verschillende scenario's. Door deze gegevens te combineren in centrale dashboards (bijvoorbeeld met Azure Monitor workbooks of Power BI) ontstaat een actueel beeld van de monitoring-status per domein, workload en eigenaar. Voor bestuur en directie zijn vooral trendinformatie, grote afwijkingen en de relatie met risico's relevant; voor operationele teams zijn detailoverzichten van alerts, performance-problemen en ontbrekende configuraties essentieel.

Effectieve monitoring-rapportage gaat verder dan het simpelweg verzamelen van technische metingen. Het moet ook de context bieden die nodig is voor bestuurlijke besluitvorming en verantwoording richting toezichthouders. Dat betekent dat rapportages niet alleen laten zien hoe de huidige situatie is, maar ook welke verbeteringen in de afgelopen periode zijn doorgevoerd, welke rest-risico's bewust zijn geaccepteerd met motivatie, en welke acties nog openstaan om monitoring verder te verbeteren. Voor Nederlandse overheidsorganisaties is het verstandig om een vaste rapportagecyclus af te spreken, bijvoorbeeld kwartaalrapportages over de ontwikkeling van monitoring-dekking, aantallen alerts en incidenten, doorgevoerde verbeteracties en openstaande risico's. Deze rapportages worden besproken in governance-overleggen met CISO, operations manager en bestuur, en vormen de basis voor besluitvorming over aanvullende investeringen, prioritering van verbeteracties of acceptatie van rest-risico's.

Continue verbetering van monitoring vereist een gestructureerde aanpak waarbij bevindingen uit monitoring worden vertaald naar concrete verbeteracties. Ontbrekende diagnostische instellingen moeten worden geconfigureerd, alertregels moeten worden verfijnd op basis van incidenten en false positives, Log Analytics queries moeten worden geoptimaliseerd voor performance en kosten, en monitoring-dashboards moeten worden bijgewerkt om nieuwe workloads en vereisten te reflecteren. Belangrijk is dat verbeteracties worden voorzien van een eigenaar, deadline en prioriteit, en dat de voortgang wordt gemonitord totdat de verbetering is doorgevoerd. Door dit proces expliciet te maken en te koppelen aan het bredere risicomanagement- en changeproces, ontstaat een transparante keten van bevinding → analyse → maatregel → verificatie → rest-risico. Dit sluit rechtstreeks aan bij de eisen uit BIO, ISO 27001 en NIS2 rond continue verbetering en aantoonbaarheid van beheersmaatregelen.

Remediatie en volwassenwording van Azure Monitoring

Gebruik PowerShell-script index.ps1 (functie Invoke-Remediation) – Genereert overzichten van monitoring-hiaten en biedt handvatten voor gerichte verbeteracties om de monitoring-volwassenheid te verhogen..

Remediatie binnen het Azure monitoring-domein betekent in de praktijk dat u gaten dicht tussen de gewenste monitoring-status en de werkelijkheid. In veel organisaties bestaan al wel beleidsdocumenten over logging en monitoring, maar ontbreekt concrete vastlegging van hoe deze worden vertaald naar Azure-configuraties, welke Log Analytics workspaces daadwerkelijk zijn ingericht, welke diagnostische instellingen actief zijn, en hoe monitoring wordt gemonitord en verbeterd. Het index-script ondersteunt remediatie door automatisch te inventariseren waar monitoring-vereisten niet worden nageleefd, waar belangrijke diagnostische instellingen ontbreken, waar alertregels niet zijn geconfigureerd voor kritieke workloads, en waar documentatie verouderd of incompleet is. Op basis van deze inventarisatie kunnen gerichte verbeteracties worden gepland en uitgevoerd, waarbij prioriteit wordt gegeven aan de meest kritieke hiaten die de grootste impact hebben op risico's en observability.

Een volwassen Azure monitoring-raamwerk groeit stap voor stap door continue verbetering. Na elke monitoringsronde worden de belangrijkste verbeterpunten vastgelegd, van een eigenaar voorzien en ingepland in het reguliere change- of verbeterportfolio. Denk aan het implementeren van ontbrekende diagnostische instellingen, het configureren van aanvullende alertregels voor kritieke workloads, het optimaliseren van Log Analytics queries voor performance en kosten, het verbeteren van monitoring-dashboards en rapportages, het actualiseren van monitoring-documentatie, of het invoeren van geautomatiseerde remediation workflows. Door de resultaten van het index-script te combineren met de uitkomsten van gespecialiseerde scripts voor specifieke monitoring-aspecten ontstaat een integraal beeld van de voortgang. Uiteindelijk wordt Azure monitoring zo niet alleen een set van technische configuraties en processen, maar een aantoonbaar beheerst en verantwoord ingericht raamwerk dat continu wordt geëvalueerd en verbeterd om te blijven voldoen aan veranderende eisen, dreigingen en regelgeving.

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 Azure Monitoring-status .DESCRIPTION Geeft een samenvattend beeld van de monitoring-status van de Azure-omgeving, inclusief Log Analytics workspaces, diagnostische instellingen, alertregels en belangrijke monitoring-indicatoren. Ondersteunt het gericht identificeren en dichten van monitoring-hiaten. .NOTES Filename: index.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-27 Last Modified: 2025-01-27 Version: 1.0 Related JSON: content/azure/monitoring/index.json .LINK https://github.com/[org]/m365-tenant-best-practise .EXAMPLE .\index.ps1 -Monitoring Toont een samenvattend overzicht van Azure monitoring-status en belangrijke indicatoren. .EXAMPLE .\index.ps1 -Remediation Genereert een overzicht van monitoring-hiaten en biedt handvatten voor verbeteracties. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Monitor, Az.OperationalInsights, Az.Resources [CmdletBinding()] param( [Parameter(HelpMessage = "Voer een samenvattende monitoring uit van de Azure monitoring-status.")] [switch]$Monitoring, [Parameter(HelpMessage = "Genereer remediatie-overzichten en handvatten voor monitoring-verbeteringen.")] [switch]$Remediation, [Parameter(HelpMessage = "Toon welke acties zouden worden uitgevoerd zonder daadwerkelijk te wijzigen.")] [switch]$WhatIf ) $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-MonitoringInventory { <# .SYNOPSIS Stelt een overzicht op van Azure monitoring-gerelateerde JSON- en PS1-bestanden. .OUTPUTS PSCustomObject met aantallen en details. #> [CmdletBinding()] param() $repoRoot = Get-RepositoryRoot $contentRoot = Join-Path $repoRoot "content\azure\monitoring" $codeRoot = Join-Path $repoRoot "code\azure\monitoring" $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 Test-AzureConnection { <# .SYNOPSIS Controleert of er een actieve Azure-verbinding bestaat. .OUTPUTS Boolean: $true als verbonden, anders $false #> [CmdletBinding()] param() try { $context = Get-AzContext -ErrorAction Stop if ($context) { Write-Verbose "Azure-verbinding actief: $($context.Account.Id) in tenant $($context.Tenant.Id)" return $true } return $false } catch { Write-Verbose "Geen actieve Azure-verbinding: $_" return $false } } function Get-AzureMonitoringStatus { <# .SYNOPSIS Inventariseert de monitoring-status van de Azure-omgeving. .OUTPUTS PSCustomObject met monitoring-status. #> [CmdletBinding()] param() $isConnected = Test-AzureConnection if (-not $isConnected) { Write-Warning "Geen actieve Azure-verbinding. Alleen repository-inventarisatie wordt uitgevoerd." return [pscustomobject]@{ AzureConnected = $false Subscriptions = 0 LogAnalyticsWorkspaces = 0 DiagnosticSettings = 0 AlertRules = 0 ApplicationInsights = 0 } } try { Write-Verbose "Inventariseren van Azure monitoring-status..." $subscriptions = @() try { $subscriptions = Get-AzSubscription -ErrorAction SilentlyContinue | Where-Object { $_.State -eq 'Enabled' } } catch { Write-Verbose "Kon subscriptions niet ophalen: $_" } $totalWorkspaces = 0 $totalDiagnosticSettings = 0 $totalAlertRules = 0 $totalApplicationInsights = 0 foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id -ErrorAction SilentlyContinue | Out-Null try { # Haal Log Analytics workspaces op $workspaces = Get-AzOperationalInsightsWorkspace -ErrorAction SilentlyContinue $totalWorkspaces += $workspaces.Count # Haal Application Insights resources op $appInsights = Get-AzApplicationInsights -ErrorAction SilentlyContinue $totalApplicationInsights += $appInsights.Count } catch { Write-Verbose "Kon monitoring-resources voor subscription '$($sub.Name)' niet ophalen: $_" } try { # Probeer diagnostische instellingen te tellen (vereist per resource type) $resources = Get-AzResource -ErrorAction SilentlyContinue | Select-Object -First 100 foreach ($resource in $resources) { try { $diagSettings = Get-AzDiagnosticSetting -ResourceId $resource.ResourceId -ErrorAction SilentlyContinue if ($diagSettings) { $totalDiagnosticSettings++ } } catch { # Sommige resource types ondersteunen geen diagnostische instellingen } } } catch { Write-Verbose "Kon diagnostische instellingen voor subscription '$($sub.Name)' niet ophalen: $_" } try { # Haal alertregels op (metrische alerts v2) $metricAlerts = Get-AzMetricAlertRuleV2 -ErrorAction SilentlyContinue $logAlerts = Get-AzScheduledQueryRule -ErrorAction SilentlyContinue $totalAlertRules += ($metricAlerts.Count + $logAlerts.Count) } catch { Write-Verbose "Kon alertregels voor subscription '$($sub.Name)' niet ophalen: $_" } } return [pscustomobject]@{ AzureConnected = $true Subscriptions = $subscriptions.Count LogAnalyticsWorkspaces = $totalWorkspaces DiagnosticSettings = $totalDiagnosticSettings AlertRules = $totalAlertRules ApplicationInsights = $totalApplicationInsights } } catch { Write-Warning "Fout bij inventariseren van Azure monitoring-status: $_" return [pscustomobject]@{ AzureConnected = $false Subscriptions = 0 LogAnalyticsWorkspaces = 0 DiagnosticSettings = 0 AlertRules = 0 ApplicationInsights = 0 } } } function Invoke-Monitoring { <# .SYNOPSIS Voert een samenvattende monitoring uit van Azure monitoring-status. .OUTPUTS PSCustomObject met overzichtsresultaten. #> [CmdletBinding()] param() Write-Host "`nMonitoring: Azure Monitoring overzicht" -ForegroundColor Yellow Write-Host "=======================================" -ForegroundColor Yellow $inventory = Get-MonitoringInventory $azureStatus = Get-AzureMonitoringStatus Write-Host "`nRepository-root: $($inventory.RepositoryRoot)" -ForegroundColor Cyan Write-Host "Totaal Azure monitoring controls (JSON/PS1-combinaties): $($inventory.TotalControls)" -ForegroundColor Cyan Write-Host "Volledig gekoppeld (JSON + PS1): $($inventory.WithJsonAndPs1)" -ForegroundColor Cyan if ($azureStatus.AzureConnected) { Write-Host "`nAzure monitoring-status:" -ForegroundColor Cyan Write-Host " Actieve subscriptions: $($azureStatus.Subscriptions)" -ForegroundColor Gray Write-Host " Log Analytics workspaces: $($azureStatus.LogAnalyticsWorkspaces)" -ForegroundColor Gray Write-Host " Diagnostische instellingen (sample): $($azureStatus.DiagnosticSettings)" -ForegroundColor Gray Write-Host " Alertregels: $($azureStatus.AlertRules)" -ForegroundColor Gray Write-Host " Application Insights resources: $($azureStatus.ApplicationInsights)" -ForegroundColor Gray if ($azureStatus.LogAnalyticsWorkspaces -eq 0) { Write-Host " ⚠️ Geen Log Analytics workspaces gevonden. Overweeg het inrichten van centrale workspaces voor logging." -ForegroundColor Yellow } if ($azureStatus.AlertRules -eq 0) { Write-Host " ⚠️ Geen alertregels gevonden. Overweeg het configureren van alerts voor kritieke workloads." -ForegroundColor Yellow } } else { Write-Host "`n⚠️ Geen actieve Azure-verbinding. Verbind met Connect-AzAccount voor volledige monitoring-status." -ForegroundColor Yellow } 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 Azure monitoring-artikelen hebben zowel JSON als PS1." -ForegroundColor Green } else { Write-Host "`n⚠️ Er zijn nog hiaten in de JSON/PS1-koppeling voor Azure monitoring." -ForegroundColor Yellow Write-Host " Gebruik -Remediation om gericht met deze hiaten aan de slag te gaan." -ForegroundColor Yellow } # Monitoring evaluatie $isCompliant = $true if ($azureStatus.AzureConnected) { if ($azureStatus.LogAnalyticsWorkspaces -eq 0) { $isCompliant = $false Write-Host "`n⚠️ Geen Log Analytics workspaces gedetecteerd. Monitoring vereist centrale logging-infrastructuur." -ForegroundColor Yellow } if ($azureStatus.AlertRules -eq 0) { Write-Host "⚠️ Geen alertregels gevonden. Overweeg het implementeren van alerts voor kritieke workloads." -ForegroundColor Yellow } } return [pscustomobject]@{ Inventory = $inventory AzureStatus = $azureStatus IsCompliant = $isCompliant } } function Invoke-Remediation { <# .SYNOPSIS Ondersteunt remediatie door monitoring-hiaten inzichtelijk te maken en handvatten te bieden voor verbeteracties. .OUTPUTS PSCustomObject met remediatieadvies. #> [CmdletBinding()] param() Write-Host "`nRemediatie: Azure Monitoring verbetering" -ForegroundColor Yellow Write-Host "===========================================" -ForegroundColor Yellow $inventory = Get-MonitoringInventory $azureStatus = Get-AzureMonitoringStatus $repoRoot = $inventory.RepositoryRoot $actions = @() Write-Host "`nMonitoring-hiaten analyse:" -ForegroundColor Cyan if ($azureStatus.AzureConnected) { if ($azureStatus.LogAnalyticsWorkspaces -eq 0) { $action = [pscustomobject]@{ Priority = "High" Issue = "Geen Log Analytics workspaces gevonden" Count = 0 Recommendation = "Richt centrale Log Analytics workspaces in voor tenant-brede logging en monitoring." } $actions += $action Write-Host " ❌ $($action.Issue)" -ForegroundColor Red Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if ($azureStatus.AlertRules -eq 0) { $action = [pscustomobject]@{ Priority = "High" Issue = "Geen alertregels gevonden" Count = 0 Recommendation = "Configureer alertregels voor kritieke workloads en beveiligingsgebeurtenissen." } $actions += $action Write-Host " ⚠️ $($action.Issue)" -ForegroundColor Yellow Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if ($azureStatus.DiagnosticSettings -lt 10 -and $azureStatus.Subscriptions -gt 0) { $action = [pscustomobject]@{ Priority = "Medium" Issue = "Weinig diagnostische instellingen geconfigureerd" Count = $azureStatus.DiagnosticSettings Recommendation = "Controleer of alle kritieke resources diagnostische instellingen hebben voor logging." } $actions += $action Write-Host " ⚠️ $($action.Issue): $($action.Count) (sample)" -ForegroundColor Yellow Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } } else { Write-Host " ⚠️ Verbind met Azure voor gedetailleerde monitoring-analyse" -ForegroundColor Yellow } if ($inventory.MissingJson.Count -gt 0 -or $inventory.MissingScripts.Count -gt 0) { Write-Host "`nRepository-hiaten:" -ForegroundColor Cyan Write-Host (" Items zonder JSON: {0}" -f $inventory.MissingJson.Count) -ForegroundColor Cyan Write-Host (" Items zonder script: {0}" -f $inventory.MissingScripts.Count) -ForegroundColor Cyan Write-Host " → Werk deze hiaten bij om het monitoring-raamwerk compleet te maken." -ForegroundColor Gray } Write-Host "`nVolgende stappen:" -ForegroundColor Cyan Write-Host "1. Richt centrale Log Analytics workspaces in voor tenant-brede logging" -ForegroundColor White Write-Host "2. Configureer diagnostische instellingen voor alle kritieke resources" -ForegroundColor White Write-Host "3. Implementeer alertregels voor kritieke workloads en beveiligingsgebeurtenissen" -ForegroundColor White Write-Host "4. Stel monitoring-dashboards en rapportages op" -ForegroundColor White Write-Host "5. Voer regelmatige monitoring-reviews uit" -ForegroundColor White return [pscustomobject]@{ Actions = $actions Inventory = $inventory AzureStatus = $azureStatus } } try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Azure Monitoring 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 monitoring check via monitoring $result = Invoke-Monitoring if ($result.IsCompliant -and ($result.Inventory.MissingJson.Count -eq 0) -and ($result.Inventory.MissingScripts.Count -eq 0)) { Write-Host "`n✅ COMPLIANT" -ForegroundColor Green exit 0 } else { Write-Host "`n❌ NON-COMPLIANT" -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: $_" exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder een volwassen monitoring-raamwerk in Azure ontstaat het risico dat organisaties niet kunnen aantonen dat zij voldoen aan BIO, NIS2 en andere relevante wet- en regelgeving rond logging en monitoring. Dit kan leiden tot niet-gedetecteerde beveiligingsincidenten, langdurige uitval van kritieke diensten, reputatieschade, verlies van vertrouwen bij burgers en bestuurlijke aansprakelijkheid bij incidenten of datalekken.

Management Samenvatting

Azure Monitoring vereist een samenhangend raamwerk dat observability, incidentdetectie en compliance integreert. Dit index-artikel fungeert als centrale verzamelplaats voor monitoring-artikelen en beschrijft governance, implementatie, monitoring en continue verbetering van observability in Azure-omgevingen.