Azure Network: Overzicht Van Netwerkbeveiliging En Connectiviteit Voor Nederlandse Overheidsorganisaties

💼 Management Samenvatting

Azure Network vormt het fundament van veilige cloudconnectiviteit en netwerksegmentatie binnen moderne Azure-omgevingen. Een goed ingericht netwerklandschap biedt Nederlandse overheidsorganisaties gecontroleerde toegang, segmentatie van workloads en bescherming tegen netwerkgerelateerde bedreigingen, waardoor een solide basis wordt gecreëerd voor Zero Trust-architecturen en compliance met BIO, NIS2 en ISO 27001. Zonder een doordachte netwerkarchitectuur ontstaat echter een vlak netwerk waarin laterale beweging eenvoudig is, publieke endpoints overal beschikbaar zijn, en netwerkverkeer niet wordt geïnspecteerd, wat aanzienlijke beveiligingsrisico's creëert.

Aanbeveling
IMPLEMENT
Risico zonder
Critical
Risk Score
9/10
Implementatie
220u (tech: 100u)
Van toepassing op:
Azure Tenant
Azure Subscriptions
Hybride omgevingen
Hub-Spoke Architectuur

Veel Nederlandse overheidsorganisaties hebben Azure Virtual Networks en netwerkbeveiligingscomponenten geïmplementeerd, maar missen een samenhangende netwerkstrategie die alle aspecten van netwerkbeveiliging en connectiviteit afdekt. In de praktijk zien we vaak dat Virtual Networks ad-hoc worden aangemaakt zonder centrale governance, dat Network Security Groups niet consistent zijn geconfigureerd waardoor netwerksegmentatie onvolledig is, dat Azure Firewall niet is geïmplementeerd waardoor verkeer niet wordt geïnspecteerd, dat Private Endpoints niet worden gebruikt waardoor gevoelige services via publieke endpoints toegankelijk zijn, en dat hub-spoke topologieën niet zijn geïmplementeerd waardoor workloads niet logisch zijn gescheiden. Deze fragmentatie leidt tot verhoogde aanvalsoppervlakken, moeilijkere netwerkmonitoring, en moeilijk aantoonbare compliance. Bovendien ontbreekt vaak een centraal overzicht van welke netwerkconfiguraties actief zijn, hoe netwerksegmentatie is ingericht, en hoe netwerkbeveiliging wordt gemonitord en verbeterd.

PowerShell Modules Vereist
Primary API: Azure Network Management API
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.Network, Az.Resources

Implementatie

Dit index-artikel fungeert als centrale verzamelplaats voor alle netwerk-gerelateerde artikelen binnen het Azure-domein van de 'Nederlandse Baseline voor Veilige Cloud'. We behandelen de belangrijkste netwerkcomponenten en -concepten die relevant zijn voor Nederlandse overheidsorganisaties, beschrijven hoe deze worden vertaald naar concrete Azure-configuraties en laten zien hoe organisaties een volwassen netwerkbeveiligings- en connectiviteitsraamwerk kunnen opzetten. Het artikel verbindt specifieke netwerk-artikelen zoals Virtual Network-configuratie, Network Security Groups, Azure Firewall-implementatie, Private Endpoints-configuratie, hub-spoke architectuur, DDoS Protection, en Network Watcher, en biedt handvatten voor governance, netwerkmonitoring en continue verbetering. Daarnaast beschrijft het artikel hoe netwerkbeveiliging wordt gebruikt voor segmentatie, verkeersinspectie, toegangscontrole en compliance-rapportage.

Het netwerklandschap voor Nederlandse overheidsorganisaties in Azure

Azure Network omvat een breed spectrum aan services en mogelijkheden die organisaties helpen om veilige, gesegmenteerde en goed beheerde netwerkconnectiviteit te realiseren in de cloud. Virtual Networks (VNets) vormen de fundamentele bouwstenen voor netwerkisolatie en segmentatie, waarbij elke workload wordt geplaatst in een logisch gescheiden netwerksegment. Network Security Groups (NSGs) functioneren als virtuele firewalls op subnet- en NIC-niveau, waardoor verkeer wordt gefilterd op basis van bron- en doeladressen, poorten en protocollen. Azure Firewall biedt gecentraliseerde verkeersinspectie en filtering op hub-niveau, waardoor alle egress-verkeer wordt gecontroleerd en bedreigingsinformatie wordt toegepast. Private Endpoints maken Azure Platform-as-a-Service services toegankelijk via privé IP-adressen binnen Virtual Networks, waardoor publieke endpoints worden geëlimineerd en netwerkverkeer binnen het privénetwerk blijft. Hub-spoke topologieën creëren logische scheiding tussen gecentraliseerde services (hub) en workloads (spokes), terwijl VNet Peering de connectiviteit tussen deze segmenten faciliteert.

