Azure Kubernetes Service Security Baseline: Complete Beveiligingsconfiguratie Voor AKS-clusters

💼 Management Samenvatting

Een complete security baseline voor Azure Kubernetes Service-clusters omvat een uitgebreide set beveiligingsconfiguraties die samen zorgen voor een verdedigingslaag tegen bedreigingen, naleving van compliance-vereisten en operationele beveiliging. Deze baseline integreert meerdere Azure-services en Kubernetes-native beveiligingsmechanismen om een holistische beveiligingspostuur te creëren die voldoet aan internationale standaarden zoals CIS Kubernetes Benchmark, BIO-normen en NIS2-vereisten.

Aanbeveling
IMPLEMENTEER COMPLETE AKS SECURITY BASELINE VOOR ALLE CLUSTERS
Risico zonder
High
Risk Score
9/10
Implementatie
200u (tech: 120u)
Van toepassing op:
Azure Kubernetes Service (AKS)
Azure Container Registry (ACR)
Azure Policy
Azure Defender for Cloud

Azure Kubernetes Service-clusters vormen het hart van moderne container-gebaseerde applicaties, maar introduceren complexe beveiligingsuitdagingen die verder gaan dan traditionele VM-beveiliging. Kubernetes-clusters hebben unieke aanvalsoppervlakken: de API-server die toegankelijk is via het internet, container workloads die de host kernel delen, netwerkcommunicatie tussen pods die traditionele firewallregels omzeilt, en RBAC-configuraties die bij foutieve instelling leiden tot privilege escalation. Zonder een complete security baseline blijven clusters kwetsbaar voor aanvallen zoals container breakout, privilege escalation, ongeautoriseerde toegang tot secrets, cryptomining, en datalekken. Nederlandse overheidsorganisaties moeten kunnen aantonen dat hun AKS-clusters voldoen aan strikte beveiligingsstandaarden voor compliance met BIO, ISO 27001 en NIS2. Een incomplete of inconsistente beveiligingsconfiguratie kan leiden tot auditbevindingen, toezichtsancties en in het ergste geval tot compromittatie van kritieke workloads en persoonsgegevens.

PowerShell Modules Vereist
Primary API: Azure API
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.Resources, Az.Aks, Az.Policy, Az.Security

Implementatie

Dit artikel beschrijft een complete security baseline voor AKS-clusters die alle essentiële beveiligingsaspecten afdekt. U leert hoe u pod security standards configureert om te voorkomen dat containers met verhoogde privileges worden uitgevoerd, hoe u network policies implementeert voor micro-segmentatie tussen workloads, en hoe u RBAC-beleid afdwingt om toegang tot clusterresources te beperken. Daarnaast behandelen we de integratie van Azure Policy voor Kubernetes om beveiligingsstandaarden centraal af te dwingen, de configuratie van secrets management met Azure Key Vault, en de implementatie van Defender for Containers voor runtime-beveiliging. De baseline omvat ook logging en monitoring-configuraties, image-scanning voor kwetsbaarheden, en disaster recovery-maatregelen. We behandelen zowel technische implementatiestappen als governance-processen voor het onderhouden van de baseline over tijd, inclusief hoe u compliance kunt aantonen richting auditors en toezichthouders.

Overzicht van de AKS Security Baseline-componenten

De AKS Security Baseline bestaat uit meerdere geïntegreerde beveiligingslagen die samen een complete verdediging vormen tegen verschillende typen bedreigingen. De eerste laag betreft clusterconfiguratie en hardening: dit omvat het configureren van de Kubernetes API-server met private endpoints om blootstelling aan het internet te minimaliseren, het inschakelen van Azure AD-integratie voor geauthenticeerde toegang tot clusters, en het configureren van autorized IP ranges om API-server toegang te beperken tot vertrouwde netwerken. Daarnaast moeten node pools worden geconfigureerd met de nieuwste Kubernetes-versies, security updates moeten automatisch worden toegepast, en node images moeten regelmatig worden bijgewerkt om bekende kwetsbaarheden te patchen. Deze basisconfiguraties vormen de fundering waarop alle andere beveiligingsmaatregelen zijn gebouwd.

Pod security standards vormen een kritieke component van de baseline omdat zij voorkomen dat containers met onnodige privileges worden uitgevoerd. Kubernetes biedt drie pod security levels: privileged, baseline en restricted. De security baseline vereist dat alle workloads worden uitgevoerd met de restricted policy, wat betekent dat containers niet als root draaien, geen privileged containers zijn, geen host namespaces gebruiken, en geen host paths mounten. Voor workloads die legitiem verhoogde privileges nodig hebben, zoals system components of monitoring agents, moeten expliciete uitzonderingen worden gedocumenteerd en goedgekeurd door security teams. Azure Policy voor Kubernetes kan worden gebruikt om deze standaarden automatisch af te dwingen, zodat workloads die niet voldoen aan de policy worden geblokkeerd voordat ze worden geïmplementeerd.

Network policies implementeren micro-segmentatie binnen het cluster door te bepalen welke pods met elkaar mogen communiceren. Zonder network policies kunnen alle pods in een cluster met elkaar communiceren, wat betekent dat een gecompromitteerde workload toegang heeft tot alle andere workloads in het cluster. De security baseline vereist dat network policies worden geconfigureerd volgens het principe van least privilege: workloads mogen alleen communiceren met andere workloads waarmee zij legitiem moeten communiceren. Dit wordt typisch geïmplementeerd door network policies te definiëren per namespace, waarbij ingress en egress regels expliciet worden gespecificeerd op basis van pod labels en namespaces. Azure Network Policy of Calico kunnen worden gebruikt als de network policy engine, afhankelijk van de clusterconfiguratie.

