Azure Application Security Groups: Netwerkbeveiliging Op Basis Van Workload-Identiteit

💼 Management Samenvatting

Azure Application Security Groups (ASG's) bieden een moderne, schaalbare benadering van netwerkbeveiliging door beveiligingsregels te definiëren op basis van workload-identiteit en -rol in plaats van statische IP-adressen. In tegenstelling tot traditionele Network Security Group (NSG) regels die zijn gebaseerd op specifieke IP-adressen of CIDR-blokken, maken ASG's het mogelijk om netwerkinterfaces van virtuele machines te groeperen op basis van hun functionele rol en vervolgens NSG-regels te definiëren die verkeer tussen deze groepen beheren. Deze aanpak lost belangrijke operationele uitdagingen op: wanneer workloads worden verplaatst of wanneer IP-adressen wijzigen, hoeven NSG-regels niet te worden bijgewerkt omdat ze zijn gebaseerd op ASG's die onafhankelijk zijn van netwerktopologie. Voor Nederlandse overheidsorganisaties die streven naar automatisering, schaalbaarheid en vereenvoudigd beheer van netwerkbeveiliging binnen de Nederlandse Baseline voor Veilige Cloud bieden ASG's een krachtige oplossing die aansluit bij Zero Trust-principes en compliance-vereisten voor netwerksegmentatie.

Aanbeveling
IMPLEMENTEER APPLICATION SECURITY GROUPS VOOR WORKLOAD-GEBASEERDE NETWERKBEVEILIGING
Risico zonder
Medium
Risk Score
7/10
Implementatie
32u (tech: 24u)
Van toepassing op:
Azure Virtual Networks
Network Security Groups
Virtuele Machines
Workload-gebaseerde netwerkbeveiliging

Traditionele NSG-regels die zijn gebaseerd op IP-adressen creëren aanzienlijke operationele uitdagingen en beveiligingsrisico's in moderne cloudomgevingen waar workloads dynamisch worden verplaatst, geschaald of vervangen. Wanneer een virtuele machine een nieuw IP-adres krijgt tijdens een migratie, update of herstel, moeten alle NSG-regels die verwijzen naar het oude IP-adres handmatig worden bijgewerkt. Deze handmatige updates zijn foutgevoelig en tijdrovend, waardoor het risico bestaat dat verouderde regels achterblijven die ofwel beveiligingsgaten creëren ofwel legitiem verkeer blokkeren. Bovendien maakt IP-gebaseerde configuratie het moeilijk om consistent beveiligingsbeleid toe te passen op workloads met vergelijkbare functies maar verschillende IP-adressen, bijvoorbeeld wanneer web servers in verschillende subnetten of beschikbaarheidszones worden geplaatst. Application Security Groups lossen deze problemen op door een logische laag te introduceren tussen netwerkinterfaces en beveiligingsregels: in plaats van te denken in termen van IP-adressen denken beheerders in termen van workload-rollen zoals 'WebServers', 'AppServers' en 'DatabaseServers'. Wanneer een nieuwe virtuele machine wordt toegevoegd aan een workload-rol, wordt de bijbehorende netwerkinterface eenvoudig toegewezen aan de juiste ASG, en alle bestaande NSG-regels die naar die ASG verwijzen werken automatisch zonder wijzigingen. Dit vermindert configuratiefouten aanzienlijk, versnelt het deployen van nieuwe workloads en maakt netwerkbeveiliging beter schaalbaar en onderhoudbaar.

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

Implementatie

Dit artikel beschrijft hoe organisaties binnen de Nederlandse Baseline voor Veilige Cloud Application Security Groups implementeren en configureren als moderne benadering voor workload-gebaseerde netwerkbeveiliging in Azure. De focus ligt op vijf hoofdcomponenten. Ten eerste conceptuele basis: het begrijpen van wat ASG's zijn, hoe ze verschillen van IP-gebaseerde NSG-regels, en welke voordelen ze bieden voor netwerkbeveiliging en -beheer. Ten tweede architectuur en ontwerp: het plannen van ASG-structuren op basis van workload-rollen en -functies, het ontwerpen van NSG-regels die ASG's gebruiken in plaats van IP-adressen, en het integreren van ASG's in bestaande netwerkarchitecturen zoals hub-spoke topologieën of drie-lagen applicatie-architecturen. Ten derde implementatie en configuratie: het maken van ASG-resources, het toewijzen van netwerkinterfaces aan ASG's, het configureren van NSG-regels die ASG's als bron of doel gebruiken, en het gebruik van combinaties van ASG's voor complexe beveiligingsscenario's. Ten vierde operationele best practices: het organiseren van ASG's volgens consistente naamgevingsconventies, het gebruik van tags en documentatie voor ASG-beheer, het automatiseren van ASG-toewijzingen via Infrastructure as Code en deployment-scripts, en het monitoren en auditloggen van ASG-configuraties. Ten vijfde governance en compliance: het opzetten van processen voor ASG-beheer, het definiëren van verantwoordelijkheden, het implementeren van Azure Policy voor consistente ASG-gebruik, en het borgen van compliance met relevante frameworks zoals BIO, ISO 27001 en NIS2. Het bijbehorende PowerShell-script inventariseert alle ASG's in een abonnement, controleert of netwerkinterfaces correct zijn toegewezen aan ASG's, valideert NSG-regels die ASG's gebruiken, en identificeert ontbrekende of suboptimale configuraties.

Concepten en fundamenten van Application Security Groups

Application Security Groups vormen een logische abstractielaag bovenop de fysieke netwerktopologie die organisaties in staat stelt om netwerkbeveiliging te definiëren op basis van applicatie- of workload-rollen in plaats van netwerklocaties. Een ASG is in essentie een benoemde container die netwerkinterfaces van virtuele machines kan bevatten, ongeacht waar die virtuele machines zich bevinden in het Virtual Network. Wanneer een netwerkinterface wordt toegewezen aan een ASG, erft die interface automatisch alle beveiligingsregels die zijn gedefinieerd voor die ASG in de NSG's die zijn gekoppeld aan het subnet of de netwerkinterface. Deze scheiding tussen logische workload-identiteit en fysieke netwerkconfiguratie is fundamenteel voor het begrijpen van ASG's: organisaties kunnen nu denken in termen van 'welke workloads moeten met elkaar kunnen communiceren' in plaats van 'welke IP-adressen moeten met elkaar kunnen communiceren'. Bijvoorbeeld, in plaats van een NSG-regel te definiëren die verkeer toestaat van een specifiek subnet naar een ander specifiek subnet, kan een organisatie een regel definiëren die verkeer toestaat van de ASG 'WebServers' naar de ASG 'AppServers', ongeacht waar deze servers zich bevinden in het netwerk.

Het belangrijkste verschil tussen ASG's en IP-gebaseerde NSG-regels is de flexibiliteit en onderhoudbaarheid die ASG's bieden in dynamische cloudomgevingen. Wanneer een organisatie IP-gebaseerde regels gebruikt en een virtuele machine wordt verplaatst naar een ander subnet of krijgt een nieuw IP-adres, moeten alle NSG-regels die verwijzen naar het oude IP-adres handmatig worden bijgewerkt. Deze handmatige updates zijn niet alleen tijdrovend maar ook foutgevoelig: het risico bestaat dat verouderde regels worden gemist, waardoor beveiligingsgaten ontstaan of legitiem verkeer wordt geblokkeerd. Met ASG's wordt dit probleem geëlimineerd: wanneer een virtuele machine wordt verplaatst, wordt de bijbehorende netwerkinterface eenvoudig toegewezen aan de juiste ASG (of blijft al toegewezen aan de juiste ASG als deze al correct was geconfigureerd), en alle NSG-regels die naar die ASG verwijzen werken automatisch zonder wijzigingen. Deze flexibiliteit is vooral waardevol in omgevingen met frequente deployments, auto-scaling, of disaster recovery-scenario's waarbij workloads regelmatig worden verplaatst of gerepliceerd.

ASG's werken alleen binnen hetzelfde Virtual Network en kunnen niet worden gebruikt voor verkeer tussen verschillende Virtual Networks of voor verkeer van en naar internet. Deze beperking is belangrijk om te begrijpen bij het ontwerpen van netwerkbeveiligingsarchitecturen: ASG's zijn ideaal voor het beheren van verkeer tussen workloads binnen een Virtual Network, maar voor verkeer tussen Virtual Networks of naar externe bestemmingen moeten organisaties nog steeds gebruik maken van service tags, IP-adresbereiken of andere NSG-functies. Bovendien kunnen netwerkinterfaces worden toegewezen aan meerdere ASG's, wat organisaties flexibiliteit biedt voor complexe beveiligingsscenario's waarin workloads meerdere rollen hebben of deel uitmaken van meerdere logische groepen. Bijvoorbeeld, een virtuele machine die zowel als web server als als applicatieserver functioneert kan worden toegewezen aan zowel de ASG 'WebServers' als de ASG 'AppServers', waardoor NSG-regels kunnen worden gedefinieerd die rekening houden met beide rollen.

De integratie van ASG's met NSG's vereist dat NSG-regels expliciet ASG's gebruiken in de bron- of doelvelden in plaats van IP-adressen of service tags. Wanneer een NSG-regel een ASG als bron of doel gebruikt, wordt die regel geëvalueerd voor alle netwerkinterfaces die aan die ASG zijn toegewezen. Dit betekent dat wanneer een nieuwe virtuele machine wordt toegevoegd aan een workload-rol en de bijbehorende netwerkinterface wordt toegewezen aan de juiste ASG, alle bestaande NSG-regels die naar die ASG verwijzen automatisch van toepassing zijn op de nieuwe machine zonder dat regels hoeven te worden gewijzigd of toegevoegd. Deze automatische toepassing van beveiligingsregels is een belangrijke voordeel van ASG's en maakt het mogelijk om consistent beveiligingsbeleid toe te passen op alle workloads binnen een bepaalde rol, ongeacht hun locatie in het netwerk of hun IP-adresconfiguratie.

Architectuur en ontwerp voor Application Security Groups

Het ontwerpen van een effectieve ASG-architectuur begint met het identificeren van workload-rollen en -functies binnen de organisatie en het bepalen hoe deze rollen moeten communiceren volgens het principe van least privilege. Organisaties moeten een inventarisatie maken van alle workloads in hun Azure-omgeving en deze categoriseren op basis van hun functionele rol, bijvoorbeeld: web servers die HTTP/HTTPS-verkeer verwerken, applicatieservers die business logic uitvoeren, database servers die data opslaan en beheren, management servers voor beheerdoeleinden, en file servers voor bestandsopslag. Voor elke rol moet worden bepaald welke andere rollen ermee moeten kunnen communiceren en welke poorten en protocollen daarvoor nodig zijn. Bijvoorbeeld, web servers moeten kunnen communiceren met applicatieservers op poorten 8080 of 9000, applicatieservers moeten kunnen communiceren met database servers op poort 1433 (SQL Server) of 3306 (MySQL), maar web servers zouden nooit direct met database servers moeten kunnen communiceren. Deze communicatiepatronen vormen de basis voor het ontwerpen van ASG's en NSG-regels.

Na het identificeren van workload-rollen moeten organisaties ASG's definiëren die deze rollen representeren met duidelijke, beschrijvende namen die de functie van de groep duidelijk maken. Consistente naamgevingsconventies zijn essentieel voor beheerbaarheid en maken het gemakkelijker voor beheerders om te begrijpen welke workloads in welke ASG's zitten en welke beveiligingsregels van toepassing zijn. Aanbevolen naamgevingsconventies omvatten het gebruik van prefixes zoals 'asg-' om ASG's te onderscheiden van andere resources, het gebruik van beschrijvende namen zoals 'asg-web-servers', 'asg-app-servers' en 'asg-db-servers', en het mogelijk toevoegen van omgevingsprefixes zoals 'prod', 'test' of 'dev' wanneer ASG's worden gebruikt in meerdere omgevingen. Het is belangrijk om te voorkomen dat te veel ASG's worden gemaakt, omdat dit de complexiteit verhoogt en het beheer bemoeilijkt: organisaties moeten streven naar een balans tussen granulariteit (genoeg ASG's om verschillende rollen te onderscheiden) en eenvoud (niet te veel ASG's die moeilijk te beheren zijn).

NSG-regels die ASG's gebruiken volgen dezelfde prioriterings- en evaluatiemechanismen als traditionele IP-gebaseerde regels, maar bieden meer flexibiliteit en onderhoudbaarheid. Wanneer een NSG-regel een ASG als bron of doel gebruikt, wordt die regel geëvalueerd voor alle netwerkinterfaces die aan die ASG zijn toegewezen, waardoor één regel automatisch van toepassing is op alle workloads binnen die rol. Bijvoorbeeld, een enkele NSG-regel die verkeer toestaat van 'asg-web-servers' naar 'asg-app-servers' op poort 8080 werkt automatisch voor alle web servers en applicatieservers, ongeacht hoeveel van elk type er zijn of waar ze zich bevinden in het netwerk. Deze aanpak vermindert het aantal NSG-regels aanzienlijk en maakt het beheer veel eenvoudiger, vooral in omgevingen met veel workloads of frequente wijzigingen. Organisaties moeten echter nog steeds zorgvuldig prioriteiten toewijzen aan NSG-regels en ervoor zorgen dat allow-regels een hogere prioriteit hebben dan deny-regels om te voorkomen dat legitiem verkeer per ongeluk wordt geblokkeerd.

De integratie van ASG's in bestaande netwerkarchitecturen zoals hub-spoke topologieën of drie-lagen applicatie-architecturen vereist zorgvuldige planning om te voorkomen dat beveiligingsregels conflicteren of dat verkeer onbedoeld wordt geblokkeerd. In hub-spoke topologieën kunnen ASG's worden gebruikt om consistente beveiligingsregels toe te passen op workloads in verschillende spoke-netwerken, wat vooral waardevol is wanneer workloads met dezelfde rollen in meerdere spokes worden geplaatst voor redundantie of scheiding van omgevingen. Bijvoorbeeld, productie web servers in één spoke en test web servers in een andere spoke kunnen beide worden toegewezen aan de ASG 'asg-web-servers', en NSG-regels die naar deze ASG verwijzen werken automatisch voor beide sets servers. In drie-lagen applicatie-architecturen kunnen ASG's worden gebruikt om strikte beveiligingsregels toe te passen tussen lagen, bijvoorbeeld door alleen verkeer toe te staan van de web tier ASG naar de application tier ASG en van de application tier ASG naar de database tier ASG, maar niet direct van web tier naar database tier. Deze gelaagde beveiliging helpt om laterale beweging te beperken en zorgt ervoor dat aanvallers die toegang krijgen tot één laag niet direct toegang hebben tot andere lagen.

Het gebruik van meerdere ASG's per netwerkinterface biedt flexibiliteit voor complexe beveiligingsscenario's maar vereist zorgvuldige overweging om te voorkomen dat beveiligingsregels conflicteren of onbedoelde gevolgen hebben. Wanneer een netwerkinterface aan meerdere ASG's is toegewezen, worden alle NSG-regels die naar een van die ASG's verwijzen geëvalueerd voor die interface, wat betekent dat verkeer wordt toegestaan als een regel matcht. Dit kan leiden tot onbedoelde beveiligingsgaten wanneer een interface aan meerdere ASG's is toegewezen die verschillende beveiligingsvereisten hebben. Organisaties moeten voorzichtig zijn bij het toewijzen van interfaces aan meerdere ASG's en moeten ervoor zorgen dat de combinatie van ASG's geen onbedoelde beveiligingsrisico's introduceert. In het algemeen is het aanbevolen om interfaces toe te wijzen aan één primaire ASG die de hoofdrol van de workload representeert en alleen secundaire ASG's toe te voegen wanneer er een duidelijke functionele reden is.

Implementatie en configuratie van Application Security Groups

De implementatie van Application Security Groups begint met het maken van ASG-resources, wat kan worden gedaan via Azure Portal, Azure CLI, PowerShell of Infrastructure as Code-tools zoals ARM-templates of Terraform. Tijdens het aanmaken moeten organisaties een beschrijvende naam kiezen die de functie of rol van de ASG duidelijk maakt, bijvoorbeeld 'asg-web-servers' voor web servers of 'asg-database-servers' voor database servers. Deze naamgevingsconventies zijn belangrijk voor beheerbaarheid en maken het gemakkelijker om te begrijpen welke workloads in welke ASG's zitten en welke beveiligingsregels van toepassing zijn. ASG's worden aangemaakt in een resourcegroep en regio, en kunnen worden gebruikt binnen alle Virtual Networks in die regio. Het is aanbevolen om ASG's te organiseren in resourcegroepen die logisch zijn gegroepeerd, bijvoorbeeld een resourcegroep voor netwerkbeveiliging of resourcegroepen per omgeving (productie, test, ontwikkeling). Tags kunnen worden gebruikt om extra metadata toe te voegen aan ASG's, zoals omgeving, eigenaar, of compliance-informatie, wat helpt bij organisatie en beheer.

Na het aanmaken van ASG's moeten netwerkinterfaces worden toegewezen aan de juiste ASG's. Deze toewijzing kan worden gedaan tijdens het aanmaken van de virtuele machine en netwerkinterface, of later via wijziging van de netwerkinterface-configuratie. In Azure Portal kan dit worden gedaan door naar de netwerkinterface te gaan, de 'Application security groups' sectie te openen, en de juiste ASG's te selecteren. Via PowerShell of Azure CLI kan dit worden gedaan door de netwerkinterface bij te werken met de nieuwe ASG-toewijzingen. Het is belangrijk om ervoor te zorgen dat netwerkinterfaces correct zijn toegewezen aan ASG's, omdat onjuiste toewijzingen kunnen leiden tot beveiligingsgaten (wanneer interfaces niet zijn toegewezen aan de juiste ASG's en daardoor niet worden beschermd door de juiste NSG-regels) of tot geblokkeerd verkeer (wanneer interfaces zijn toegewezen aan verkeerde ASG's en daardoor worden beschermd door te restrictieve NSG-regels). Automatisering via Infrastructure as Code of deployment-scripts kan helpen om deze toewijzingen consistent en foutloos uit te voeren, vooral in omgevingen met veel workloads of frequente deployments.

NSG-regels die ASG's gebruiken moeten worden geconfigureerd met de ASG's als bron of doel in plaats van IP-adressen of service tags. Wanneer een NSG-regel wordt gemaakt, kunnen ASG's worden geselecteerd in de 'Source' of 'Destination' velden, waarbij meerdere ASG's kunnen worden geselecteerd voor één regel wanneer nodig. Bijvoorbeeld, een NSG-regel kan worden geconfigureerd om verkeer toe te staan van 'asg-web-servers' naar 'asg-app-servers' op poort 8080, wat automatisch werkt voor alle web servers en applicatieservers zonder dat specifieke IP-adressen hoeven te worden gekend. Het is belangrijk om zorgvuldig prioriteiten toe te wijzen aan NSG-regels die ASG's gebruiken, net als bij traditionele IP-gebaseerde regels, om ervoor te zorgen dat allow-regels een hogere prioriteit hebben dan deny-regels en dat specifiekere regels een hogere prioriteit hebben dan algemene regels. Organisaties moeten ook overwegen om NSG-regels te documenteren met duidelijke beschrijvingen die uitleggen waarom de regel nodig is en welke workloads ermee worden beveiligd, wat helpt bij troubleshooting en audits.

Het gebruik van combinaties van ASG's in NSG-regels biedt flexibiliteit voor complexe beveiligingsscenario's maar vereist zorgvuldige overweging om te voorkomen dat beveiligingsregels conflicteren of onbedoelde gevolgen hebben. Wanneer meerdere ASG's worden gebruikt als bron of doel in een NSG-regel, wordt de regel geëvalueerd voor alle netwerkinterfaces die aan een van die ASG's zijn toegewezen, wat betekent dat verkeer wordt toegestaan als een interface in de bron-ASG matcht en een interface in de doel-ASG matcht. Dit kan leiden tot onbedoelde beveiligingsgaten wanneer ASG-combinaties worden gebruikt die te breed zijn. Organisaties moeten voorzichtig zijn bij het gebruik van meerdere ASG's in regels en moeten ervoor zorgen dat de combinatie van ASG's geen onbedoelde beveiligingsrisico's introduceert. In het algemeen is het aanbevolen om één ASG per regel te gebruiken wanneer mogelijk en alleen meerdere ASG's te gebruiken wanneer er een duidelijke functionele reden is, zoals wanneer workloads met vergelijkbare rollen in verschillende omgevingen dezelfde beveiligingsregels nodig hebben.

Gebruik PowerShell-script application-security-groups.ps1 (functie Invoke-Monitoring) – Voert een monitoringcontrole uit op Application Security Groups om te bepalen of ASG's correct zijn geconfigureerd, netwerkinterfaces correct zijn toegewezen, en NSG-regels correct gebruik maken van ASG's..

Operationele best practices voor Application Security Groups

Effectief beheer van Application Security Groups vereist consistente naamgevingsconventies, duidelijke documentatie en geautomatiseerde processen voor het toewijzen van netwerkinterfaces aan ASG's. Organisaties moeten een naamgevingsstandaard definiëren die duidelijk maakt welke workload-rol een ASG representeert, welke omgeving (productie, test, ontwikkeling) de ASG is bedoeld voor, en eventuele andere relevante metadata. Bijvoorbeeld, een ASG voor productie web servers zou kunnen worden genoemd 'asg-prod-web-servers', terwijl een ASG voor test applicatieservers 'asg-test-app-servers' zou kunnen worden genoemd. Deze naamgevingsconventies maken het gemakkelijker voor beheerders om te begrijpen welke workloads in welke ASG's zitten en welke beveiligingsregels van toepassing zijn, wat cruciaal is voor troubleshooting, audits en onboarding van nieuwe teamleden. Tags kunnen worden gebruikt om extra metadata toe te voegen aan ASG's, zoals eigenaar, kostenplaats, compliance-informatie, of verwijzingen naar architectuurdocumenten, wat helpt bij organisatie en beheer.

Automatisering van ASG-toewijzingen via Infrastructure as Code of deployment-scripts is essentieel voor het waarborgen van consistentie en het voorkomen van configuratiefouten. Wanneer nieuwe virtuele machines worden geïmplementeerd, moeten deployment-scripts automatisch de bijbehorende netwerkinterfaces toewijzen aan de juiste ASG's op basis van de rol of functie van de workload. Dit kan worden gedaan via ARM-templates, Terraform-configuraties, Azure CLI-scripts of PowerShell-scripts die worden uitgevoerd tijdens de deployment-pipeline. Automatisering vermindert het risico op handmatige fouten en zorgt ervoor dat alle workloads consistent zijn geconfigureerd, wat cruciaal is voor netwerkbeveiliging en compliance. Organisaties moeten ook overwegen om Azure Policy te gebruiken om af te dwingen dat nieuwe netwerkinterfaces worden toegewezen aan ASG's of dat specifieke ASG-naamgevingsconventies worden gevolgd, wat helpt om configuratiedrift te voorkomen en consistentie te waarborgen.

Regelmatige reviews en audits van ASG-configuraties zijn essentieel voor het handhaven van netwerkbeveiliging en het voorkomen van configuratiedrift. Organisaties moeten minimaal kwartaalgewijs een review uitvoeren van alle ASG's om te verifiëren dat ASG's nog steeds nodig zijn, correct zijn geconfigureerd, en dat netwerkinterfaces correct zijn toegewezen. Tijdens deze reviews moeten ongebruikte ASG's worden geïdentificeerd en verwijderd, netwerkinterfaces die niet aan ASG's zijn toegewezen moeten worden geïdentificeerd en toegewezen aan de juiste ASG's, en netwerkinterfaces die aan verkeerde ASG's zijn toegewezen moeten worden gecorrigeerd. Deze reviews moeten worden gedocumenteerd en gerapporteerd aan security- en risicocomités, en bevindingen moeten worden vertaald naar concrete verbeteracties met eigenaren en deadlines. Het gebruik van geautomatiseerde tools zoals Azure Policy en monitoring scripts kan helpen bij het identificeren van niet-compliant configuraties en het versnellen van het reviewproces.

Monitoring en logging van ASG-configuraties zijn belangrijk voor troubleshooting, compliance en security auditing. Organisaties moeten ervoor zorgen dat wijzigingen aan ASG-toewijzingen worden gelogd via Azure Activity Logs en dat deze logs worden bewaard voor de vereiste retentietermijnen (typisch 7 jaar voor Nederlandse overheidsorganisaties). Azure Monitor kan worden gebruikt om waarschuwingen te configureren die worden geactiveerd wanneer netwerkinterfaces worden toegewezen aan of verwijderd uit ASG's, wat helpt bij het detecteren van onbevoegde wijzigingen of configuratiefouten. Log Analytics Workspace kan worden gebruikt om queries uit te voeren op ASG-configuraties en wijzigingsgeschiedenis, wat helpt bij troubleshooting en audits. Organisaties moeten ook overwegen om regelmatige rapportages te genereren die aantonen welke workloads in welke ASG's zitten, welke NSG-regels van toepassing zijn, en of er netwerkinterfaces zijn die niet aan ASG's zijn toegewezen, wat helpt bij het identificeren van configuratiehiaten en het waarborgen van compliance.

Governance, compliance en verantwoording

Effectieve governance van Application Security Groups vereist duidelijke processen, gedefinieerde verantwoordelijkheden en continue monitoring. Organisaties moeten vastleggen wie verantwoordelijk is voor het beheer van ASG's, wie ASG's mag aanmaken of wijzigen, wie netwerkinterfaces mag toewijzen aan ASG's, en hoe wijzigingen worden gecontroleerd en goedgekeurd. Role-Based Access Control (RBAC) in Azure moet worden gebruikt om toegang te beperken tot alleen die personen en rollen die daadwerkelijk ASG-beheer nodig hebben. Het is aanbevolen om verschillende rollen te definiëren: ASG-beheerders die volledige controle hebben over ASG-configuraties, interfacebeheerders die netwerkinterfaces kunnen toewijzen aan ASG's maar geen ASG's kunnen aanmaken of verwijderen, en lezers die alleen monitoring en rapportage kunnen uitvoeren. Just-in-Time-toegang via Azure Privileged Identity Management kan worden gebruikt om beheeracties te beperken in tijd en scope, waardoor het risico van misbruik wordt verminderd.

Azure Policy kan worden gebruikt om consistente ASG-configuraties af te dwingen en te voorkomen dat niet-compliant configuraties worden geïmplementeerd. Organisaties kunnen policies definiëren die vereisen dat nieuwe netwerkinterfaces worden toegewezen aan ASG's, dat specifieke ASG-naamgevingsconventies worden gevolgd, of dat NSG-regels ASG's gebruiken in plaats van IP-adressen waar mogelijk. Deze policies kunnen worden toegepast op abonnements- of management group-niveau om ervoor te zorgen dat alle resources binnen de scope voldoen aan de gestelde eisen. Azure Policy biedt ook de mogelijkheid om automatische remediatie uit te voeren wanneer niet-compliant configuraties worden gedetecteerd, bijvoorbeeld door automatisch een netwerkinterface toe te wijzen aan een standaard-ASG wanneer deze niet aan een ASG is toegewezen. Deze geautomatiseerde aanpak vermindert de werklast voor IT-teams en zorgt voor consistente beveiliging, zelfs wanneer er frequente wijzigingen zijn aan de cloudomgeving.

Compliance met relevante frameworks zoals BIO, ISO 27001 en NIS2 vereist dat organisaties kunnen aantonen dat netwerkbeveiliging correct is geconfigureerd en effectief werkt. Application Security Groups dragen bij aan deze compliance door het mogelijk te maken om consistent beveiligingsbeleid toe te passen op workloads binnen een rol, ongeacht hun netwerklocatie, wat helpt bij het waarborgen van netwerksegmentatie en het beperken van laterale beweging. Tijdens audits moeten organisaties kunnen laten zien: dat ASG's correct zijn gedefinieerd en georganiseerd op basis van workload-rollen, dat netwerkinterfaces correct zijn toegewezen aan ASG's, dat NSG-regels correct gebruik maken van ASG's voor workload-gebaseerde beveiliging, dat ASG-configuraties regelmatig worden gereviewd en bijgewerkt, en dat er processen zijn voor het beheren van ASG-wijzigingen en het waarborgen van compliance. Het bijbehorende PowerShell-script kan worden gebruikt om compliance-rapportages te genereren die aantonen welke ASG's zijn gedefinieerd, hoe netwerkinterfaces zijn toegewezen, en of NSG-regels correct gebruik maken van ASG's. Deze rapportages moeten regelmatig worden gegenereerd en gedeeld met interne audit-teams, compliance-officers en externe auditors om transparantie te bieden en vertrouwen op te bouwen in de beveiligingsmaatregelen.

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 Azure Application Security Groups validatie en implementatie .DESCRIPTION Dit script ondersteunt Nederlandse overheidsorganisaties bij het valideren en implementeren van Application Security Groups (ASG's) in Azure-omgevingen. Het script controleert de status van alle ASG's, netwerkinterface-toewijzingen, en NSG-regels die ASG's gebruiken voor workload-gebaseerde netwerkbeveiliging. Het script is ontworpen om veilig lokaal of vanuit een beheerde automation-runner te draaien met READ-ONLY rechten voor monitoring, en met beperkte schrijfrechten voor remediatie. Het voert configuratiewijzigingen alleen uit na expliciete bevestiging of in WhatIf-modus. .NOTES Filename: application-security-groups.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-15 Version: 1.0 Related JSON: content/azure/network/application-security-groups.json Category: network Workload: azure .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\application-security-groups.ps1 -Monitoring Voert een read-only validatie uit van alle ASG's en toont een samenvatting van de huidige status. .EXAMPLE .\application-security-groups.ps1 -Remediation -WhatIf Genereert een rapport met concrete aanbevelingen zonder wijzigingen aan te brengen. .EXAMPLE .\application-security-groups.ps1 -ExportPath .\asg-report.json Exporteert de validatie- en aanbevelingsgegevens naar een JSON-bestand. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Network, Az.Compute, Az.Resources [CmdletBinding()] param( [Parameter(HelpMessage = "Voer een read-only validatie uit van alle Application Security Groups")] [switch]$Monitoring, [Parameter(HelpMessage = "Genereer aanbevelingen en implementeer ontbrekende ASG-configuraties")] [switch]$Remediation, [Parameter(HelpMessage = "Draai implementatiewijzigingen terug (indien mogelijk)")] [switch]$Revert, [Parameter(HelpMessage = "Toon welke acties zouden worden uitgevoerd zonder deze echt uit te voeren")] [switch]$WhatIf, [Parameter(HelpMessage = "Optioneel pad om resultaten als JSON te exporteren")] [string]$ExportPath ) $ErrorActionPreference = 'Stop' # ============================================================================ # HEADER # ============================================================================ Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Azure Application Security Groups – Validatie" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan # ============================================================================ # HULPFUNCTIES # ============================================================================ function Connect-NbvvcAzContext { <# .SYNOPSIS Zorgt voor een geldige Az-context voor leesacties .DESCRIPTION Probeert eerst een bestaande context te gebruiken. Als er geen context is, wordt Connect-AzAccount aangeroepen. Dit is geschikt voor lokale debug- scenario's met een interactieve sessie of een managed identity. #> [CmdletBinding()] param() try { $context = Get-AzContext -ErrorAction SilentlyContinue if (-not $context) { Write-Host "Geen actieve Azure-context gevonden. Probeer te verbinden..." -ForegroundColor Yellow Connect-AzAccount -ErrorAction Stop | Out-Null $context = Get-AzContext -ErrorAction Stop } Write-Host "Actieve Azure-context: $($context.Subscription.Name) [$($context.Subscription.Id)]" -ForegroundColor Gray return $context } catch { Write-Host "[FAIL] Kon geen geldige Azure-context verkrijgen: $_" -ForegroundColor Red throw } } function Get-NbvvcApplicationSecurityGroupStatus { <# .SYNOPSIS Verzamelt de status van alle Application Security Groups .DESCRIPTION Haalt de status op van ASG's, netwerkinterface-toewijzingen, en NSG-regels die ASG's gebruiken. De validatie is read-only en bedoeld als input voor verder architectuur- en compliancewerk. .OUTPUTS Hashtable met ASG-status per component #> [CmdletBinding()] param() $status = @{ timestamp = Get-Date subscriptionId = (Get-AzContext).Subscription.Id applicationSecurityGroups = @{ totalCount = 0 asgDetails = @() findings = @() } networkInterfaces = @{ totalCount = 0 assignedToAsg = 0 notAssignedToAsg = 0 assignmentDetails = @() findings = @() } nsgRules = @{ totalCount = 0 usingAsgSource = 0 usingAsgDestination = 0 usingAsgBoth = 0 findings = @() } overallScore = 0 } Write-Host "`nValidatie van Application Security Groups (read-only)..." -ForegroundColor Yellow # ASG's - Inventariseer alle Application Security Groups try { $asgs = Get-AzApplicationSecurityGroup -ErrorAction SilentlyContinue $status.applicationSecurityGroups.totalCount = $asgs.Count Write-Host " Application Security Groups: $($asgs.Count) gevonden" -ForegroundColor Gray foreach ($asg in $asgs) { $asgDetail = @{ name = $asg.Name resourceGroup = $asg.ResourceGroupName location = $asg.Location id = $asg.Id } # Zoek netwerkinterfaces die aan deze ASG zijn toegewezen $nics = Get-AzNetworkInterface -ErrorAction SilentlyContinue | Where-Object { $_.ApplicationSecurityGroups -and ($_.ApplicationSecurityGroups.Id -contains $asg.Id) } $asgDetail.assignedNetworkInterfaceCount = $nics.Count $status.applicationSecurityGroups.asgDetails += $asgDetail } if ($asgs.Count -eq 0) { $status.applicationSecurityGroups.findings += "Geen Application Security Groups gevonden; overweeg implementatie voor workload-gebaseerde netwerkbeveiliging." } else { $asgsWithoutAssignments = $status.applicationSecurityGroups.asgDetails | Where-Object { $_.assignedNetworkInterfaceCount -eq 0 } if ($asgsWithoutAssignments.Count -gt 0) { $status.applicationSecurityGroups.findings += "$($asgsWithoutAssignments.Count) ASG(s) gevonden zonder toegewezen netwerkinterfaces; overweeg toewijzing of verwijdering van ongebruikte ASG's." } } } catch { Write-Host " [WARN] Kon ASG-status niet volledig valideren: $_" -ForegroundColor Yellow $status.applicationSecurityGroups.findings += "Kon ASG-status niet volledig valideren; controleer rechten en Az.Network-module." } # Netwerkinterfaces - Controleer toewijzingen aan ASG's try { $allNics = Get-AzNetworkInterface -ErrorAction SilentlyContinue $status.networkInterfaces.totalCount = $allNics.Count Write-Host " Netwerkinterfaces: $($allNics.Count) gevonden" -ForegroundColor Gray foreach ($nic in $allNics) { if ($nic.ApplicationSecurityGroups -and $nic.ApplicationSecurityGroups.Count -gt 0) { $status.networkInterfaces.assignedToAsg++ $assignmentDetail = @{ networkInterfaceName = $nic.Name resourceGroup = $nic.ResourceGroupName assignedAsgNames = @() assignedAsgIds = @() } foreach ($asgRef in $nic.ApplicationSecurityGroups) { $assignmentDetail.assignedAsgIds += $asgRef.Id # Probeer ASG-naam op te halen try { $asg = Get-AzApplicationSecurityGroup -ResourceId $asgRef.Id -ErrorAction SilentlyContinue if ($asg) { $assignmentDetail.assignedAsgNames += $asg.Name } else { $assignmentDetail.assignedAsgNames += "ASG ID: $($asgRef.Id)" } } catch { $assignmentDetail.assignedAsgNames += "ASG ID: $($asgRef.Id)" } } $status.networkInterfaces.assignmentDetails += $assignmentDetail } else { $status.networkInterfaces.notAssignedToAsg++ } } if ($status.networkInterfaces.notAssignedToAsg -gt 0) { $percentageAssigned = [math]::Round(($status.networkInterfaces.assignedToAsg / $status.networkInterfaces.totalCount) * 100, 1) $status.networkInterfaces.findings += "$($status.networkInterfaces.notAssignedToAsg) netwerkinterface(s) ($([math]::Round(100 - $percentageAssigned, 1))%) zijn niet toegewezen aan een ASG; overweeg toewijzing voor workload-gebaseerde netwerkbeveiliging." } } catch { Write-Host " [WARN] Kon netwerkinterface-status niet volledig valideren: $_" -ForegroundColor Yellow $status.networkInterfaces.findings += "Kon netwerkinterface-status niet volledig valideren; controleer rechten en Az.Network-module." } # NSG-regels - Controleer gebruik van ASG's in NSG-regels try { $nsgs = Get-AzNetworkSecurityGroup -ErrorAction SilentlyContinue $totalRules = 0 $rulesUsingAsgSource = 0 $rulesUsingAsgDestination = 0 $rulesUsingAsgBoth = 0 foreach ($nsg in $nsgs) { if ($nsg.SecurityRules) { foreach ($rule in $nsg.SecurityRules) { $totalRules++ $sourceUsesAsg = $false $destinationUsesAsg = $false # Controleer of source ASG gebruikt if ($rule.SourceApplicationSecurityGroups -and $rule.SourceApplicationSecurityGroups.Count -gt 0) { $sourceUsesAsg = $true } # Controleer of destination ASG gebruikt if ($rule.DestinationApplicationSecurityGroups -and $rule.DestinationApplicationSecurityGroups.Count -gt 0) { $destinationUsesAsg = $true } if ($sourceUsesAsg -and $destinationUsesAsg) { $rulesUsingAsgBoth++ } elseif ($sourceUsesAsg) { $rulesUsingAsgSource++ } elseif ($destinationUsesAsg) { $rulesUsingAsgDestination++ } } } } $status.nsgRules.totalCount = $totalRules $status.nsgRules.usingAsgSource = $rulesUsingAsgSource $status.nsgRules.usingAsgDestination = $rulesUsingAsgDestination $status.nsgRules.usingAsgBoth = $rulesUsingAsgBoth Write-Host " NSG-regels: $totalRules totaal, $($rulesUsingAsgSource + $rulesUsingAsgDestination + $rulesUsingAsgBoth) gebruiken ASG's" -ForegroundColor Gray if ($totalRules -gt 0 -and ($rulesUsingAsgSource + $rulesUsingAsgDestination + $rulesUsingAsgBoth) -eq 0) { $status.nsgRules.findings += "Geen NSG-regels gevonden die ASG's gebruiken; overweeg migratie van IP-gebaseerde regels naar ASG-gebaseerde regels voor betere onderhoudbaarheid." } elseif ($totalRules -gt 0) { $percentageUsingAsg = [math]::Round((($rulesUsingAsgSource + $rulesUsingAsgDestination + $rulesUsingAsgBoth) / $totalRules) * 100, 1) if ($percentageUsingAsg -lt 50) { $status.nsgRules.findings += "Slechts $percentageUsingAsg% van NSG-regels gebruikt ASG's; overweeg migratie van IP-gebaseerde regels naar ASG-gebaseerde regels." } } } catch { Write-Host " [WARN] Kon NSG-regel-status niet volledig valideren: $_" -ForegroundColor Yellow $status.nsgRules.findings += "Kon NSG-regel-status niet volledig valideren; controleer rechten en Az.Network-module." } # Bereken overall score $scoreComponents = 0 $scoreTotal = 0 if ($status.applicationSecurityGroups.totalCount -gt 0) { $scoreComponents++ } $scoreTotal++ if ($status.networkInterfaces.totalCount -gt 0) { $percentageAssigned = ($status.networkInterfaces.assignedToAsg / $status.networkInterfaces.totalCount) * 100 if ($percentageAssigned -ge 80) { $scoreComponents++ } $scoreTotal++ } if ($status.nsgRules.totalCount -gt 0) { $percentageUsingAsg = (($status.nsgRules.usingAsgSource + $status.nsgRules.usingAsgDestination + $status.nsgRules.usingAsgBoth) / $status.nsgRules.totalCount) * 100 if ($percentageUsingAsg -ge 50) { $scoreComponents++ } $scoreTotal++ } if ($scoreTotal -gt 0) { $status.overallScore = [math]::Round(($scoreComponents / $scoreTotal) * 100, 1) } return $status } function Invoke-Monitoring { <# .SYNOPSIS Voert een read-only ASG-validatie uit .DESCRIPTION Gebruikt statuscontroles om inzicht te geven in de huidige ASG-implementatie per component. Dit helpt bij het prioriteren van implementatietrajecten en het identificeren van gaten in de beveiliging. .OUTPUTS Hashtable met samenvattende metrics en status per component #> [CmdletBinding()] param() $null = Connect-NbvvcAzContext $status = Get-NbvvcApplicationSecurityGroupStatus Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "SAMENVATTING ASG STATUS" -ForegroundColor Cyan Write-Host " Overall Score : $($status.overallScore)%" -ForegroundColor White Write-Host "`n Application Security Groups:" -ForegroundColor Yellow Write-Host " Totaal aantal ASG's : $($status.applicationSecurityGroups.totalCount)" -ForegroundColor Gray if ($status.applicationSecurityGroups.asgDetails.Count -gt 0) { Write-Host " ASG-details:" -ForegroundColor Gray foreach ($asgDetail in $status.applicationSecurityGroups.asgDetails) { Write-Host " - $($asgDetail.name) ($($asgDetail.resourceGroup)): $($asgDetail.assignedNetworkInterfaceCount) netwerkinterface(s)" -ForegroundColor Gray } } Write-Host "`n Netwerkinterfaces:" -ForegroundColor Yellow Write-Host " Totaal aantal : $($status.networkInterfaces.totalCount)" -ForegroundColor Gray Write-Host " Toegewezen aan ASG : $($status.networkInterfaces.assignedToAsg)" -ForegroundColor Gray Write-Host " Niet toegewezen : $($status.networkInterfaces.notAssignedToAsg)" -ForegroundColor Gray Write-Host "`n NSG-regels:" -ForegroundColor Yellow Write-Host " Totaal aantal regels : $($status.nsgRules.totalCount)" -ForegroundColor Gray Write-Host " Met ASG als bron : $($status.nsgRules.usingAsgSource)" -ForegroundColor Gray Write-Host " Met ASG als doel : $($status.nsgRules.usingAsgDestination)" -ForegroundColor Gray Write-Host " Met ASG als beide : $($status.nsgRules.usingAsgBoth)" -ForegroundColor Gray $allFindings = @() $allFindings += $status.applicationSecurityGroups.findings $allFindings += $status.networkInterfaces.findings $allFindings += $status.nsgRules.findings if ($allFindings.Count -gt 0) { Write-Host "`nAandachtspunten:" -ForegroundColor Yellow foreach ($f in $allFindings) { Write-Host " - $f" -ForegroundColor Yellow } } else { Write-Host "`nGeen specifieke aandachtspunten gedetecteerd op basis van deze scan." -ForegroundColor Green } return @{ status = $status } } function Invoke-Remediation { <# .SYNOPSIS Genereert ASG-aanbevelingen en implementeert ontbrekende configuraties .DESCRIPTION Op basis van de statusvalidatie worden concrete aanbevelingen gegenereerd voor vervolgstappen zoals het implementeren van ontbrekende ASG's of het toewijzen van netwerkinterfaces aan ASG's. Het script voert configuratiewijzigingen alleen uit na expliciete bevestiging of in WhatIf-modus. #> [CmdletBinding(SupportsShouldProcess)] param( [string]$ReportPath ) if ($WhatIf) { Write-Host "`nWhatIf: er wordt een aanbevelingsrapport gegenereerd op basis van statusvalidatie, maar er vinden geen wijzigingen plaats." -ForegroundColor Yellow } $result = Invoke-Monitoring $status = $result.status $recommendations = @() if ($status.applicationSecurityGroups.totalCount -eq 0) { $recommendations += "Implementeer Application Security Groups voor workload-gebaseerde netwerkbeveiliging, bijvoorbeeld: asg-web-servers, asg-app-servers, asg-database-servers." } elseif ($status.applicationSecurityGroups.asgDetails | Where-Object { $_.assignedNetworkInterfaceCount -eq 0 }) { $recommendations += "Wijs netwerkinterfaces toe aan bestaande ASG's of verwijder ongebruikte ASG's om configuratiecomplexiteit te verminderen." } if ($status.networkInterfaces.notAssignedToAsg -gt 0) { $percentageAssigned = [math]::Round(($status.networkInterfaces.assignedToAsg / $status.networkInterfaces.totalCount) * 100, 1) $recommendations += "Wijs $($status.networkInterfaces.notAssignedToAsg) netwerkinterface(s) ($([math]::Round(100 - $percentageAssigned, 1))%) toe aan passende ASG's op basis van workload-rollen." } if ($status.nsgRules.totalCount -gt 0 -and ($status.nsgRules.usingAsgSource + $status.nsgRules.usingAsgDestination + $status.nsgRules.usingAsgBoth) -eq 0) { $recommendations += "Migreer IP-gebaseerde NSG-regels naar ASG-gebaseerde regels voor betere onderhoudbaarheid en flexibiliteit." } elseif ($status.nsgRules.totalCount -gt 0) { $percentageUsingAsg = [math]::Round((($status.nsgRules.usingAsgSource + $status.nsgRules.usingAsgDestination + $status.nsgRules.usingAsgBoth) / $status.nsgRules.totalCount) * 100, 1) if ($percentageUsingAsg -lt 50) { $recommendations += "Overweeg migratie van IP-gebaseerde NSG-regels naar ASG-gebaseerde regels (momenteel gebruikt $percentageUsingAsg% ASG's)." } } if ($recommendations.Count -eq 0) { $recommendations += "Geen specifieke aanbevelingen op basis van deze scan; voer een diepgaand netwerkarchitectuur-assessment uit voor optimalisatie." } Write-Host "`nAanbevolen vervolgstappen:" -ForegroundColor Cyan foreach ($rec in $recommendations) { Write-Host " - $rec" -ForegroundColor White } $report = @{ generatedAt = Get-Date subscriptionId = $status.subscriptionId overallScore = $status.overallScore asgStatus = @{ status = $status recommendations = $recommendations } } $targetPath = $null if ($PSBoundParameters.ContainsKey("ReportPath") -and $ReportPath) { $targetPath = $ReportPath } elseif ($ExportPath) { $targetPath = $ExportPath } if ($targetPath) { if ($PSCmdlet.ShouldProcess($targetPath, "Schrijf ASG-rapport naar JSON-bestand")) { $report | ConvertTo-Json -Depth 6 | Out-File -FilePath $targetPath -Encoding UTF8 Write-Host "`n[OK] Rapport geschreven naar: $targetPath" -ForegroundColor Green } } } function Invoke-Revert { <# .SYNOPSIS Draai implementatiewijzigingen terug .DESCRIPTION Dit script voert configuratiewijzigingen alleen uit na expliciete bevestiging. Revert-functionaliteit is beperkt omdat ASG-implementaties complex zijn en handmatige interventie vereisen. De functie is aanwezig voor consistentie met andere scripts binnen de Nederlandse Baseline voor Veilige Cloud. #> [CmdletBinding(SupportsShouldProcess)] param() Write-Host "`nASG-implementaties vereisen handmatige interventie voor revert-operaties." -ForegroundColor Yellow Write-Host "Raadpleeg de documentatie en Azure-portal voor specifieke revert-stappen per component." -ForegroundColor Gray } function Invoke-Implementation { <# .SYNOPSIS Implementeert Application Security Groups .DESCRIPTION Deze functie is een alias voor Invoke-Remediation voor consistentie met andere scripts binnen de Nederlandse Baseline voor Veilige Cloud. #> [CmdletBinding()] param() Invoke-Remediation } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { if ($Revert) { Invoke-Revert } elseif ($Remediation) { Invoke-Remediation -ReportPath $ExportPath } elseif ($Monitoring) { $null = Invoke-Monitoring } else { Write-Host "Beschikbare parameters:" -ForegroundColor Yellow Write-Host " -Monitoring : Voer een read-only ASG-validatie uit" -ForegroundColor Gray Write-Host " -Remediation : Genereer ASG-aanbevelingen (geen wijzigingen)" -ForegroundColor Gray Write-Host " -Revert : Beperkte revert-functionaliteit (handmatige interventie vereist)" -ForegroundColor Gray Write-Host " -WhatIf : Toon welke acties logisch zouden zijn zonder uitvoer" -ForegroundColor Gray Write-Host " -ExportPath : Optioneel pad voor JSON-rapport" -ForegroundColor Gray Write-Host "`nVoorbeeld: .\application-security-groups.ps1 -Monitoring" -ForegroundColor Cyan } } catch { Write-Error "Scriptuitvoering mislukt: $_" exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # Exitcodes: # 0 = Succesvolle uitvoering # 2 = Fout tijdens uitvoering

Risico zonder implementatie

Risico zonder implementatie
Medium: Zonder Application Security Groups blijven organisaties afhankelijk van IP-gebaseerde NSG-regels die aanzienlijke operationele uitdagingen en beveiligingsrisico's creëren in moderne cloudomgevingen. Wanneer workloads worden verplaatst of IP-adressen wijzigen, moeten NSG-regels handmatig worden bijgewerkt, wat foutgevoelig en tijdrovend is. Deze handmatige updates creëren het risico dat verouderde regels achterblijven die beveiligingsgaten creëren of legitiem verkeer blokkeren. Bovendien maakt IP-gebaseerde configuratie het moeilijk om consistent beveiligingsbeleid toe te passen op workloads met vergelijkbare functies maar verschillende IP-adressen, wat leidt tot inconsistente beveiliging en verhoogd risico op configuratiefouten.

Management Samenvatting

Application Security Groups bieden een moderne, schaalbare benadering van netwerkbeveiliging die beveiligingsregels definieert op basis van workload-identiteit in plaats van statische IP-adressen. Deze aanpak elimineert operationele uitdagingen met IP-gebaseerde regels, maakt netwerkbeveiliging beter schaalbaar en onderhoudbaar, en helpt organisaties om consistent beveiligingsbeleid toe te passen op alle workloads binnen een rol. Het bijbehorende PowerShell-script inventariseert automatisch welke ASG's zijn gedefinieerd, hoe netwerkinterfaces zijn toegewezen, en of NSG-regels correct gebruik maken van ASG's, zodat configuratiehiaten snel zichtbaar worden. De benodigde inspanning is beperkt (circa 32 uur initiële implementatie), terwijl de operationele voordelen en verbeterde beveiliging aanzienlijk zijn voor alle netwerkgebaseerde workloads in Azure.