Voor Nederlandse overheidsorganisaties is netwerkbeveiliging niet alleen een technische noodzaak, maar ook een compliance-vereiste. De Baseline Informatiebeveiliging Overheid (BIO) vereist dat organisaties netwerksegmentatie implementeren voor kritieke systemen en processen, zodat ongeautoriseerde toegang en laterale beweging worden voorkomen. De NIS2 richtlijn stelt specifieke eisen aan netwerkbeveiliging en bescherming tegen DDoS-aanvallen voor essentiële en belangrijke entiteiten. ISO 27001 vereist netwerkbeveiligingscontroles voor toegangsbeheer en verkeersfiltering. Een effectieve netwerkstrategie integreert daarom technische netwerkbeveiliging met compliance-vereisten, zodat organisaties niet alleen operationele beveiliging hebben, maar ook kunnen aantonen dat netwerkbeveiliging op orde is richting auditors en toezichthouders.

Een belangrijk aspect van Azure Network voor Nederlandse overheidsorganisaties is de integratie met bestaande on-premises netwerken en hybride connectiviteit. Veel organisaties moeten Azure-workloads verbinden met on-premises systemen via ExpressRoute of VPN-verbindingen, wat vereist dat netwerkarchitecturen rekening houden met routeerbeleid, netwerkadresruimte planning, en beveiligde tunnels. Network Watcher biedt netwerkdiagnostiek en monitoring voor het troubleshooten van connectiviteitsproblemen en het analyseren van netwerkverkeer. Azure Bastion biedt veilige RDP- en SSH-toegang tot virtuele machines zonder dat deze publieke IP-adressen nodig hebben. DDoS Protection Standard beschermt tegen gedistribueerde denial-of-service aanvallen op Azure-services. Een doordachte netwerkstrategie maakt deze aspecten expliciet en vertaalt ze naar concrete configuraties voor Virtual Networks, routing, firewallregels en monitoring.

Implementatieframework: van netwerkarchitectuur naar beveiligde connectiviteit

Het implementeren van een volwassen netwerkraamwerk in Azure begint met het definiëren van de netwerkarchitectuur en segmentatiestrategie. Dit proces start bij een grondige analyse van workloads en hun netwerkvereisten: welke workloads moeten logisch worden gescheiden, welke netwerkverbindingen zijn nodig tussen workloads, welke externe connectiviteit is vereist, en hoe kunnen workloads worden georganiseerd in een hub-spoke topologie? Voor een Nederlandse overheidsorganisatie betekent dit bijvoorbeeld: welke workloads draaien productiedata en moeten daarom strikt gescheiden worden van test- en ontwikkelomgevingen? Welke workloads vereisen internetconnectiviteit en hoe kan dit worden gecentraliseerd via een Azure Firewall in een hub-VNet? Welke Azure Platform-as-a-Service services worden gebruikt en kunnen deze worden afgeschermd met Private Endpoints? Deze vragen vormen de basis voor een netwerkarchitectuur die expliciet maakt welke Virtual Networks worden aangemaakt, hoe deze zijn verbonden via VNet Peering, welke Network Security Groups worden toegepast, en hoe Azure Firewall wordt geconfigureerd voor gecentraliseerde verkeersinspectie.

Vervolgens wordt deze architectuur vertaald naar concrete Azure-configuraties. Hub-spoke topologieën worden geïmplementeerd met een centrale hub-VNet die gecentraliseerde services bevat zoals Azure Firewall, VPN Gateway, en Azure Bastion, en meerdere spoke-VNets die workloads isoleren per omgeving of per toepassing. VNet Peering verbindt hub en spokes met een mesh-topologie waarbij spokes onderling niet direct verbonden zijn. Network Security Groups worden geconfigureerd op subnet-niveau met least-privilege regels die alleen toegestaan verkeer toestaan, waarbij expliciete deny-regels worden vermeden ten gunste van impliciete deny-by-default gedrag. Azure Firewall wordt geïmplementeerd in de hub-VNet met rules voor egress-filtering, FQDN-filtering, en bedreigingsinformatie-integratie. Private Endpoints worden geconfigureerd voor gevoelige Azure-services zoals Storage Accounts, SQL-databases, Key Vault en andere Platform-as-a-Service services. DDoS Protection Standard wordt ingeschakeld voor kritieke workloads en services. En Network Watcher wordt geconfigureerd voor netwerkdiagnostiek en monitoring.

Een volwassen netwerkimplementatie gaat verder dan alleen technische configuraties. Het omvat ook organisatorische processen: wie is verantwoordelijk voor netwerkbeveiliging, hoe worden netwerkwijzigingen beoordeeld en goedgekeurd, hoe vaak worden Network Security Group-regels 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 netwerkmonitoring, dashboards en alerts zorgen ervoor dat netwerkbeveiliging niet wordt vergeten in de dagelijkse operatie, maar continu wordt bewaakt en verbeterd. Door netwerkbeveiliging expliciet te koppelen aan security operations, incidentresponse en compliance-rapportage ontstaat een proactieve cultuur waarin netwerkafwijkingen snel worden gesignaleerd en opgelost, in plaats van reactief na incidenten of tijdens audits.