RBAC-configuratie is essentieel om te voorkomen dat gebruikers of service accounts onbevoegde toegang krijgen tot clusterresources. De baseline vereist dat RBAC is ingeschakeld en dat alle toegang wordt beheerd via Azure AD-integratie, zodat gebruikers worden geauthenticeerd via hun Azure AD-identiteiten en toegang wordt gecontroleerd via Kubernetes role bindings. Service accounts moeten minimale rechten hebben en mogen geen cluster-admin rechten hebben tenzij dit absoluut noodzakelijk is. Daarnaast moeten regular access reviews worden uitgevoerd om te verifiëren dat gebruikers alleen de rechten hebben die zij nodig hebben voor hun rol. Azure Policy kan worden gebruikt om te controleren dat geen workloads worden uitgevoerd met cluster-admin rechten en dat service accounts correct zijn geconfigureerd.

Secrets management vormt een andere kritieke component omdat containers vaak toegang nodig hebben tot gevoelige informatie zoals database-verbindingsstrings, API-keys of certificaten. De baseline vereist dat secrets nooit hardcoded zijn in container images of configuratiebestanden, maar worden beheerd via Azure Key Vault of Kubernetes secrets. Azure Key Vault Provider voor Secrets Store CSI Driver kan worden gebruikt om secrets dynamisch te injecteren in pods zonder dat deze in het cluster worden opgeslagen. Dit vermindert het risico dat secrets worden blootgesteld in etcd of in container logs. Daarnaast moeten secrets worden geroteerd volgens een vastgesteld schema, en moeten toegangsrechten worden gecontroleerd om te verifiëren dat alleen geautoriseerde workloads toegang hebben tot specifieke secrets.

Runtime-beveiliging wordt geleverd door Defender for Containers, dat continu monitort op verdachte activiteiten binnen containers en op cluster-niveau. Dit omvat detectie van privilege escalation-pogingen, container breakout-aanvallen, cryptomining-activiteiten, en ongeautoriseerde toegang tot secrets. Image-scanning wordt uitgevoerd via Azure Container Registry-integratie, waarbij alle container images automatisch worden gescand op bekende kwetsbaarheden voordat ze worden gebruikt in productieclusters. Logging en monitoring worden geconfigureerd via Azure Monitor en Log Analytics, waarbij alle beveiligingsgebeurtenissen worden vastgelegd voor forensische analyse en compliance-rapportage. Door deze componenten samen te integreren, ontstaat een complete security baseline die bescherming biedt tegen een breed scala aan bedreigingen terwijl compliance-vereisten worden ondersteund.

Stapsgewijze implementatie van de AKS Security Baseline

De implementatie van de AKS Security Baseline begint met een assessment van de huidige clusterconfiguratie om te identificeren welke beveiligingsmaatregelen al zijn geïmplementeerd en welke nog ontbreken. Het PowerShell-script dat bij dit artikel hoort, kan worden gebruikt om een complete inventarisatie te maken van alle AKS-clusters, hun huidige beveiligingsconfiguraties, en eventuele afwijkingen ten opzichte van de baseline. Deze assessment moet worden uitgevoerd voor alle clusters in alle omgevingen, inclusief development, test en productie. Op basis van de resultaten kan een prioritering worden gemaakt: kritieke productieclusters moeten als eerste worden geconfigureerd volgens de baseline, gevolgd door test- en development-omgevingen.

De eerste implementatiestap betreft het configureren van de clusterfundamenten: API-server beveiliging, Azure AD-integratie en autorized IP ranges. Voor bestaande clusters kan dit betekenen dat clusters moeten worden bijgewerkt of opnieuw moeten worden geconfigureerd, wat mogelijk downtime met zich meebrengt. Daarom is het belangrijk om deze wijzigingen te plannen tijdens onderhoudsvensters en om te testen in niet-productieomgevingen voordat wijzigingen worden doorgevoerd in productie. Voor nieuwe clusters moeten deze configuraties vanaf het begin worden toegepast, zodat zij direct voldoen aan de baseline. Infrastructure as Code-templates zoals Bicep of Terraform moeten worden bijgewerkt om ervoor te zorgen dat nieuwe clusters automatisch worden geconfigureerd volgens de baseline.

Pod security standards worden geïmplementeerd door een pod security policy of pod security admission controller te configureren op namespace-niveau. Voor nieuwe namespaces kan de restricted policy direct worden toegepast, maar voor bestaande workloads moet eerst worden geanalyseerd welke workloads legitiem verhoogde privileges nodig hebben en welke kunnen worden aangepast om te voldoen aan de restricted policy. Dit kan betekenen dat applicaties moeten worden aangepast om niet als root te draaien, dat host paths moeten worden vervangen door volumes, of dat privileged containers moeten worden vervangen door alternatieve configuraties. Azure Policy voor Kubernetes kan worden gebruikt om deze standaarden af te dwingen, waarbij workloads die niet voldoen worden geblokkeerd of worden gemarkeerd voor review.

Network policies worden geïmplementeerd door eerst een netwerkarchitectuur te definiëren die aangeeft welke workloads met elkaar moeten kunnen communiceren. Dit vereist samenwerking tussen development teams, netwerkbeheerders en security teams om te begrijpen welke communicatiepatronen legitiem zijn. Vervolgens worden network policies gedefinieerd per namespace, waarbij ingress en egress regels worden gespecificeerd op basis van pod labels. Het is belangrijk om te beginnen met een permissive policy en deze geleidelijk aan te scherpen, omdat te restrictieve policies kunnen leiden tot het breken van legitieme communicatie. Testing is essentieel om te verifiëren dat workloads nog steeds correct functioneren nadat network policies zijn geïmplementeerd.

RBAC-configuratie wordt geïmplementeerd door Azure AD-integratie in te schakelen en vervolgens role bindings te definiëren die gebruikers en service accounts de minimale rechten geven die zij nodig hebben. Dit vereist een analyse van wie toegang nodig heeft tot welke resources en welke acties zij moeten kunnen uitvoeren. Voor Nederlandse overheidsorganisaties is het belangrijk om te voldoen aan het principe van scheiding van taken, waarbij bijvoorbeeld developers geen toegang hebben tot productieclusters en operations teams geen toegang hebben tot development-omgevingen. Regular access reviews moeten worden ingericht om te verifiëren dat toegangsrechten nog steeds correct zijn en dat voormalige medewerkers of service accounts geen toegang meer hebben.

