Zero Trust Connectiviteit

💼 Management Samenvatting

Zero Trust connectiviteit implementeert het fundamentele principe dat geen enkel netwerkverkeer automatisch wordt vertrouwd, ongeacht de bron of bestemming. In plaats daarvan wordt elke verbinding expliciet geverifieerd, geautoriseerd en gemonitord voordat toegang wordt verleend.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
50u (tech: 40u)
Van toepassing op:
Azure Virtual Networks
VPN Gateways
ExpressRoute
Private Endpoints

Traditionele netwerkbeveiliging vertrouwt op perimetergebaseerde modellen waarbij alles binnen het netwerk impliciet wordt vertrouwd. Deze aanpak is fundamenteel kwetsbaar in moderne cloud-omgevingen waar grenzen vervagen en aanvallers vaak al binnen het netwerk aanwezig zijn voordat detectie plaatsvindt. Zero Trust connectiviteit elimineert dit impliciete vertrouwen door elke verbinding te behandelen als potentieel verdacht, waardoor laterale beweging van aanvallers wordt beperkt, ongeautoriseerde toegang wordt voorkomen en gegevensbescherming wordt verbeterd. Voor Nederlandse overheidsorganisaties die werken met gevoelige persoonsgegevens en kritieke infrastructuren is Zero Trust connectiviteit niet langer optioneel maar een absolute vereiste voor compliance met NIS2-richtlijnen, BIO-normen en moderne cybersecurity-standaarden. Zonder Zero Trust connectiviteit blijven organisaties kwetsbaar voor geavanceerde persistent threats, insider-bedreigingen en gecompliceerde aanvalspatronen die traditionele perimeterbeveiliging kunnen omzeilen.

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

Implementatie

Zero Trust connectiviteit in Azure-netwerken wordt gerealiseerd door een combinatie van netwerksegmentatie, privé-eindpunten, netwerkbeveiligingsgroepen met deny-by-default regels, Azure Firewall of Azure Firewall Premium voor gecentraliseerd beheer, VPN-gateways met geavanceerde authenticatie en autorisatie, en ExpressRoute-verbindingen met privé-peering. De implementatie vereist dat alle verkeer wordt gerouteerd via gecontroleerde gateways waar authenticatie, autorisatie en logging plaatsvinden. Publieke eindpunten worden waar mogelijk geëlimineerd ten gunste van privé-eindpunten, waardoor blootstelling aan het internet wordt geminimaliseerd. Microsegmentatie wordt toegepast op subnetniveau waarbij elk subnet wordt behandeld als een aparte security zone met specifieke toegangsregels. Verkeer tussen zones wordt expliciet gecontroleerd en gelogd, waardoor volledige traceerbaarheid wordt gewaarborgd. De configuratie omvat ook het implementeren van just-in-time toegang voor beheerders, het gebruik van service tags voor gerichte firewallregels, en continue monitoring van alle netwerkverkeer voor afwijkende patronen.

Implementatie

Gebruik PowerShell-script zero-trust-connectivity.ps1 (functie Invoke-Implementation) – Implementeren.

Compliance en Auditing

Monitoring

Gebruik PowerShell-script zero-trust-connectivity.ps1 (functie Invoke-Monitoring) – Controleren.

Remediatie