Azure Network Services en hun toepassing

Virtual Networks vormen de basis van netwerkisolatie in Azure. Elke Virtual Network is een logisch geïsoleerd netwerksegment binnen de Azure-cloud dat een eigen IP-adresruimte heeft, routing-beleid definieert, en DNS-configuratie ondersteunt. Virtual Networks kunnen worden gesegmenteerd in subnetten, waarbij elk subnet een specifieke rol krijgt zoals web-tier, applicatie-tier, of database-tier. Network Security Groups worden toegepast op subnetten of netwerkinterfaces om verkeer te filteren op basis van bron- en doeladressen, poorten en protocollen. Application Security Groups maken het mogelijk om virtuele machines te groeperen op basis van hun functie, waardoor Network Security Group-regels kunnen worden geschreven op basis van toepassingsrollen in plaats van individuele IP-adressen. Voor Nederlandse overheidsorganisaties is het belangrijk om Virtual Networks te ontwerpen met aandacht voor netwerkadresruimte planning, waarbij wordt voorkomen dat IP-adresruimtes overlappen met on-premises netwerken of andere Azure Virtual Networks.

Azure Firewall biedt gecentraliseerde netwerkbeveiliging als een managed cloud firewall-service. Het fungeert als een stateful firewall die verkeer inspecteert en filtert op basis van configuratiebeleid, waarbij bedreigingsinformatie wordt toegepast om bekende kwaadaardige IP-adressen en domeinen te blokkeren. Azure Firewall Premium voegt advanced features toe zoals TLS-inspectie, URL-filtering, en intrusion detection en prevention. Azure Firewall wordt typisch geïmplementeerd in een hub-VNet binnen een hub-spoke topologie, waarbij alle egress-verkeer vanuit spoke-VNets wordt gerouteerd via de firewall voor inspectie en filtering. User-Defined Routes (UDRs) worden gebruikt om verkeer te forceren naar Azure Firewall, waarbij 0.0.0.0/0 routes worden geconfigureerd in spoke-VNets die naar de firewall IP-adres verwijzen. Voor Nederlandse overheidsorganisaties is Azure Firewall essentieel voor het implementeren van Zero Trust-netwerkprinciples waarbij al het verkeer wordt geïnspecteerd en geautoriseerd voordat toegang wordt verleend.

Private Endpoints maken Azure Platform-as-a-Service services toegankelijk via privé IP-adressen binnen Virtual Networks, waardoor publieke endpoints worden geëlimineerd en netwerkverkeer binnen het privénetwerk blijft. Dit is essentieel voor het reduceren van aanvalsoppervlakken en het implementeren van netwerksegmentatie voor gevoelige workloads. Private Endpoints maken gebruik van Azure Private Link, waarbij een privé IP-adres wordt toegewezen aan een Azure-service resource binnen een Virtual Network subnet. Verkeer naar deze privé IP-adres blijft volledig binnen het Microsoft-netwerk en wordt niet blootgesteld aan het publieke internet. Voor Nederlandse overheidsorganisaties zijn Private Endpoints bijzonder belangrijk voor gevoelige services zoals Storage Accounts die persoonsgegevens bevatten, SQL-databases met gevoelige informatie, Key Vault voor secrets management, en andere Platform-as-a-Service services. Het artikel over Private Endpoints beschrijft deze implementatie in detail.

Hub-spoke netwerktopologieën creëren logische scheiding tussen gecentraliseerde services en workloads, terwijl gedeelde services efficiënt worden gedeeld. In een hub-spoke topologie bevat de hub-VNet gecentraliseerde services zoals Azure Firewall, VPN Gateway, ExpressRoute Gateway, en Azure Bastion, terwijl spoke-VNets workloads isoleren per omgeving, per toepassing, of per organisatie-eenheid. VNet Peering verbindt hub en spokes, waarbij peered VNets kunnen communiceren alsof ze onderdeel zijn van hetzelfde netwerk. Hub-spoke topologieën ondersteunen zowel hub-spoke als mesh-peering patronen, waarbij hub-spoke topologieën centrale connectiviteit bieden via de hub, en mesh-topologieën directe connectiviteit tussen alle VNets mogelijk maken. Voor Nederlandse overheidsorganisaties bieden hub-spoke topologieën belangrijke voordelen: gecentraliseerde netwerkbeveiliging via Azure Firewall in de hub, gedeeld gebruik van VPN- en ExpressRoute-verbindingen, gecontroleerde routing tussen workloads, en schaalbare netwerkarchitecturen die kunnen groeien met de organisatie.

Governance en relatie met andere netwerk-artikelen