Secrets management wordt geïmplementeerd door Azure Key Vault te configureren en de Secrets Store CSI Driver te installeren in het cluster. Vervolgens moeten applicaties worden aangepast om secrets te lezen vanuit Key Vault in plaats van hardcoded waarden of Kubernetes secrets. Dit kan betekenen dat applicatiecode moet worden aangepast, wat coördinatie vereist met development teams. Daarnaast moeten secret rotation-processen worden ingericht om ervoor te zorgen dat secrets regelmatig worden bijgewerkt. Monitoring moet worden geconfigureerd om te detecteren wanneer secrets worden gebruikt of wanneer ongeautoriseerde toegang wordt geprobeerd.

Defender for Containers en image-scanning worden geïmplementeerd door de Defender extensie in te schakelen op elk cluster en door ACR-integratie te configureren voor automatische scanning. Monitoring en alerting moeten worden geconfigureerd om security teams te informeren wanneer bedreigingen worden gedetecteerd of wanneer kwetsbare images worden gebruikt. Ten slotte moeten alle configuraties worden gedocumenteerd, inclusief welke policies zijn toegepast, welke uitzonderingen zijn gemaakt en waarom, en wie verantwoordelijk is voor het onderhoud van elke component. Deze documentatie is essentieel voor compliance-audits en voor het overdragen van kennis binnen de organisatie.

Monitoring en continue bewaking van de security baseline

Gebruik PowerShell-script aks-security-baseline.ps1 (functie Invoke-Monitoring) – Controleert de compliance van AKS-clusters met de security baseline en rapporteert over afwijkingen en beveiligingsstatus..

Continue monitoring van de AKS Security Baseline is essentieel om te waarborgen dat clusters blijven voldoen aan beveiligingsstandaarden en om tijdig te kunnen reageren op configuratiewijzigingen of nieuwe bedreigingen. Het monitoringproces omvat het regelmatig controleren van clusterconfiguraties, het analyseren van beveiligingswaarschuwingen, het beoordelen van compliance-status, en het rapporteren van bevindingen aan management en security teams. Het PowerShell-script dat bij dit artikel hoort, kan worden gebruikt om een gestructureerde assessment uit te voeren van alle clusters en om rapporten te genereren die kunnen worden gebruikt voor compliance-doeleinden.

Clusterconfiguratie-monitoring omvat het controleren van API-server instellingen, node pool configuraties, en add-on status. Dit moet regelmatig worden uitgevoerd, bijvoorbeeld wekelijks of maandelijks, om te detecteren wanneer configuraties zijn gewijzigd of wanneer nieuwe clusters zijn toegevoegd die nog niet voldoen aan de baseline. Azure Policy kan worden gebruikt om configuraties automatisch te controleren en om waarschuwingen te genereren wanneer afwijkingen worden gedetecteerd. Daarnaast moeten wijzigingen in clusterconfiguraties worden gelogd en geaudit, zodat kan worden achterhaald wie welke wijzigingen heeft doorgevoerd en waarom. Dit is belangrijk voor compliance en voor het onderzoeken van beveiligingsincidenten.

Beveiligingswaarschuwingen van Defender for Containers moeten dagelijks worden beoordeeld door security teams. Deze waarschuwingen kunnen wijzen op actieve bedreigingen, misconfiguraties, of verdachte activiteiten binnen clusters. Elke waarschuwing moet worden geanalyseerd om te bepalen of het een false positive is of een echte bedreiging, en voor echte bedreigingen moeten onmiddellijk mitigatiemaatregelen worden genomen. Waarschuwingen moeten worden geprioriteerd op basis van ernst en impact, waarbij kritieke waarschuwingen automatisch worden doorgestuurd naar incident response teams. Trendanalyse kan worden gebruikt om patronen te identificeren, zoals welke typen bedreigingen het meest voorkomen of welke workloads het meest kwetsbaar zijn.

Compliance-monitoring omvat het regelmatig controleren of clusters voldoen aan de verschillende compliance-vereisten, zoals CIS Kubernetes Benchmark, BIO-normen, of ISO 27001-controles. Het PowerShell-script genereert compliance-rapporten die kunnen worden gebruikt om aan te tonen dat clusters voldoen aan deze vereisten. Deze rapporten moeten worden opgeslagen en bewaard voor de vereiste bewaartermijn, conform Nederlandse archiefwetgeving. Daarnaast moeten regelmatig compliance-audits worden uitgevoerd, waarbij externe auditors of interne auditteams de configuraties controleren en verifiëren dat de baseline correct is geïmplementeerd en onderhouden.

Image-scanning resultaten moeten regelmatig worden beoordeeld om te identificeren welke container images kwetsbaarheden bevatten en welke acties nodig zijn om deze kwetsbaarheden te verhelpen. Voor kritieke kwetsbaarheden moeten automatische waarschuwingen worden geconfigureerd, zodat teams onmiddellijk worden geïnformeerd wanneer kwetsbare images worden gebruikt. Scanresultaten moeten worden geïntegreerd in CI/CD-pipelines, zodat nieuwe images automatisch worden gescand voordat ze worden geïmplementeerd en zodat deployments kunnen worden geblokkeerd wanneer kritieke kwetsbaarheden worden gevonden. Trendanalyse kan worden gebruikt om te identificeren welke images het meest kwetsbaar zijn en welke development teams het meest aandacht nodig hebben voor security training.

Access review monitoring omvat het regelmatig controleren van RBAC-configuraties om te verifiëren dat gebruikers en service accounts alleen de rechten hebben die zij nodig hebben. Dit moet minstens kwartaal worden uitgevoerd, waarbij wordt gecontroleerd wie toegang heeft tot welke clusters, welke rechten zij hebben, en of deze rechten nog steeds gerechtvaardigd zijn. Voormalige medewerkers of service accounts die niet langer worden gebruikt, moeten worden verwijderd. Azure AD access reviews kunnen worden gebruikt om dit proces te automatiseren, waarbij gebruikers periodiek worden gevraagd om hun toegang te bevestigen. Daarnaast moeten alle toegangswijzigingen worden gelogd en geaudit, zodat kan worden achterhaald wie toegang heeft gekregen of verloren en waarom.