Gebruik PowerShell-script zero-trust-connectivity.ps1 (functie Invoke-Remediation) – Herstellen.

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
<# ================================================================================ AZURE POWERSHELL SCRIPT - Nederlandse Baseline voor Veilige Cloud ================================================================================ .SYNOPSIS Zero Trust Connectivity .DESCRIPTION CIS Azure Foundations Benchmark - Multiple Controls Controleert Zero Trust connectiviteit configuratie in Azure-netwerken. Verifieert netwerksegmentatie, privé-eindpunten, NSG deny-by-default regels, en andere Zero Trust-principes. .NOTES Filename: zero-trust-connectivity.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 CIS Control: Multiple #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Network [CmdletBinding()] param([Parameter()][switch]$Monitoring) $ErrorActionPreference = 'Stop' $PolicyName = "Zero Trust Connectivity" function Connect-RequiredServices { if (-not (Get-AzContext)) { Connect-AzAccount | Out-Null } } function Test-Compliance { $results = @{ VirtualNetworks = 0 PrivateEndpoints = 0 NSGsWithDenyByDefault = 0 NSGsTotal = 0 PublicIPsOnVMs = 0 ComplianceScore = 0 Issues = @() } try { # Controleer virtuele netwerken $vnets = Get-AzVirtualNetwork -ErrorAction SilentlyContinue $results.VirtualNetworks = $vnets.Count # Controleer privé-eindpunten $privateEndpoints = Get-AzPrivateEndpoint -ErrorAction SilentlyContinue $results.PrivateEndpoints = $privateEndpoints.Count # Controleer NSG's met deny-by-default $nsgs = Get-AzNetworkSecurityGroup -ErrorAction SilentlyContinue $results.NSGsTotal = $nsgs.Count foreach ($nsg in $nsgs) { $hasDenyAllInbound = $false $hasDenyAllOutbound = $false # Controleer inbound regels voor deny-all $inboundRules = $nsg.SecurityRules | Where-Object { $_.Direction -eq "Inbound" } | Sort-Object Priority if ($inboundRules.Count -gt 0) { $lastRule = $inboundRules[-1] if ($lastRule.Access -eq "Deny" -and $lastRule.DestinationPortRange -eq "*" -and $lastRule.SourceAddressPrefix -eq "*") { $hasDenyAllInbound = $true } } # Controleer outbound regels voor deny-all $outboundRules = $nsg.SecurityRules | Where-Object { $_.Direction -eq "Outbound" } | Sort-Object Priority if ($outboundRules.Count -gt 0) { $lastRule = $outboundRules[-1] if ($lastRule.Access -eq "Deny" -and $lastRule.DestinationPortRange -eq "*" -and $lastRule.SourceAddressPrefix -eq "*") { $hasDenyAllOutbound = $true } } if ($hasDenyAllInbound -and $hasDenyAllOutbound) { $results.NSGsWithDenyByDefault++ } else { $results.Issues += "NSG '$($nsg.Name)' mist deny-by-default configuratie" } } # Controleer VM's met publieke IP-adressen $vms = Get-AzVM -ErrorAction SilentlyContinue foreach ($vm in $vms) { $vmNics = Get-AzNetworkInterface -ResourceGroupName $vm.ResourceGroupName -ErrorAction SilentlyContinue | Where-Object { $_.VirtualMachine.Id -eq $vm.Id } foreach ($nic in $vmNics) { $publicIPs = $nic.IpConfigurations | Where-Object { $null -ne $_.PublicIpAddress } if ($publicIPs.Count -gt 0) { $results.PublicIPsOnVMs++ $results.Issues += "VM '$($vm.Name)' heeft publiek IP-adres toegewezen" } } } # Bereken compliance score $score = 0 $maxScore = 100 # NSG deny-by-default score (40 punten) if ($results.NSGsTotal -gt 0) { $nsgScore = ($results.NSGsWithDenyByDefault / $results.NSGsTotal) * 40 $score += $nsgScore } # Privé-eindpunten score (30 punten) - bonus als er privé-eindpunten zijn if ($results.PrivateEndpoints -gt 0) { $score += 30 } # Geen publieke IP's op VM's score (30 punten) if ($results.PublicIPsOnVMs -eq 0) { $score += 30 } $results.ComplianceScore = [math]::Round($score, 2) } catch { $results.Issues += "Fout tijdens compliance-check: $_" } return $results } try { Connect-RequiredServices if ($Monitoring) { $r = Test-Compliance Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "Compliance Score: $($r.ComplianceScore)%" -ForegroundColor $(if ($r.ComplianceScore -ge 80) { 'Green' } elseif ($r.ComplianceScore -ge 50) { 'Yellow' } else { 'Red' }) Write-Host "Virtuele Netwerken: $($r.VirtualNetworks)" -ForegroundColor White Write-Host "Privé-eindpunten: $($r.PrivateEndpoints)" -ForegroundColor $(if ($r.PrivateEndpoints -gt 0) { 'Green' } else { 'Yellow' }) Write-Host "NSG's met Deny-By-Default: $($r.NSGsWithDenyByDefault) / $($r.NSGsTotal)" -ForegroundColor $(if ($r.NSGsWithDenyByDefault -eq $r.NSGsTotal -and $r.NSGsTotal -gt 0) { 'Green' } else { 'Yellow' }) Write-Host "VM's met Publieke IP: $($r.PublicIPsOnVMs)" -ForegroundColor $(if ($r.PublicIPsOnVMs -eq 0) { 'Green' } else { 'Red' }) if ($r.Issues.Count -gt 0) { Write-Host "`nGeïdentificeerde Problemen:" -ForegroundColor Yellow foreach ($issue in $r.Issues) { Write-Host " - $issue" -ForegroundColor Yellow } } } else { $r = Test-Compliance Write-Host "`nCompliance Score: $($r.ComplianceScore)%" Write-Host "Virtuele Netwerken: $($r.VirtualNetworks)" Write-Host "Privé-eindpunten: $($r.PrivateEndpoints)" Write-Host "NSG's met Deny-By-Default: $($r.NSGsWithDenyByDefault) / $($r.NSGsTotal)" Write-Host "VM's met Publieke IP: $($r.PublicIPsOnVMs)" } } catch { Write-Error $_; exit 1 } # ================================================================================ # Standaard Invoke-* Functions (Auto-generated) # ================================================================================ function Invoke-Implementation { <# .SYNOPSIS Implementeert de configuratie #> [CmdletBinding()] param() Write-Host "[INFO] Zero Trust Connectivity implementatie vereist handmatige configuratie" -ForegroundColor Yellow Write-Host "[INFO] Raadpleeg het artikel voor gedetailleerde implementatiestappen" -ForegroundColor Cyan Write-Host "[INFO] Running monitoring check..." -ForegroundColor Cyan Invoke-Monitoring } function Invoke-Monitoring { <# .SYNOPSIS Controleert de huidige configuratie status #> [CmdletBinding()] param() $Monitoring = $true try { Connect-RequiredServices if ($Monitoring) { $r = Test-Compliance Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "Compliance Score: $($r.ComplianceScore)%" -ForegroundColor $(if ($r.ComplianceScore -ge 80) { 'Green' } elseif ($r.ComplianceScore -ge 50) { 'Yellow' } else { 'Red' }) Write-Host "Virtuele Netwerken: $($r.VirtualNetworks)" -ForegroundColor White Write-Host "Privé-eindpunten: $($r.PrivateEndpoints)" -ForegroundColor $(if ($r.PrivateEndpoints -gt 0) { 'Green' } else { 'Yellow' }) Write-Host "NSG's met Deny-By-Default: $($r.NSGsWithDenyByDefault) / $($r.NSGsTotal)" -ForegroundColor $(if ($r.NSGsWithDenyByDefault -eq $r.NSGsTotal -and $r.NSGsTotal -gt 0) { 'Green' } else { 'Yellow' }) Write-Host "VM's met Publieke IP: $($r.PublicIPsOnVMs)" -ForegroundColor $(if ($r.PublicIPsOnVMs -eq 0) { 'Green' } else { 'Red' }) if ($r.Issues.Count -gt 0) { Write-Host "`nGeïdentificeerde Problemen:" -ForegroundColor Yellow foreach ($issue in $r.Issues) { Write-Host " - $issue" -ForegroundColor Yellow } } } else { $r = Test-Compliance Write-Host "`nCompliance Score: $($r.ComplianceScore)%" Write-Host "Virtuele Netwerken: $($r.VirtualNetworks)" Write-Host "Privé-eindpunten: $($r.PrivateEndpoints)" Write-Host "NSG's met Deny-By-Default: $($r.NSGsWithDenyByDefault) / $($r.NSGsTotal)" Write-Host "VM's met Publieke IP: $($r.PublicIPsOnVMs)" } } catch { Write-Error $_; exit 1 } } function Invoke-Remediation { <# .SYNOPSIS Herstelt de configuratie naar de gewenste staat .DESCRIPTION Zero Trust Connectivity vereist uitgebreide handmatige configuratie. Deze functie voert monitoring uit en rapporteert problemen. #> [CmdletBinding()] param() Write-Host "[INFO] Zero Trust Connectivity remediatie vereist handmatige interventie" -ForegroundColor Yellow Write-Host "[INFO] Raadpleeg het artikel voor gedetailleerde remediatiestappen" -ForegroundColor Cyan Write-Host "[INFO] Running monitoring check om problemen te identificeren..." -ForegroundColor Cyan Invoke-Monitoring }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder Zero Trust connectiviteit blijven organisaties kwetsbaar voor geavanceerde persistent threats waarbij aanvallers laterale beweging kunnen uitvoeren binnen het netwerk nadat ze een eerste toegangspunt hebben gecompromitteerd. Traditionele perimetergebaseerde beveiliging biedt onvoldoende bescherming in moderne cloud-omgevingen waar netwerkgrenzen vervagen en waar insider-bedreigingen en gecompromitteerde accounts een aanzienlijk risico vormen. Zonder netwerksegmentatie en deny-by-default configuraties kunnen aanvallers eenvoudig toegang krijgen tot kritieke systemen en gevoelige gegevens zodra ze binnen het netwerk zijn. Publieke eindpunten creëren continue blootstelling aan internet waarbij diensten 24/7 worden gescand en aangevallen door kwaadwillenden. Compliance met NIS2-richtlijnen, BIO-normen en ISO 27001-standaarden wordt onmogelijk zonder Zero Trust-architectuur, wat kan leiden tot boetes, reputatieschade en verlies van vertrouwen van burgers en stakeholders.

Management Samenvatting

Zero Trust connectiviteit: Implementeer een gesegmenteerde netwerkarchitectuur met deny-by-default configuraties, privé-eindpunten voor alle PaaS-diensten, gecentraliseerde firewalling via Azure Firewall, en uitgebreide monitoring van alle netwerkverkeer. De implementatie vereist ongeveer 40 tot 50 uur afhankelijk van de complexiteit van de netwerkarchitectuur. Deze maatregel is verplicht voor compliance met NIS2, BIO en ISO 27001 en vormt de basis voor een veilige cloud-architectuur waarbij geen enkel netwerkverkeer automatisch wordt vertrouwd.