Netwerkbeveiliging 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 netwerkconfiguraties worden gezien als technische implementaties die vooral tijdens incidenten belangrijk zijn, in plaats van een integraal onderdeel van de cloudstrategie. Een effectief governance-model benoemt daarom expliciete rollen en verantwoordelijkheden: wie is eindverantwoordelijk voor netwerkbeveiliging (vaak de CISO of network architect), wie beheert Virtual Networks en Network Security Groups (vaak een cloud architect of network engineer), wie configureert Azure Firewall-regels (vaak een security architect of network security specialist), 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 netwerk-artikelen binnen de 'Nederlandse Baseline voor Veilige Cloud'. Het artikel over hub-spoke architectuur beschrijft hoe een hub-spoke topologie wordt ontworpen, geïmplementeerd en beheerd met aandacht voor gecentraliseerde services en workload-isolatie. Het artikel over Network Security Groups beschrijft hoe subnet- en NIC-level firewallregels worden geconfigureerd voor netwerksegmentatie. Het artikel over Azure Firewall-implementatie behandelt gecentraliseerde verkeersinspectie en filtering met bedreigingsinformatie. Het artikel over Private Endpoints beschrijft hoe Platform-as-a-Service services worden afgeschermd met privé IP-adressen. Het artikel over DDoS Protection beschrijft bescherming tegen gedistribueerde denial-of-service aanvallen. Het artikel over ExpressRoute configuratie behandelt hybride connectiviteit tussen Azure en on-premises netwerken. 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 netwerk-aspecten en technische implementaties.

Voor auditors en toezichthouders is vooral van belang dat de samenhang tussen netwerkbeveiligingsbeleid, technische configuraties, monitoring en remediatie aantoonbaar is. Dat betekent dat u niet alleen netwerkdocumenten en procesbeschrijvingen beschikbaar heeft, maar ook concreet kunt laten zien welke Virtual Networks zijn ingericht, hoe hub-spoke topologieën zijn geconfigureerd, welke Network Security Group-regels actief zijn, hoe Azure Firewall is geïmplementeerd, welke Private Endpoints zijn geconfigureerd, en hoe netwerkbeveiliging wordt gemonitord en verbeterd. De in dit domein beschreven PowerShell-scripts – waaronder het index-script bij dit artikel en de scripts voor specifieke netwerk-aspecten – helpen om deze informatie snel en reproduceerbaar te verzamelen. Door hun output te koppelen aan dashboards en rapportages wordt netwerkbeveiliging niet beperkt tot papieren documenten, maar ondersteund door actuele operationele data die aantoonbaar maakt dat het netwerkraamwerk daadwerkelijk wordt nageleefd, gemonitord en verbeterd. Dit vormt de basis voor vertrouwen bij toezichthouders en het bestuur, en helpt om netwerkbeveiliging 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 netwerkbeveiligingsstatus van de Azure-omgeving, inclusief Virtual Networks, Network Security Groups, Azure Firewall, Private Endpoints en belangrijke netwerk-indicatoren..

Netwerkbeveiliging is geen eenmalige activiteit, maar vereist continue monitoring en rapportage om te verifiëren dat de Azure-omgeving blijft voldoen aan de gestelde netwerkbeveiligingsvereisten. Azure Network Watcher biedt uitgebreide netwerkdiagnostiek en monitoring mogelijkheden, waaronder packet capture, connection troubleshooters, next hop analysers, en traffic analytics. Traffic Analytics analyseert Network Security Group flow logs om inzicht te geven in verkeerspatronen, verdachte activiteiten en netwerkconnectiviteit. Azure Firewall logs bieden gedetailleerde informatie over toegestaan en geblokkeerd verkeer, bedreigingsinformatie matches, en FQDN-filtering resultaten. Network Security Group flow logs documenteren alle verkeersstromen die Network Security Groups passeren, inclusief toegestaan en geweigerd verkeer. Door deze gegevens te combineren in centrale dashboards (bijvoorbeeld met Azure Monitor workbooks of Power BI) ontstaat een actueel beeld van de netwerkbeveiligingsstatus per Virtual Network, subnet, en workload. Voor bestuur en directie zijn vooral trendinformatie, grote afwijkingen en de relatie met risico's relevant; voor operationele teams zijn detailoverzichten van firewallregels, netwerkconnectiviteit en ontbrekende configuraties essentieel.

Effectieve netwerkbeveiligingsrapportage 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 netwerkbeveiliging verder te verbeteren. Voor Nederlandse overheidsorganisaties is het verstandig om een vaste rapportagecyclus af te spreken, bijvoorbeeld kwartaalrapportages over de ontwikkeling van netwerksegmentatie, aantallen Network Security Group-regels, Azure Firewall-geblokkeerde bedreigingen, doorgevoerde verbeteracties en openstaande risico's. Deze rapportages worden besproken in governance-overleggen met CISO, network architect en bestuur, en vormen de basis voor besluitvorming over aanvullende investeringen, prioritering van verbeteracties of acceptatie van rest-risico's.