Ten slotte moet de algehele beveiligingspostuur regelmatig worden geëvalueerd om te identificeren waar verbeteringen mogelijk zijn. Dit omvat het analyseren van beveiligingsincidenten om te leren welke maatregelen effectief waren en welke niet, het beoordelen van nieuwe bedreigingen en kwetsbaarheden om te bepalen of aanvullende maatregelen nodig zijn, en het evalueren van de effectiviteit van bestaande beveiligingsmaatregelen. Door monitoring op deze manier te structureren, ontstaat een volwassen beveiligingsbewaking die zowel operationele stabiliteit als compliance-vereisten ondersteunt, en die continu verbetert op basis van lessons learned en nieuwe inzichten.

Remediatie en verbetering van baseline-compliance

Gebruik PowerShell-script aks-security-baseline.ps1 (functie Invoke-Remediation) – Geeft aanbevelingen voor het verbeteren van de security baseline-compliance van AKS-clusters en ondersteunt het opstellen van remediatieplannen..

Wanneer monitoring uitwijst dat clusters niet volledig voldoen aan de security baseline, of wanneer beveiligingswaarschuwingen worden gedetecteerd, moet gestructureerde remediatie plaatsvinden. Het remediatieproces begint met het identificeren van de specifieke afwijkingen: welke configuraties voldoen niet aan de baseline, welke beveiligingswaarschuwingen zijn gedetecteerd, en wat is de potentiële impact van deze afwijkingen? Het PowerShell-script kan helpen bij het identificeren van configuratie-afwijkingen, maar voor het analyseren van beveiligingswaarschuwingen en het bepalen van de juiste remediatiestappen is expertise van security teams noodzakelijk.

Voor configuratie-afwijkingen moet eerst worden bepaald of de afwijking het gevolg is van een bewuste uitzondering of van een onbedoelde configuratiefout. Bewuste uitzonderingen moeten worden gedocumenteerd, goedgekeurd door security teams, en regelmatig worden gereviewed om te verifiëren dat de uitzondering nog steeds gerechtvaardigd is. Onbedoelde configuratiefouten moeten worden gecorrigeerd, waarbij moet worden overwogen of de wijziging direct kan worden doorgevoerd of dat eerst moet worden getest in een niet-productieomgeving. Voor kritieke productieclusters kan het nodig zijn om wijzigingen te plannen tijdens onderhoudsvensters om downtime te minimaliseren.

Wanneer beveiligingswaarschuwingen worden gedetecteerd, moet een gestructureerd incident response-proces worden gevolgd. Dit begint met het analyseren van de waarschuwing om te begrijpen wat er precies is gedetecteerd, welke workloads zijn betrokken, en wat de potentiële impact is. Vervolgens moet worden bepaald of de waarschuwing een false positive is of een echte bedreiging. Voor echte bedreigingen moeten onmiddellijk mitigatiemaatregelen worden genomen, zoals het isoleren van betrokken workloads, het blokkeren van verdachte netwerkverbindingen, of het verwijderen van gecompromitteerde containers. Daarnaast moet worden onderzocht hoe de bedreiging heeft kunnen plaatsvinden en welke aanvullende beveiligingsmaatregelen nodig zijn om herhaling te voorkomen.

Voor kwetsbaarheden die worden gedetecteerd in container images, moet een proces zijn ingericht voor het bijwerken of vervangen van kwetsbare images. Dit begint met het identificeren van welke workloads gebruik maken van kwetsbare images en wat de impact is van het bijwerken van deze images. Vervolgens moeten development teams worden geïnformeerd zodat zij nieuwe versies van images kunnen bouwen zonder de gedetecteerde kwetsbaarheden. Deze nieuwe images moeten opnieuw worden gescand om te verifiëren dat de kwetsbaarheden zijn opgelost voordat ze worden geïmplementeerd in productie. Voor kritieke kwetsbaarheden kan het noodzakelijk zijn om tijdelijk workloads te stoppen of te isoleren totdat patches beschikbaar zijn. Door dit proces te automatiseren via CI/CD-pipelines en policy enforcement, kunnen organisaties snel reageren op kwetsbaarheden.

RBAC-remediatie omvat het verwijderen van onnodige toegangsrechten, het corrigeren van misconfiguraties, en het verifiëren dat service accounts minimale rechten hebben. Dit moet zorgvuldig worden uitgevoerd om te voorkomen dat legitieme workloads worden gebroken door het verwijderen van benodigde rechten. Testing is essentieel om te verifiëren dat workloads nog steeds correct functioneren nadat RBAC-wijzigingen zijn doorgevoerd. Daarnaast moeten access reviews worden uitgevoerd om te verifiëren dat alle gebruikers en service accounts nog steeds de juiste rechten hebben en dat voormalige medewerkers of ongebruikte service accounts zijn verwijderd.

Network policy-remediatie omvat het corrigeren van te permissive policies of het toevoegen van ontbrekende policies. Dit moet geleidelijk worden uitgevoerd om te voorkomen dat legitieme communicatie wordt gebroken. Testing is essentieel om te verifiëren dat workloads nog steeds correct kunnen communiceren nadat network policies zijn aangepast. Daarnaast moeten network policies regelmatig worden gereviewed om te verifiëren dat zij nog steeds correct zijn en dat zij voldoen aan de security baseline. Voor nieuwe workloads moeten network policies worden gedefinieerd voordat de workloads worden geïmplementeerd.

Ten slotte moeten alle remediatie-acties worden gedocumenteerd en geëvalueerd om lessen te leren en processen te verbeteren. Dit omvat het analyseren van waarom bepaalde configuraties niet voldeden aan de baseline, welke beveiligingswaarschuwingen het meest voorkomen, en hoe effectief de respons was op gedetecteerde bedreigingen. Deze informatie kan worden gebruikt om preventieve maatregelen te versterken, om training te verbeteren, en om processen te optimaliseren. Door remediatie op deze manier te benaderen, kunnen organisaties niet alleen individuele problemen oplossen, maar ook hun algehele beveiligingspostuur continu verbeteren en ervoor zorgen dat clusters blijven voldoen aan de security baseline en compliance-vereisten.