Continue verbetering van netwerkbeveiliging vereist een gestructureerde aanpak waarbij bevindingen uit monitoring worden vertaald naar concrete verbeteracties. Ontbrekende Network Security Group-regels moeten worden geconfigureerd, Azure Firewall-regels moeten worden verfijnd op basis van verkeerspatronen en bedreigingsinformatie, Private Endpoints moeten worden geïmplementeerd voor services die nog publieke endpoints gebruiken, en netwerkarchitecturen moeten worden geoptimaliseerd voor betere segmentatie en beveiliging. 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 Network

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

Remediatie binnen het Azure netwerk-domein betekent in de praktijk dat u gaten dicht tussen de gewenste netwerkbeveiligingsstatus en de werkelijkheid. In veel organisaties bestaan al wel beleidsdocumenten over netwerksegmentatie en netwerkbeveiliging, maar ontbreekt concrete vastlegging van hoe deze worden vertaald naar Azure-configuraties, welke Virtual Networks daadwerkelijk zijn ingericht, hoe hub-spoke topologieën zijn geconfigureerd, welke Network Security Group-regels actief zijn, en hoe netwerkbeveiliging wordt gemonitord en verbeterd. Het index-script ondersteunt remediatie door automatisch te inventariseren waar netwerkbeveiligingsvereisten niet worden nageleefd, waar belangrijke netwerkconfiguraties ontbreken, waar Network Security Groups niet consistent zijn geconfigureerd, waar Azure Firewall niet is geïmplementeerd, waar Private Endpoints ontbreken voor gevoelige services, 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 netwerkbeveiliging.