Compliance, governance en auditbaarheid van de security baseline

De AKS Security Baseline speelt een cruciale rol bij het voldoen aan verschillende compliance- en beveiligingsstandaarden die relevant zijn voor Nederlandse overheidsorganisaties. De implementatie van deze baseline helpt bij het aantonen van naleving van internationale normen zoals ISO 27001, nationale normen zoals de BIO, Europese richtlijnen zoals NIS2, en industry best practices zoals de CIS Kubernetes Benchmark. Voor elk normenkader zijn specifieke controles relevant die worden ondersteund door de verschillende componenten van de security baseline.

De CIS Kubernetes Benchmark bevat uitgebreide controles voor Kubernetes-clusterbeveiliging die direct worden ondersteund door de AKS Security Baseline. Control 1.1 vereist dat API-server toegang wordt beperkt tot geautoriseerde IP ranges, wat wordt geborgd door de autorized IP ranges configuratie. Control 1.2 vereist dat RBAC is ingeschakeld, wat wordt ondersteund door Azure AD-integratie en RBAC-configuratie. Control 5.2.1 vereist dat container images worden gescand op kwetsbaarheden, wat wordt geleverd door Azure Container Registry-integratie. Control 5.2.2 vereist runtime-beveiliging voor containers, wat wordt geborgd door Defender for Containers. Control 5.3.1 vereist dat pod security policies worden geïmplementeerd, wat wordt ondersteund door pod security standards configuratie. Door deze controles te implementeren via de security baseline, kunnen organisaties aantonen dat zij voldoen aan best practices voor Kubernetes-beveiliging zoals gedefinieerd door het Center for Internet Security.

De BIO (Baseline Informatiebeveiliging Overheid) bevat thema's die direct verband houden met container- en Kubernetes-beveiliging. Thema 12.06 richt zich op kwetsbaarheidsbeheer en vereist dat organisaties systematisch kwetsbaarheden identificeren, beoordelen en verhelpen. De security baseline ondersteunt dit thema door automatische scanning van container images op bekende kwetsbaarheden, door regelmatige updates van node images en Kubernetes-versies, en door het genereren van rapporten die kunnen worden gebruikt voor kwetsbaarheidsbeheerprocessen. Thema 14.02 betreft veilige ontwikkeling en vereist dat organisaties beveiligingsmaatregelen implementeren tijdens de ontwikkelings- en implementatiefase. Pod security standards, network policies en RBAC-configuratie helpen bij het waarborgen van veilige containerimplementaties. Thema 16.01 richt zich op logging en monitoring en vereist dat relevante gebeurtenissen worden gelogd en gemonitord. De uitgebreide logging-capaciteiten van Azure Monitor en Log Analytics, gecombineerd met Defender for Containers monitoring, voldoen aan deze vereisten door alle beveiligingsgebeurtenissen vast te leggen.

ISO 27001 bevat controles die relevant zijn voor container- en Kubernetes-beveiliging. Control A.12.6.1 betreft het beheer van technische kwetsbaarheden en vereist dat organisaties tijdig informatie over technische kwetsbaarheden ontvangen, deze beoordelen en passende maatregelen nemen. De security baseline voorziet in deze behoefte door continue scanning en rapportage van kwetsbaarheden in container images en door automatische updates van node images. Control A.14.2.1 betreft veilige systeemengineering en vereist dat beveiligingsmaatregelen worden geïmplementeerd tijdens de ontwikkeling en implementatie van systemen. Pod security standards, network policies en RBAC-configuratie ondersteunen deze control. Control A.17.2.1 betreft het monitoren van informatiebeveiligingssystemen en vereist dat organisaties informatiebeveiligingsgebeurtenissen monitoren. De monitoring-capaciteiten van Azure Monitor, Log Analytics en Defender for Containers voldoen aan deze vereiste door continue runtime-monitoring en waarschuwingen te bieden.

De NIS2-richtlijn vereist dat organisaties passende technische en organisatorische maatregelen nemen om cybersecurity-risico's te beheren. Artikel 21 vereist specifiek dat organisaties passende maatregelen implementeren voor het detecteren en reageren op cybersecurity-incidenten. De security baseline helpt bij het voldoen aan deze vereisten door geavanceerde runtime-detectie van bedreigingen via Defender for Containers, door waarschuwingen te genereren wanneer verdachte activiteiten worden gedetecteerd, en door logging en monitoring die forensische analyse ondersteunen. Voor Nederlandse overheidsorganisaties is het belangrijk om te beseffen dat compliance een continu proces is, niet een eenmalige activiteit. Regelmatige monitoring en auditing zijn essentieel om te waarborgen dat de security baseline actief blijft en dat beveiligingswaarschuwingen worden behandeld. Auditbewijs zoals clusterconfiguraties, pod security policy status, network policy configuraties, RBAC-configuraties, kwetsbaarheidsscanresultaten, runtime alerts en compliance-rapporten moeten worden bewaard voor de vereiste bewaartermijn van zeven jaar, conform Nederlandse archiefwetgeving.

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 Controleert en beheert AKS Security Baseline compliance voor Azure Kubernetes Service-clusters .DESCRIPTION Dit script helpt om inzicht te krijgen in de compliance van Azure Kubernetes Service (AKS)-clusters met de security baseline. Het controleert pod security standards, network policies, RBAC-configuratie, Defender for Containers status, image-scanning configuratie en andere beveiligingscomponenten. In LocalDebug-modus wordt voorbeelddata gebruikt zodat het script ook zonder actieve Azure-verbinding getest kan worden. .NOTES Filename: aks-security-baseline.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/containers/aks-security-baseline.json Modules: Az.Accounts, Az.Resources, Az.Aks, Az.Policy, Az.Security .EXAMPLE .\aks-security-baseline.ps1 -Monitoring -LocalDebug Voert een monitoringcontrole uit op basis van voorbeelddata. .EXAMPLE .\aks-security-baseline.ps1 -Monitoring Toont een overzicht van AKS-clusters en hun security baseline compliance-status. .EXAMPLE .\aks-security-baseline.ps1 -Remediation Geeft aanbevelingen voor het verbeteren van security baseline compliance. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Resources, Az.Aks, Az.Policy, Az.Security [CmdletBinding()] param( [Parameter(HelpMessage = "Voer een monitoringinventarisatie uit.")] [switch]$Monitoring, [Parameter(HelpMessage = "Ondersteun het opstellen van remediatie- en verbeteracties.")] [switch]$Remediation, [Parameter(HelpMessage = "Gebruik voorbeelddata in plaats van live Azure-calls (voor lokale debug).")] [switch]$LocalDebug, [Parameter(HelpMessage = "Toon alleen welke acties geadviseerd worden, zonder wijzigingen door te voeren.")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $PolicyName = 'AKS Security Baseline Compliance' function Connect-AzureContext { if ($script:LocalDebug) { Write-Verbose "LocalDebug is ingeschakeld; er wordt geen verbinding met Azure gemaakt." return } if (-not (Get-AzContext -ErrorAction SilentlyContinue)) { Write-Verbose "Geen actieve Az-context gevonden; probeer Connect-AzAccount uit te voeren." Connect-AzAccount -ErrorAction Stop | Out-Null Write-Host "Verbonden met Azure." -ForegroundColor Green } } function Get-AksSecurityBaselineStatus { <# .SYNOPSIS Haalt de security baseline compliance-status op voor alle AKS-clusters. .OUTPUTS PSCustomObject met clusterinformatie en compliance-samenvatting. #> [CmdletBinding()] param( [switch]$UseDebugData ) if ($UseDebugData) { $clusters = @( [pscustomobject]@{ Name = 'aks-prod-cluster' SubscriptionId = '00000000-0000-0000-0000-000000000000' SubscriptionName = 'Production Subscription' ResourceGroup = 'rg-aks-prod' Location = 'westeurope' ApiServerAuthorizedIpRanges = $true AzureAdIntegration = $true RbacEnabled = $true DefenderForContainersEnabled = $true NetworkPolicyEnabled = $true PodSecurityPolicyEnabled = $true ComplianceScore = 95 }, [pscustomobject]@{ Name = 'aks-dev-cluster' SubscriptionId = '11111111-1111-1111-1111-111111111111' SubscriptionName = 'Development Subscription' ResourceGroup = 'rg-aks-dev' Location = 'westeurope' ApiServerAuthorizedIpRanges = $false AzureAdIntegration = $false RbacEnabled = $true DefenderForContainersEnabled = $false NetworkPolicyEnabled = $false PodSecurityPolicyEnabled = $false ComplianceScore = 45 } ) } else { $clusters = @() $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq 'Enabled' } foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id -ErrorAction SilentlyContinue | Out-Null Write-Verbose "Controleren van abonnement: $($sub.Name) ($($sub.Id))" try { $aksClusters = Get-AzAksCluster -ErrorAction SilentlyContinue foreach ($cluster in $aksClusters) { # Controleren API-server authorized IP ranges $apiServerAuthorizedIpRanges = ($cluster.ApiServerAuthorizedIpRanges -ne $null -and $cluster.ApiServerAuthorizedIpRanges.Count -gt 0) # Controleren Azure AD-integratie $azureAdIntegration = ($cluster.AadProfile -ne $null -and $cluster.AadProfile.Managed -eq $true) # Controleren RBAC $rbacEnabled = ($cluster.EnableRBAC -eq $true) # Controleren Defender for Containers $extension = $cluster.AddonProfiles | Where-Object { $_.Keys -contains 'microsoft.azuredefender.kubernetes' } $defenderForContainersEnabled = ($null -ne $extension -and $extension.Values.Enabled -eq $true) # Controleren Network Policy $networkPolicyEnabled = ($cluster.NetworkProfile.NetworkPlugin -eq 'azure' -and $cluster.NetworkProfile.NetworkPolicy -ne $null) # Controleren Pod Security (vereist kubectl toegang voor volledige controle) $podSecurityPolicyEnabled = $null # Zou apart gecontroleerd moeten worden via kubectl # Berekenen compliance score (vereenvoudigd) $complianceItems = @( $apiServerAuthorizedIpRanges, $azureAdIntegration, $rbacEnabled, $defenderForContainersEnabled, $networkPolicyEnabled ) $enabledCount = ($complianceItems | Where-Object { $_ -eq $true }).Count $complianceScore = [math]::Round(($enabledCount / $complianceItems.Count) * 100) $obj = [pscustomobject]@{ Name = $cluster.Name SubscriptionId = $sub.Id SubscriptionName = $sub.Name ResourceGroup = $cluster.ResourceGroupName Location = $cluster.Location ApiServerAuthorizedIpRanges = $apiServerAuthorizedIpRanges AzureAdIntegration = $azureAdIntegration RbacEnabled = $rbacEnabled DefenderForContainersEnabled = $defenderForContainersEnabled NetworkPolicyEnabled = $networkPolicyEnabled PodSecurityPolicyEnabled = $podSecurityPolicyEnabled ComplianceScore = $complianceScore } $clusters += $obj } } catch { Write-Verbose "Kon geen AKS-clusters ophalen voor abonnement $($sub.Name): $_" } } } $compliantClusters = ($clusters | Where-Object { $_.ComplianceScore -ge 80 }).Count $nonCompliantClusters = ($clusters | Where-Object { $_.ComplianceScore -lt 80 }).Count $averageScore = if ($clusters.Count -gt 0) { [math]::Round(($clusters | Measure-Object -Property ComplianceScore -Average).Average, 1) } else { 0 } $summary = [pscustomobject]@{ TotalClusters = $clusters.Count CompliantClusters = $compliantClusters NonCompliantClusters = $nonCompliantClusters AverageComplianceScore = $averageScore AllClusters = $clusters } return $summary } function Invoke-Monitoring { <# .SYNOPSIS Voert een gedetailleerde monitoringcontrole uit. .DESCRIPTION Toont een overzicht van AKS-clusters en hun security baseline compliance-status, zodat beheerders gericht vervolgacties kunnen plannen. #> [CmdletBinding()] param() Connect-AzureContext $result = Get-AksSecurityBaselineStatus -UseDebugData:$LocalDebug Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host $PolicyName -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host ("Totaal AKS-clusters: {0}" -f $result.TotalClusters) -ForegroundColor White Write-Host ("Gemiddelde compliance score: {0}%" -f $result.AverageComplianceScore) -ForegroundColor ($(if ($result.AverageComplianceScore -ge 80) { 'Green' } elseif ($result.AverageComplianceScore -ge 60) { 'Yellow' } else { 'Red' })) Write-Host ("Compliant clusters (≥80%): {0}" -f $result.CompliantClusters) -ForegroundColor ($(if ($result.CompliantClusters -eq $result.TotalClusters) { 'Green' } else { 'Yellow' })) Write-Host ("Non-compliant clusters (<80%): {0}" -f $result.NonCompliantClusters) -ForegroundColor ($(if ($result.NonCompliantClusters -eq 0) { 'Green' } else { 'Red' })) if ($result.TotalClusters -eq 0) { Write-Host "`nGeen AKS-clusters gevonden in de huidige Azure-context." -ForegroundColor Yellow return } if ($result.NonCompliantClusters -gt 0) { Write-Host "`nDe volgende clusters voldoen NIET aan de security baseline:" -ForegroundColor Yellow $result.AllClusters | Where-Object { $_.ComplianceScore -lt 80 } | Select-Object Name, ResourceGroup, Location, ComplianceScore, ApiServerAuthorizedIpRanges, AzureAdIntegration, RbacEnabled, DefenderForContainersEnabled, NetworkPolicyEnabled | Format-Table -AutoSize Write-Host "`nBelangrijk:" -ForegroundColor Yellow Write-Host "- API-server authorized IP ranges moeten worden geconfigureerd" -ForegroundColor Yellow Write-Host "- Azure AD-integratie moet zijn ingeschakeld" -ForegroundColor Yellow Write-Host "- RBAC moet zijn ingeschakeld" -ForegroundColor Yellow Write-Host "- Defender for Containers moet zijn ingeschakeld" -ForegroundColor Yellow Write-Host "- Network policies moeten zijn ingeschakeld" -ForegroundColor Yellow Write-Host "- Pod security standards moeten worden geconfigureerd" -ForegroundColor Yellow Write-Host "- Gebruik -Remediation voor gedetailleerde aanbevelingen" -ForegroundColor Yellow } else { Write-Host "`nAlle AKS-clusters voldoen aan de security baseline (≥80% compliance)." -ForegroundColor Green } Write-Host "`nGedetailleerd overzicht per cluster:" -ForegroundColor Cyan $result.AllClusters | Select-Object Name, ResourceGroup, ComplianceScore, ApiServerAuthorizedIpRanges, AzureAdIntegration, RbacEnabled, DefenderForContainersEnabled, NetworkPolicyEnabled | Format-Table -AutoSize } function Invoke-Remediation { <# .SYNOPSIS Geeft aanbevelingen voor remediatie rond AKS Security Baseline compliance. .DESCRIPTION Dit script wijzigt zelf geen resources, maar rapporteert waar de security baseline niet wordt nageleefd en geeft gerichte aanbevelingen zodat beheerders via Azure Portal, ARM/Bicep of Terraform de juiste wijzigingen kunnen doorvoeren. #> [CmdletBinding()] param() Connect-AzureContext $result = Get-AksSecurityBaselineStatus -UseDebugData:$LocalDebug Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host "$PolicyName - Remediatieadvies" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($result.TotalClusters -eq 0) { Write-Host "`nGeen AKS-clusters gevonden. Geen remediatie nodig." -ForegroundColor Green return } $nonCompliantClusters = $result.AllClusters | Where-Object { $_.ComplianceScore -lt 80 } if ($nonCompliantClusters.Count -eq 0) { Write-Host "`nAlle clusters voldoen aan de security baseline. Geen remediatie nodig." -ForegroundColor Green return } Write-Host "`nClusters die niet voldoen aan de security baseline:" -ForegroundColor Red $nonCompliantClusters | Select-Object Name, ResourceGroup, Location, ComplianceScore | Format-Table -AutoSize Write-Host "`nREMEDIATIESTAPPEN PER COMPONENT:" -ForegroundColor Cyan Write-Host "`n1. API-SERVER AUTHORIZED IP RANGES:" -ForegroundColor White $clustersWithoutIpRanges = $nonCompliantClusters | Where-Object { -not $_.ApiServerAuthorizedIpRanges } if ($clustersWithoutIpRanges.Count -gt 0) { Write-Host " Clusters zonder authorized IP ranges:" -ForegroundColor Yellow $clustersWithoutIpRanges | Select-Object Name, ResourceGroup | Format-Table -AutoSize Write-Host " Actie: Configureer authorized IP ranges via Azure Portal of Azure CLI:" -ForegroundColor Gray Write-Host " az aks update --resource-group <rg> --name <cluster> --api-server-authorized-ip-ranges <ip-ranges>" -ForegroundColor Gray } else { Write-Host " Alle clusters hebben authorized IP ranges geconfigureerd." -ForegroundColor Green } Write-Host "`n2. AZURE AD-INTEGRATIE:" -ForegroundColor White $clustersWithoutAad = $nonCompliantClusters | Where-Object { -not $_.AzureAdIntegration } if ($clustersWithoutAad.Count -gt 0) { Write-Host " Clusters zonder Azure AD-integratie:" -ForegroundColor Yellow $clustersWithoutAad | Select-Object Name, ResourceGroup | Format-Table -AutoSize Write-Host " Actie: Schakel Azure AD-integratie in (vereist mogelijk cluster recreatie):" -ForegroundColor Gray Write-Host " Azure Portal -> AKS Cluster -> Settings -> Authentication -> Azure Active Directory -> Enable" -ForegroundColor Gray } else { Write-Host " Alle clusters hebben Azure AD-integratie ingeschakeld." -ForegroundColor Green } Write-Host "`n3. RBAC:" -ForegroundColor White $clustersWithoutRbac = $nonCompliantClusters | Where-Object { -not $_.RbacEnabled } if ($clustersWithoutRbac.Count -gt 0) { Write-Host " Clusters zonder RBAC:" -ForegroundColor Yellow $clustersWithoutRbac | Select-Object Name, ResourceGroup | Format-Table -AutoSize Write-Host " Actie: RBAC moet worden ingeschakeld bij cluster creatie (vereist cluster recreatie):" -ForegroundColor Gray Write-Host " az aks create --resource-group <rg> --name <cluster> --enable-rbac" -ForegroundColor Gray } else { Write-Host " Alle clusters hebben RBAC ingeschakeld." -ForegroundColor Green } Write-Host "`n4. DEFENDER FOR CONTAINERS:" -ForegroundColor White $clustersWithoutDefender = $nonCompliantClusters | Where-Object { -not $_.DefenderForContainersEnabled } if ($clustersWithoutDefender.Count -gt 0) { Write-Host " Clusters zonder Defender for Containers:" -ForegroundColor Yellow $clustersWithoutDefender | Select-Object Name, ResourceGroup | Format-Table -AutoSize Write-Host " Actie: Schakel Defender for Containers in:" -ForegroundColor Gray Write-Host " az aks enable-addons --addons azure-defender --name <cluster> --resource-group <rg>" -ForegroundColor Gray } else { Write-Host " Alle clusters hebben Defender for Containers ingeschakeld." -ForegroundColor Green } Write-Host "`n5. NETWORK POLICIES:" -ForegroundColor White $clustersWithoutNetworkPolicy = $nonCompliantClusters | Where-Object { -not $_.NetworkPolicyEnabled } if ($clustersWithoutNetworkPolicy.Count -gt 0) { Write-Host " Clusters zonder network policies:" -ForegroundColor Yellow $clustersWithoutNetworkPolicy | Select-Object Name, ResourceGroup | Format-Table -AutoSize Write-Host " Actie: Network policies moeten worden ingeschakeld bij cluster creatie (vereist mogelijk cluster recreatie):" -ForegroundColor Gray Write-Host " az aks create --resource-group <rg> --name <cluster> --network-plugin azure --network-policy azure" -ForegroundColor Gray } else { Write-Host " Alle clusters hebben network policies ingeschakeld." -ForegroundColor Green } Write-Host "`n6. POD SECURITY STANDARDS:" -ForegroundColor White Write-Host " Actie: Configureer pod security standards per namespace via kubectl:" -ForegroundColor Gray Write-Host " kubectl label namespace <namespace> pod-security.kubernetes.io/enforce=restricted" -ForegroundColor Gray Write-Host " Zie: https://kubernetes.io/docs/concepts/security/pod-security-standards/" -ForegroundColor Gray Write-Host "`n7. AZURE POLICY VOOR KUBERNETES:" -ForegroundColor White Write-Host " Actie: Schakel Azure Policy add-on in en wijs policy definitions toe:" -ForegroundColor Gray Write-Host " az aks enable-addons --addons azure-policy --name <cluster> --resource-group <rg>" -ForegroundColor Gray if ($WhatIf) { Write-Host "`n[WhatIf] Er zouden geen wijzigingen worden doorgevoerd." -ForegroundColor Yellow } else { Write-Host "`nBELANGRIJK: Dit script maakt zelf geen wijzigingen. Voer bovenstaande stappen handmatig uit." -ForegroundColor Yellow Write-Host "Voor productieclusters: plan wijzigingen tijdens onderhoudsvensters en test eerst in niet-productieomgevingen." -ForegroundColor Yellow } } function Invoke-Implementation { <# .SYNOPSIS Wrapper om remediatieadvies aan te roepen. .DESCRIPTION Voor integratie in generieke tooling kan deze functie worden gebruikt als standaard implementatie-entrypoint. #> [CmdletBinding()] param() Invoke-Remediation } try { if ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { # Korte samenvatting voor snelle checks Connect-AzureContext $result = Get-AksSecurityBaselineStatus -UseDebugData:$LocalDebug Write-Host ("AKS Security Baseline: {0}/{1} clusters compliant (gemiddelde score: {2}%)" -f ` $result.CompliantClusters, $result.TotalClusters, $result.AverageComplianceScore) } } catch { Write-Error $_ exit 1 }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder een complete security baseline blijven AKS-clusters kwetsbaar voor een breed scala aan bedreigingen: container breakout-aanvallen, privilege escalation, ongeautoriseerde toegang tot secrets en clusterresources, cryptomining, datalekken en compromittatie van kritieke workloads. Misconfiguraties in pod security, network policies of RBAC kunnen leiden tot onbevoegde toegang en data-exfiltratie. Het risico is kritiek voor productieclusters die gevoelige data verwerken of kritieke diensten leveren, en kan leiden tot compliance-schendingen, toezichtsancties en reputatieschade.

Management Samenvatting

De AKS Security Baseline omvat een complete set beveiligingsconfiguraties: pod security standards, network policies, RBAC-configuratie, Azure Policy enforcement, Defender for Containers runtime-beveiliging, image-scanning, secrets management en uitgebreide logging. Implementatie: configureer API-server beveiliging en Azure AD-integratie, implementeer pod security standards en network policies, configureer RBAC volgens least privilege, schakel Defender for Containers in, en stel monitoring in voor compliance. Verplicht voor alle productie-AKS-clusters. Vereist voor CIS Kubernetes Benchmark, BIO 12.06/14.02/16.01, ISO 27001 en NIS2 Artikel 21.