Een volwassen Azure netwerkraamwerk 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 hub-spoke topologieën, het configureren van aanvullende Network Security Group-regels voor betere segmentatie, het implementeren van Azure Firewall voor gecentraliseerde verkeersinspectie, het configureren van Private Endpoints voor gevoelige services, het optimaliseren van netwerkrouting en User-Defined Routes, het verbeteren van netwerkmonitoring en dashboards, het actualiseren van netwerkdocumentatie, of het invoeren van geautomatiseerde remediation workflows. Door de resultaten van het index-script te combineren met de uitkomsten van gespecialiseerde scripts voor specifieke netwerk-aspecten ontstaat een integraal beeld van de voortgang. Uiteindelijk wordt Azure netwerkbeveiliging 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 Monitoring en remediatie voor Azure Network-beveiliging .DESCRIPTION Controleert de netwerkbeveiligingsconfiguratie voor Azure Virtual Networks, Network Security Groups, Azure Firewall, Private Endpoints en andere netwerkcomponenten, identificeert hiaten in netwerksegmentatie en beveiliging, en biedt handvatten voor implementatie. .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/network/index.json .LINK https://github.com/[org]/m365-tenant-best-practise .EXAMPLE .\index.ps1 -Monitoring Toont een overzicht van netwerkbeveiligingsconfiguratie en identificeert hiaten. .EXAMPLE .\index.ps1 -Remediation Genereert een overzicht van netwerkbeveiligingshiaten en biedt handvatten voor implementatie. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Network, Az.Resources [CmdletBinding()] param( [Parameter(HelpMessage = "Voer monitoring uit van de netwerkbeveiligingsconfiguratie en identificeer hiaten.")] [switch]$Monitoring, [Parameter(HelpMessage = "Genereer remediatie-overzichten en handvatten voor netwerkbeveiligingsimplementatie.")] [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 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-NetworkInventory { <# .SYNOPSIS Stelt een overzicht op van Azure Network-gerelateerde JSON- en PS1-bestanden. .OUTPUTS PSCustomObject met aantallen en details. #> [CmdletBinding()] param() $repoRoot = Get-RepositoryRoot $contentRoot = Join-Path $repoRoot "content\azure\network" $codeRoot = Join-Path $repoRoot "code\azure\network" $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 } } $byName[$base].JsonPath = $json.FullName $byName[$base].JsonUpdated = $json.LastWriteTime } 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 } } $byName[$base].ScriptPath = $ps1.FullName $byName[$base].ScriptUpdated = $ps1.LastWriteTime } return [pscustomobject]@{ TotalArticles = $byName.Count ArticlesWithJson = ($byName.Values | Where-Object { $_.JsonPath }).Count ArticlesWithScript = ($byName.Values | Where-Object { $_.ScriptPath }).Count ArticlesComplete = ($byName.Values | Where-Object { $_.JsonPath -and $_.ScriptPath }).Count Details = $byName.Values | Sort-Object Name } } function Get-NetworkSecurityStatus { <# .SYNOPSIS Inventariseert de netwerkbeveiligingsconfiguratiestatus. .OUTPUTS PSCustomObject met netwerkbeveiligingsconfiguratiestatus. #> [CmdletBinding()] param() $azConnected = Test-AzureConnection if (-not $azConnected) { Write-Warning "Geen actieve Azure-verbinding. Verbind met Connect-AzAccount voor netwerkbeveiligingsmonitoring." return [pscustomobject]@{ AzureConnected = $false VirtualNetworks = 0 HubSpokeConfigured = $null NetworkSecurityGroups = 0 NSGsOnSubnets = 0 AzureFirewallDeployed = $null PrivateEndpoints = 0 DDoSProtectionEnabled = $null } } $totalVNets = 0 $totalSubnets = 0 $totalNSGs = 0 $nsgsOnSubnets = 0 $azureFirewallDeployed = $null $totalPrivateEndpoints = 0 $ddosProtectionEnabled = $null $hasHubSpoke = $null try { Write-Verbose "Inventariseren van netwerkbeveiligingsconfiguratie..." $subscriptions = Get-AzSubscription -ErrorAction SilentlyContinue | Where-Object { $_.State -eq 'Enabled' } foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id -ErrorAction SilentlyContinue | Out-Null try { # Haal Virtual Networks op $vnets = Get-AzVirtualNetwork -ErrorAction SilentlyContinue $totalVNets += $vnets.Count foreach ($vnet in $vnets) { $totalSubnets += $vnet.Subnets.Count # Controleer of NSGs zijn toegepast op subnetten foreach ($subnet in $vnet.Subnets) { if ($subnet.NetworkSecurityGroup) { $nsgsOnSubnets++ } } } # Haal Network Security Groups op $nsgs = Get-AzNetworkSecurityGroup -ErrorAction SilentlyContinue $totalNSGs += $nsgs.Count # Controleer Azure Firewall $firewalls = Get-AzFirewall -ErrorAction SilentlyContinue if ($firewalls -and $firewalls.Count -gt 0) { $azureFirewallDeployed = $true Write-Verbose "Azure Firewall gevonden: $($firewalls.Count) firewall(s)" } else { if ($azureFirewallDeployed -eq $null) { $azureFirewallDeployed = $false } } # Haal Private Endpoints op $privateEndpoints = Get-AzPrivateEndpoint -ErrorAction SilentlyContinue $totalPrivateEndpoints += $privateEndpoints.Count # Controleer DDoS Protection (vereist per VNet) foreach ($vnet in $vnets) { if ($vnet.EnableDdosProtection) { $ddosProtectionEnabled = $true break } } if ($ddosProtectionEnabled -eq $null) { $ddosProtectionEnabled = $false } # Eenvoudige controle op hub-spoke topologie (check op VNet Peering) $peerings = Get-AzVirtualNetworkPeering -ErrorAction SilentlyContinue if ($peerings -and $peerings.Count -gt 0) { $hasHubSpoke = $true Write-Verbose "VNet Peering gevonden: mogelijk hub-spoke topologie" } else { if ($hasHubSpoke -eq $null) { $hasHubSpoke = $false } } } catch { Write-Verbose "Kon netwerkresources niet ophalen voor subscription '$($sub.Name)': $_" } } } catch { Write-Warning "Fout bij inventariseren van netwerkbeveiligingsstatus: $_" } return [pscustomobject]@{ AzureConnected = $azConnected VirtualNetworks = $totalVNets Subnets = $totalSubnets HubSpokeConfigured = $hasHubSpoke NetworkSecurityGroups = $totalNSGs NSGsOnSubnets = $nsgsOnSubnets AzureFirewallDeployed = $azureFirewallDeployed PrivateEndpoints = $totalPrivateEndpoints DDoSProtectionEnabled = $ddosProtectionEnabled } } function Invoke-Monitoring { <# .SYNOPSIS Voert monitoring uit van netwerkbeveiligingsconfiguratie en identificeert hiaten. .OUTPUTS PSCustomObject met monitoringresultaten. #> [CmdletBinding()] param() Write-Host "`nMonitoring: Azure Network Beveiliging" -ForegroundColor Yellow Write-Host "=======================================" -ForegroundColor Yellow $networkStatus = Get-NetworkSecurityStatus if ($networkStatus.AzureConnected) { Write-Host "`nNetwerkbeveiligingsstatus:" -ForegroundColor Cyan Write-Host " Virtual Networks: $($networkStatus.VirtualNetworks)" -ForegroundColor White Write-Host " Subnetten: $($networkStatus.Subnets)" -ForegroundColor White Write-Host " Network Security Groups: $($networkStatus.NetworkSecurityGroups)" -ForegroundColor White Write-Host " Subnetten met NSG: $($networkStatus.NSGsOnSubnets) / $($networkStatus.Subnets)" -ForegroundColor $(if ($networkStatus.NSGsOnSubnets -eq $networkStatus.Subnets -and $networkStatus.Subnets -gt 0) { "Green" } elseif ($networkStatus.Subnets -gt 0) { "Yellow" } else { "Gray" }) Write-Host " Hub-Spoke topologie geconfigureerd: $($networkStatus.HubSpokeConfigured)" -ForegroundColor $(if ($networkStatus.HubSpokeConfigured) { "Green" } elseif ($networkStatus.HubSpokeConfigured -eq $null) { "Yellow" } else { "Yellow" }) Write-Host " Azure Firewall geïmplementeerd: $($networkStatus.AzureFirewallDeployed)" -ForegroundColor $(if ($networkStatus.AzureFirewallDeployed) { "Green" } elseif ($networkStatus.AzureFirewallDeployed -eq $null) { "Yellow" } else { "Yellow" }) Write-Host " Private Endpoints: $($networkStatus.PrivateEndpoints)" -ForegroundColor White Write-Host " DDoS Protection ingeschakeld: $($networkStatus.DDoSProtectionEnabled)" -ForegroundColor $(if ($networkStatus.DDoSProtectionEnabled) { "Green" } else { "Yellow" }) # Get article inventory Write-Host "`n Artikel Inventaris:" -ForegroundColor Cyan $inventory = Get-NetworkInventory Write-Host " Totaal Artikelen: $($inventory.TotalArticles)" -ForegroundColor White Write-Host " Artikelen met JSON: $($inventory.ArticlesWithJson)" -ForegroundColor White Write-Host " Artikelen met Script: $($inventory.ArticlesWithScript)" -ForegroundColor White Write-Host " Complete Artikelen: $($inventory.ArticlesComplete)" -ForegroundColor White } else { Write-Host "`n⚠️ Geen actieve Azure-verbinding. Verbind met Connect-AzAccount voor netwerkbeveiligingsmonitoring." -ForegroundColor Yellow } Write-Host "`nHandmatige verificatie vereist:" -ForegroundColor Cyan Write-Host " Controleer in Azure Portal:" -ForegroundColor Gray Write-Host " - Virtual Networks > Overzicht van VNets en subnetten" -ForegroundColor Gray Write-Host " - Network Security Groups > NSG-regels en toepassingen op subnetten" -ForegroundColor Gray Write-Host " - Azure Firewall > Firewall-regels en bedreigingsinformatie" -ForegroundColor Gray Write-Host " - Private Endpoints > Privé endpoints voor Platform-as-a-Service services" -ForegroundColor Gray Write-Host " - DDoS Protection > DDoS Protection Standard voor kritieke workloads" -ForegroundColor Gray $isCompliant = $true $warnings = @() if ($networkStatus.VirtualNetworks -eq 0) { $isCompliant = $false $warnings += "Geen Virtual Networks gevonden. Configureer Virtual Networks voor netwerksegmentatie." } if ($networkStatus.Subnets -gt 0 -and $networkStatus.NSGsOnSubnets -lt $networkStatus.Subnets) { $isCompliant = $false $missing = $networkStatus.Subnets - $networkStatus.NSGsOnSubnets $warnings += "$missing subnetten hebben geen Network Security Group toegewezen." } if (-not $networkStatus.AzureFirewallDeployed) { $isCompliant = $false $warnings += "Azure Firewall is niet geïmplementeerd. Overweeg Azure Firewall voor gecentraliseerde verkeersinspectie." } if (-not $networkStatus.DDoSProtectionEnabled) { $warnings += "DDoS Protection is niet ingeschakeld. Overweeg DDoS Protection Standard voor kritieke workloads." } if ($warnings.Count -gt 0) { Write-Host "`n⚠️ Aanbevelingen:" -ForegroundColor Yellow foreach ($warning in $warnings) { Write-Host " - $warning" -ForegroundColor Yellow } Write-Host "`n Gebruik -Remediation voor gedetailleerde analyse en implementatiehandvatten." -ForegroundColor Yellow } return [pscustomobject]@{ NetworkSecurityStatus = $networkStatus IsCompliant = $isCompliant Warnings = $warnings } } function Invoke-Remediation { <# .SYNOPSIS Ondersteunt remediatie door netwerkbeveiligingshiaten te analyseren en handvatten te bieden voor implementatie. .OUTPUTS PSCustomObject met remediatieadvies. #> [CmdletBinding()] param() Write-Host "`nRemediatie: Azure Network Beveiliging Implementatie" -ForegroundColor Yellow Write-Host "====================================================" -ForegroundColor Yellow $networkStatus = Get-NetworkSecurityStatus $actions = @() Write-Host "`nNetwerkbeveiligingsimplementatie analyse:" -ForegroundColor Cyan if ($networkStatus.VirtualNetworks -eq 0) { $action = [pscustomobject]@{ Priority = "Critical" Issue = "Geen Virtual Networks gevonden" Count = 0 Recommendation = "Maak Virtual Networks aan via Azure Portal > Virtual Networks > Add. Ontwerp een netwerkarchitectuur met hub-spoke topologie waarbij workloads logisch worden gescheiden." } $actions += $action Write-Host " ❌ $($action.Issue)" -ForegroundColor Red Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if ($networkStatus.Subnets -gt 0 -and $networkStatus.NSGsOnSubnets -lt $networkStatus.Subnets) { $missing = $networkStatus.Subnets - $networkStatus.NSGsOnSubnets $action = [pscustomobject]@{ Priority = "High" Issue = "Subnetten zonder Network Security Group" Count = $missing Recommendation = "Wijs Network Security Groups toe aan alle subnetten via Azure Portal > Virtual Networks > [VNet] > Subnets > [Subnet] > Network security group. Configureer least-privilege regels die alleen toegestaan verkeer toestaan." } $actions += $action Write-Host " ❌ $($action.Issue): $($action.Count) subnetten" -ForegroundColor Red Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if (-not $networkStatus.AzureFirewallDeployed) { $action = [pscustomobject]@{ Priority = "High" Issue = "Azure Firewall niet geïmplementeerd" Count = 0 Recommendation = "Implementeer Azure Firewall in een hub-VNet via Azure Portal > Create a resource > Azure Firewall. Configureer User-Defined Routes in spoke-VNets om verkeer te routeren via de firewall voor inspectie en filtering." } $actions += $action Write-Host " ⚠️ $($action.Issue)" -ForegroundColor Yellow Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if (-not $networkStatus.HubSpokeConfigured) { $action = [pscustomobject]@{ Priority = "Medium" Issue = "Hub-Spoke topologie niet geconfigureerd" Count = 0 Recommendation = "Implementeer een hub-spoke topologie waarbij een centrale hub-VNet gecentraliseerde services bevat (Azure Firewall, VPN Gateway) en spoke-VNets workloads isoleren. Configureer VNet Peering tussen hub en spokes." } $actions += $action Write-Host " ⚠️ $($action.Issue)" -ForegroundColor Yellow Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if ($networkStatus.PrivateEndpoints -eq 0) { $action = [pscustomobject]@{ Priority = "Medium" Issue = "Geen Private Endpoints geconfigureerd" Count = 0 Recommendation = "Configureer Private Endpoints voor gevoelige Platform-as-a-Service services zoals Storage Accounts, SQL-databases en Key Vault via Azure Portal > [Service] > Networking > Private endpoint connections." } $actions += $action Write-Host " ⚠️ $($action.Issue)" -ForegroundColor Yellow Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } if (-not $networkStatus.DDoSProtectionEnabled) { $action = [pscustomobject]@{ Priority = "Medium" Issue = "DDoS Protection niet ingeschakeld" Count = 0 Recommendation = "Schakel DDoS Protection Standard in voor kritieke Virtual Networks via Azure Portal > Virtual Networks > [VNet] > DDoS protection > Enable DDoS protection standard." } $actions += $action Write-Host " ⚠️ $($action.Issue)" -ForegroundColor Yellow Write-Host " → $($action.Recommendation)" -ForegroundColor Gray } Write-Host "`nVolgende stappen:" -ForegroundColor Cyan Write-Host "1. Ontwerp een netwerkarchitectuur met hub-spoke topologie" -ForegroundColor White Write-Host "2. Maak Virtual Networks aan voor hub en spokes" -ForegroundColor White Write-Host "3. Configureer Network Security Groups op alle subnetten" -ForegroundColor White Write-Host "4. Implementeer Azure Firewall in de hub-VNet" -ForegroundColor White Write-Host "5. Configureer Private Endpoints voor gevoelige Platform-as-a-Service services" -ForegroundColor White Write-Host "6. Schakel DDoS Protection Standard in voor kritieke workloads" -ForegroundColor White Write-Host "7. Configureer Network Watcher voor netwerkdiagnostiek en monitoring" -ForegroundColor White Write-Host "8. Stel monitoring en alerting in voor netwerkbeveiligingsincidenten" -ForegroundColor White Write-Host "9. Documenteer netwerkbeveiligingsbeleid en rollen/verantwoordelijkheden" -ForegroundColor White return [pscustomobject]@{ Actions = $actions NetworkSecurityStatus = $networkStatus } } try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Azure Network Beveiliging Monitor" -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 netwerkbeveiligingscheck via monitoring $result = Invoke-Monitoring if ($result.IsCompliant) { 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
Critical: Kritiek - Zonder een volwassen netwerkbeveiligingsraamwerk in Azure kunnen organisaties niet effectief controleren wie toegang heeft tot welke netwerkresources, hoe verkeer wordt gerouteerd en gefilterd, en of netwerksegmentatie adequaat is geïmplementeerd. Vlakke netwerken zonder segmentatie creëren een permanent aanvalsoppervlak waarbij laterale beweging eenvoudig is, publieke endpoints overal beschikbaar zijn, en verkeer niet wordt geïnspecteerd. Dit creëert aanzienlijke beveiligingsrisico's en niet-naleving van compliance-vereisten zoals BIO 09.05, BIO 12.03, ISO 27001 A.8.21 en NIS2 Artikel 21.

Management Samenvatting

Azure Network vereist een samenhangend raamwerk dat netwerksegmentatie, hub-spoke topologieën, Network Security Groups, Azure Firewall, Private Endpoints en netwerkmonitoring integreert. Dit index-artikel fungeert als centrale verzamelplaats voor netwerk-artikelen en beschrijft governance, implementatie, monitoring en continue verbetering van netwerkbeveiliging in Azure-omgevingen.