Microsoft Defender For Cloud: Defender Containers Inschakelen

💼 Management Samenvatting

Microsoft Defender voor Containers biedt geïntegreerde beveiligingsbescherming voor containeromgevingen in Azure door geavanceerde kwetsbaarheidsscanning, real-time runtime-detectie en automatische beveiligingsaanbevelingen te combineren in één uitgebreide oplossing die specifiek is ontworpen voor de unieke uitdagingen van gecontaineriseerde workloads.

Aanbeveling
IMPLEMENTEER VOOR ALLE KUBERNETES WORKLOADS
Risico zonder
High
Risk Score
9/10
Implementatie
4u (tech: 2u)
Van toepassing op:
Azure Kubernetes Service
AKS
Azure Container Registry
Arc-ingeschakeld Kubernetes
Container workloads

Containeromgevingen introduceren fundamenteel andere beveiligingsuitdagingen dan traditionele virtuele machines. Containers delen de kernel van de host, wat betekent dat een compromittering van één container potentieel kan leiden tot compromittering van de gehele host en alle andere containers die daarop draaien. Containerimages worden vaak gebouwd op basis van publieke base images die bekende kwetsbaarheden kunnen bevatten, en zonder adequate scanning worden deze kwetsbaarheden rechtstreeks in productieomgevingen geïmplementeerd waar zij kunnen worden uitgebuit door aanvallers. De dynamische en kortstondige aard van containers maakt het onmogelijk voor traditionele beveiligingsoplossingen om bedreigingen tijdig te detecteren en te reageren, omdat containers binnen seconden kunnen worden gestart, gestopt en verplaatst tussen hosts. Kubernetes-clusters introduceren complexe netwerkconfiguraties waarbij containers met elkaar communiceren via service mesh-netwerken, wat nieuwe aanvalsoppervlakken creëert die moeilijk te monitoren zijn met traditionele netwerkbeveiligingstools. Privilege escalation-aanvallen waarbij containers proberen meer machtigingen te verkrijgen dan oorspronkelijk bedoeld vormen een constante bedreiging, vooral wanneer pods zijn geconfigureerd met overmatige rechten. Cryptomining-malware die containers infecteert kan aanzienlijke cloudkosten veroorzaken door compute-resources te verbruiken zonder dat organisaties hiervan op de hoogte zijn. Container escape-aanvallen waarbij aanvallers de container-isolatie omzeilen om toegang te krijgen tot de onderliggende host vormen een kritieke bedreiging voor multi-tenant omgevingen. Zonder gespecialiseerde containerbeveiliging blijven al deze bedreigingen onopgemerkt totdat zij daadwerkelijk worden uitgebuit, wat kan leiden tot datalekken, service-onderbrekingen en aanzienlijke financiële schade.

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

Implementatie

Deze best practice beschrijft het proces voor het inschakelen en configureren van Microsoft Defender voor Containers op Azure-abonnementen die Kubernetes-clusters en containerworkloads hosten. Defender voor Containers biedt een uitgebreide set beveiligingsmogelijkheden die specifiek zijn ontworpen voor containeromgevingen, beginnend met geavanceerde kwetsbaarheidsscanning van containerimages in Azure Container Registry voordat deze worden geïmplementeerd in productieomgevingen. Deze scanning identificeert bekende Common Vulnerabilities and Exposures (CVE's) en classificeert deze op basis van hun ernst en impact, waardoor ontwikkelaars en beveiligingsteams kwetsbaarheden kunnen prioriteren en oplossen voordat zij in productie terechtkomen. Runtime-detectie monitort daadwerkelijk draaiende containers op verdacht gedrag, waaronder pogingen tot privilege escalation waarbij containers proberen meer machtigingen te verkrijgen dan oorspronkelijk bedoeld, container escape-pogingen waarbij aanvallers proberen de container-isolatie te omzeilen, en afwijkend proces- of netwerkgedrag dat kan wijzen op compromittering of datalekken. Kubernetes-beveiligingsbeleid wordt continu gecontroleerd op naleving van best practices en industry standards, waarbij misconfiguraties worden geïdentificeerd die kunnen leiden tot beveiligingsproblemen, zoals pods die draaien met root-privileges, containers die toegang hebben tot host-netwerken, of serviceaccounts met overmatige machtigingen. Admission control-recommendaties helpen bij het implementeren van beleid dat ongewenste configuraties voorkomt voordat workloads worden geïmplementeerd, waardoor proactieve beveiliging wordt geboden in plaats van reactieve detectie. De oplossing integreert naadloos met Microsoft Defender voor Cloud voor geïntegreerd beveiligingsbeheer en compliance-rapportage, waardoor organisaties een centraal overzicht krijgen van alle beveiligingsgebeurtenissen en aanbevelingen voor hun containeromgevingen. De kosten voor Defender voor Containers bedragen €5 per vCore per maand voor compute-bescherming van Kubernetes-clusters, plus €0,20 per imagescan in Azure Container Registry, wat een kosteneffectieve investering is gezien de uitgebreide beveiligingsbescherming die wordt geboden.

Vereisten en Voorbereiding

Voor het succesvol inschakelen van Microsoft Defender voor Containers moeten organisaties voldoen aan een reeks technische, licentie- en organisatorische vereisten die essentieel zijn voor een soepele implementatie en optimale werking van de beveiligingsoplossing. Deze vereisten vormen de fundamentele basis waarop de containerbeveiligingsoplossing wordt gebouwd en zijn cruciaal om ervoor te zorgen dat de implementatie succesvol verloopt zonder onverwachte belemmeringen of configuratiefouten die kunnen leiden tot gedeeltelijke of onvolledige beveiligingsdekking.

De primaire licentievereiste betreft de Azure-abonnementen waarop Defender voor Containers wordt geactiveerd. Organisaties moeten beschikken over een Azure-abonnement met eigenaar- of bijdragerrechten op abonnementsniveau, omdat de activering van Defender voor Containers wijzigingen vereist in de beveiligingsprijstiers en resourceconfiguraties die alleen kunnen worden uitgevoerd met deze verhoogde rechten. Zonder de juiste rechten kunnen beheerders de service niet activeren of configureren, wat een belemmering vormt voor de implementatie van adequate containerbeveiliging en kan leiden tot situaties waarin containerworkloads onbeschermd blijven. Het is raadzaam om te werken met een service principal of managed identity die specifiek is aangemaakt voor automatiseringsdoeleinden, bij voorkeur met minimale benodigde rechten voor het uitvoeren van beveiligingsconfiguratietaken, om het principe van least privilege te volgen en de beveiligingsposture te verbeteren.

De technische omgeving vereist PowerShell versie 5.1 of hoger voor Windows-systemen, of PowerShell Core versie 7.0 of hoger voor cross-platform ondersteuning op Linux- en macOS-systemen. Deze versievereisten zijn belangrijk omdat de Azure PowerShell-modules moderne PowerShell-functies gebruiken die niet beschikbaar zijn in oudere versies, en omdat cross-platform ondersteuning essentieel is voor organisaties die geautomatiseerde scripts willen uitvoeren vanuit verschillende operating systems. De Azure PowerShell-modules moeten worden geïnstalleerd, met name de Az.Accounts-module voor authenticatie en sessiebeheer, en de Az.Security-module voor interactie met Azure Defender-services en het beheren van beveiligingsprijstiers. Deze modules kunnen eenvoudig worden geïnstalleerd via het PowerShell Gallery met behulp van de Install-Module-cmdlet, en regelmatige updates worden aanbevolen om toegang te hebben tot de nieuwste functionaliteit, beveiligingspatches en verbeteringen die Microsoft regelmatig uitbrengt.

De primaire technische vereiste is de aanwezigheid van Azure Kubernetes Service-clusters of Arc-ingeschakelde Kubernetes-clusters in het Azure-abonnement waarop Defender voor Containers wordt geactiveerd. AKS-clusters vormen de meest gebruikte implementatie voor Kubernetes-workloads in Azure en bieden een volledig beheerde Kubernetes-service die organisaties in staat stelt om containerapplicaties te draaien zonder de complexiteit van het beheren van de onderliggende infrastructuur. Arc-ingeschakelde clusters maken het mogelijk om on-premises of multicloud Kubernetes-omgevingen te beheren via Azure, waardoor organisaties een consistente beveiligingsaanpak kunnen implementeren ongeacht waar hun clusters fysiek draaien. Voor beide scenario's biedt Defender voor Containers dezelfde uitgebreide beveiligingsmogelijkheden, inclusief runtime-detectie, kwetsbaarheidsscanning en configuratiebeoordeling, waardoor consistente beveiligingsdekking wordt gegarandeerd ongeacht de locatie of het type Kubernetes-implementatie.

Voor kwetsbaarheidsscanning van containerimages is een Azure Container Registry vereist die dient als centrale opslagplaats voor containerimages en geïntegreerde scanning mogelijk maakt voordat images worden geïmplementeerd in productieomgevingen. De scanning vindt automatisch plaats wanneer nieuwe images naar de registry worden gepusht, en resultaten worden direct beschikbaar gesteld via de Azure Portal en API's, waardoor ontwikkelaars en beveiligingsteams snel kunnen reageren op geïdentificeerde kwetsbaarheden. Als organisaties meerdere containerregistries gebruiken voor verschillende omgevingen of teams, kunnen alle registries worden geconfigureerd voor scanning, wat zorgt voor volledige dekking van alle containerimages die in de organisatie worden gebruikt, ongeacht in welke registry zij zijn opgeslagen.

Microsoft Defender voor Cloud moet reeds zijn ingeschakeld op het Azure-abonnement voordat Defender voor Containers kan worden geactiveerd, omdat Defender voor Cloud de basislaag vormt voor alle Defender-modules en de centrale beveiligingsconsole biedt waarbinnen alle beveiligingsmogelijkheden worden geïntegreerd. De activering van Defender voor Cloud is typisch een eenmalige actie op abonnementsniveau en vormt de eerste stap in het opzetten van een uitgebreide Azure-beveiligingsposture die alle aspecten van cloudbeveiliging omvat, van compute en netwerk tot data en identiteit. Zonder deze basislaag kunnen individuele Defender-modules zoals Defender voor Containers niet worden geactiveerd, omdat zij afhankelijk zijn van de centrale infrastructuur en services die door Defender voor Cloud worden geleverd.

Financiële overwegingen zijn cruciaal bij de planning van de implementatie, omdat Defender voor Containers directe kosten met zich meebrengt die moeten worden begrepen en gepland voordat de service wordt geactiveerd. De service wordt gefactureerd tegen een tarief van €5 per vCore per maand voor compute-bescherming van Kubernetes-clusters, wat betekent dat elk actief vCore in uw clusters deze kosten genereert. Voor een middelgroot AKS-cluster met bijvoorbeeld 20 nodes en 4 vCores per node resulteert dit in 80 vCores, wat maandelijks €400 aan compute-beschermingskosten oplevert. Daarnaast wordt per imagescan in Azure Container Registry €0,20 in rekening gebracht, wat bij regelmatige builds en pushes aanzienlijke kosten kan opleveren, hoewel de meeste organisaties deze kosten gerechtvaardigd vinden gezien de uitgebreide beveiligingsbescherming die wordt geboden en de potentiële kosten van beveiligingsincidenten die worden voorkomen. Het is raadzaam om een kostenanalyse uit te voeren voordat de service wordt geactiveerd om te begrijpen wat de maandelijkse kosten zullen zijn op basis van uw specifieke clusterconfiguratie, aantal nodes, vCores per node en verwachte build- en push-frequentie.

Monitoring en Verificatie

Effectieve monitoring van de status van Microsoft Defender voor Containers is essentieel om te verzekeren dat de service continu actief blijft en continue beveiligingsbescherming biedt voor alle Kubernetes-clusters en containerworkloads binnen het Azure-abonnement. Regelmatige verificatie voorkomt dat de service onbedoeld wordt uitgeschakeld, wat zou kunnen gebeuren tijdens beveiligingswijzigingen, kostenbesparingsinitiatieven, herconfiguratie van abonnementen, of door menselijke fouten tijdens beheeractiviteiten. Zonder actieve monitoring bestaat het risico dat Defender voor Containers wordt gedeactiveerd zonder dat beveiligingsteams hiervan op de hoogte worden gesteld, waardoor clusters en containerworkloads kwetsbaar worden voor aanvallen, kwetsbaarheden en beveiligingsincidenten die niet worden gedetecteerd of gereageerd.

De monitoring kan worden uitgevoerd via verschillende methoden, waaronder Azure PowerShell, Azure CLI, de Azure Resource Manager API, of de Azure Portal, afhankelijk van de voorkeur en automatiseringvereisten van de organisatie. De meest directe en geautomatiseerde methode is het gebruik van de Get-AzSecurityPricing-cmdlet uit de Az.Security-module, waarbij de parameter Name wordt ingesteld op 'Containers' om de specifieke pricing tier voor Defender voor Containers op te halen voor een bepaald abonnement. Deze cmdlet retourneert belangrijke informatie, waaronder de huidige pricing tier (Standard of Free), de status van de service, en eventuele gerelateerde configuratie-instellingen die van invloed zijn op de functionaliteit en dekking van de beveiligingsoplossing. De pricing tier moet ingesteld zijn op 'Standard' om volledige beveiligingsbescherming te krijgen, inclusief runtime-detectie, kwetsbaarheidsscanning, configuratiebeoordeling en alle geavanceerde beveiligingsmogelijkheden die Defender voor Containers biedt.

Naast het controleren van de pricing tier is het belangrijk om te verifiëren dat Defender voor Containers daadwerkelijk actief is op alle Kubernetes-clusters in het abonnement en dat de benodigde agents en extensies correct zijn geïnstalleerd en functioneren. Dit kan worden geverifieerd via de Azure Portal door naar Microsoft Defender voor Cloud te navigeren, de Containers-sectie te selecteren, en de status per cluster te controleren om te zien of de service actief is en of er eventuele configuratiewaarschuwingen of foutmeldingen zijn die aandacht vereisen. Automatische monitoring kan worden geïmplementeerd met behulp van Azure Monitor alertregels die worden geactiveerd wanneer de pricing tier wijzigt van Standard naar Free, wanneer de service wordt gedeactiveerd, of wanneer er problemen worden gedetecteerd met de agents of extensies die door Defender voor Containers worden gebruikt. Deze alertregels kunnen worden geconfigureerd om beveiligingsteams te informeren via e-mail, SMS, push-notificaties, of integratie met incidentbeheersystemen zoals ServiceNow, Jira of Microsoft Teams, waardoor snelle respons wordt gegarandeerd wanneer problemen worden gedetecteerd.

Het monitoringproces dient regelmatig te worden uitgevoerd, bij voorkeur dagelijks of ten minste wekelijks, afhankelijk van het risicoprofiel van de organisatie, de kritikaliteit van de containerworkloads, en de compliance-vereisten die van toepassing zijn. Voor organisaties met hoge beveiligingsvereisten, kritieke containerworkloads, of strikte compliance-verplichtingen zoals NIS2, BIO of ISO 27001, is dagelijkse monitoring aanbevolen om snel te kunnen reageren op eventuele wijzigingen in de serviceconfiguratie en om te verzekeren dat de beveiligingsbescherming continu actief blijft. Geautomatiseerde monitoring via Azure Automation runbooks, Logic Apps workflows, of Azure Functions kan de belasting op beheerders aanzienlijk verminderen terwijl continue controle wordt gegarandeerd, en kan worden gecombineerd met rapportage naar beveiligingsdashboards, SIEM-systemen, of compliance-rapportagetools, zodat de status van Defender voor Containers zichtbaar is voor alle belanghebbenden, inclusief beveiligingsteams, compliance-officers, en bestuurders.

Gebruik PowerShell-script defender-containers-enabled.ps1 (functie Invoke-Monitoring) – Controleert de prijscategorie van Defender voor Containers met Get-AzSecurityPricing -Name 'Containers' voor alle abonnementen.

Implementatie en Remediatie

Wanneer monitoring aantoont dat Microsoft Defender voor Containers niet actief is, niet op de juiste pricing tier is ingesteld, of niet correct functioneert op een of meer Kubernetes-clusters, dient onmiddellijke remediatie te worden uitgevoerd om de beveiligingsbescherming te herstellen en te verzekeren dat alle containerworkloads adequaat worden beschermd tegen bedreigingen en kwetsbaarheden. De activering van Defender voor Containers is een relatief eenvoudig proces dat kan worden uitgevoerd via de Azure Portal, Azure PowerShell, Azure CLI, of Infrastructure as Code-templates zoals ARM-templates of Terraform, afhankelijk van de voorkeur en automatiseringvereisten van de organisatie.

De meest betrouwbare en geautomatiseerde methode voor implementatie is het gebruik van Azure PowerShell met de Set-AzSecurityPricing-cmdlet uit de Az.Security-module, waarbij de parameter Name wordt ingesteld op 'Containers' en de parameter PricingTier wordt ingesteld op 'Standard' om volledige beveiligingsbescherming te activeren. Het remediatieproces begint met verificatie van de huidige abonnementsstatus en het bevestigen dat de benodigde rechten aanwezig zijn om wijzigingen aan te brengen op abonnementsniveau, wat essentieel is omdat de activering van Defender voor Containers wijzigingen vereist in de beveiligingsprijstiers die alleen kunnen worden uitgevoerd met eigenaar- of bijdragerrechten. Beheerders dienen zich eerst aan te melden bij Azure met behulp van Connect-AzAccount, waarbij wordt gecontroleerd dat zij zijn aangemeld bij het juiste abonnement met behulp van Get-AzContext om te verzekeren dat wijzigingen worden aangebracht in het correcte abonnement en niet per ongeluk in een ander abonnement.

Nadat de context is geverifieerd, kan de Set-AzSecurityPricing-cmdlet worden uitgevoerd om Defender voor Containers te activeren door de pricing tier in te stellen op 'Standard', wat de service activeert op abonnementsniveau en automatisch Defender voor Containers implementeert op alle Kubernetes-clusters binnen het abonnement, inclusief AKS-clusters en Arc-ingeschakelde clusters. Na activering van de service duurt het enkele minuten voordat Defender voor Containers volledig operationeel is op alle clusters, omdat gedurende deze periode de benodigde agents en extensies worden geïnstalleerd op de clusters, de beveiligingsmogelijkheden worden geïnitialiseerd, en de eerste scans en monitoring worden gestart. Het is belangrijk om na de activering te verifiëren dat de service daadwerkelijk actief is via de Azure Portal of door opnieuw de Get-AzSecurityPricing-cmdlet uit te voeren, en om te controleren of er geen foutmeldingen of waarschuwingen zijn die kunnen wijzen op problemen met de implementatie of configuratie.

Voor organisaties met meerdere Azure-abonnementen dient het remediatieproces te worden uitgevoerd op elk abonnement dat Kubernetes-clusters bevat, wat handmatig tijdrovend kan zijn en foutgevoelig is wanneer abonnementen worden gemist of wanneer configuratiewijzigingen niet consistent worden toegepast. Dit kan worden geautomatiseerd met behulp van PowerShell-scripts die itereren over alle abonnementen in een tenant, waarbij voor elk abonnement wordt gecontroleerd of Kubernetes-clusters aanwezig zijn en of Defender voor Containers actief is, en waarbij automatisch remediatie wordt uitgevoerd als de service niet actief is. Deze geautomatiseerde aanpak zorgt voor consistente beveiligingsdekking over de hele organisatie, vermindert het risico dat clusters onbeschermd blijven door menselijke fouten of gemiste abonnementen, en maakt het mogelijk om snel te reageren op wijzigingen in de omgeving, zoals nieuwe abonnementen of clusters die worden toegevoegd.

Het is belangrijk op te merken dat de activering van Defender voor Containers directe kosten met zich meebrengt op basis van het aantal vCores in de clusters en het aantal imagescans dat wordt uitgevoerd, en dat beheerders zich bewust moeten zijn van deze kosten en deze moeten monitoren na activering om te verzekeren dat de kosten binnen het budget blijven en om onverwachte kosten te voorkomen. Als kostenbesparingen nodig zijn, kan overleg worden gepleegd met de beveiligingsteams om te bepalen welke clusters de hoogste prioriteit hebben voor beveiligingsbescherming, hoewel volledige dekking wordt aanbevolen voor alle productieclusters omdat partiële dekking gaten in de beveiliging kan creëren die kunnen worden uitgebuit door aanvallers. Organisaties kunnen ook overwegen om Azure Cost Management en Billing te gebruiken om de kosten van Defender voor Containers te monitoren en te analyseren, en om budgetwaarschuwingen in te stellen die worden geactiveerd wanneer de kosten een bepaalde drempel overschrijden.

Gebruik PowerShell-script defender-containers-enabled.ps1 (functie Invoke-Remediation) – Activeert Defender voor Containers met Set-AzSecurityPricing -Name 'Containers' -PricingTier 'Standard' voor alle abonnementen.

Compliance en Auditing

Microsoft Defender voor Containers vormt een essentieel onderdeel van de compliance-positie van organisaties die Kubernetes-workloads en containeromgevingen gebruiken, omdat het voldoet aan meerdere beveiligingsstandaarden en compliance-frameworks die vereist zijn voor Nederlandse overheidsorganisaties, bedrijven in kritieke sectoren, en organisaties die moeten voldoen aan internationale beveiligingsstandaarden. De implementatie van Defender voor Containers is niet alleen een best practice voor containerbeveiliging, maar ook een expliciete vereiste volgens verschillende erkende beveiligingsstandaarden die worden gebruikt binnen de Nederlandse publieke sector en daarbuiten, en het niet implementeren van deze oplossing kan leiden tot niet-naleving van compliance-vereisten, audit-bevindingen, en potentiële boetes of handhavingsmaatregelen.

De CIS Azure Foundations Benchmark versie 3.0.0 specificeert in controle 2.1.5 expliciet dat Microsoft Defender voor Containers moet zijn ingesteld op 'On' voor alle Azure-abonnementen die Kubernetes-clusters bevatten, wat betekent dat de pricing tier moet zijn ingesteld op 'Standard' om volledige beveiligingsbescherming te krijgen. Deze benchmark is een internationaal erkende standaard die wordt gebruikt door organisaties wereldwijd om hun Azure-beveiligingsposture te beoordelen en te verbeteren, en vormt een belangrijke basis voor cloudbeveiligingsbest practices. Het niet naleven van deze controle wordt beschouwd als een hoog risico, omdat het betekent dat containerworkloads niet adequaat worden beschermd tegen kwetsbaarheden en bedreigingen, wat kan leiden tot beveiligingsincidenten, datalekken, en service-onderbrekingen. Auditors die CIS-benchmark-assessments uitvoeren, zullen expliciet controleren of Defender voor Containers actief is door de pricing tier te verifiëren en door te controleren of de service daadwerkelijk functioneert op alle Kubernetes-clusters, en het niet voldoen aan deze vereiste zal resulteren in een bevinding die moet worden gerepareerd voordat de audit kan worden afgerond.

Naast de CIS Azure Foundations Benchmark is Defender voor Containers ook uitgelijnd met de CIS Kubernetes Benchmark, die specifieke beveiligingsaanbevelingen bevat voor Kubernetes-clusters en containeromgevingen, inclusief controles voor containerbeveiliging, kwetsbaarheidsscanning, runtime-detectie, netwerksegmentatie, en toegangscontrole. Deze benchmark bevat meerdere controles die betrekking hebben op containerbeveiliging, kwetsbaarheidsscanning en runtime-detectie, allemaal functionaliteiten die Defender voor Containers biedt, waardoor organisaties automatisch kunnen voldoen aan een groot aantal CIS Kubernetes Benchmark-controles door simpelweg Defender voor Containers te implementeren. Door Defender voor Containers te implementeren, helpen organisaties automatisch te voldoen aan een groot aantal CIS Kubernetes Benchmark-controles, wat de audit-efficiëntie verhoogt, de beveiligingsposture verbetert, en de tijd en kosten vermindert die nodig zijn voor handmatige configuratie en verificatie. De automatische scanning en detectie verminderen de noodzaak voor handmatige controle en configuratie, wat kostenefficiënt is, menselijke fouten voorkomt, en ervoor zorgt dat beveiligingsconfiguraties consistent worden toegepast over alle clusters en omgevingen.

De ISO 27001-standaard voor informatiebeveiligingsmanagementsystemen vereist in controle A.12.6.1 dat organisaties technische kwetsbaarheden beheren en ervoor zorgen dat informatie over technische kwetsbaarheden van gebruikte informatiesystemen tijdig wordt verkregen en dat de organisatie passende maatregelen neemt om de bijbehorende risico's aan te pakken. Defender voor Containers voldoet aan deze vereiste door automatische kwetsbaarheidsscanning van containerimages te bieden voordat deze worden geïmplementeerd, waardoor kwetsbaarheden worden geïdentificeerd en geprioriteerd op basis van hun impact, ernst, en exploitability, en waardoor organisaties proactief kunnen reageren op kwetsbaarheden voordat zij kunnen worden uitgebuit. De service integreert met Microsoft Defender voor Cloud om kwetsbaarheidsinformatie te verzamelen en te rapporteren, wat organisaties helpt te voldoen aan de vereisten voor kwetsbaarheidsbeheer en om te demonstreren aan auditors dat adequate maatregelen zijn genomen om technische kwetsbaarheden te identificeren en aan te pakken. Bovendien helpt controle A.14.2.1 organisaties ervoor te zorgen dat beveiligingsvereisten worden geïdentificeerd en gespecificeerd tijdens het ontwikkelings- en uitvoeringsproces, wat wordt ondersteund door de configuratiebeoordeling en admission control-recommendaties van Defender voor Containers die helpen bij het implementeren van beveiligingsbest practices tijdens de ontwikkeling en implementatie van containerapplicaties.

De NIS2-richtlijn, die van toepassing is op organisaties in kritieke sectoren en digitale dienstverleners in de Europese Unie, vereist in artikel 21 dat organisaties passende en evenredige technische en organisatorische maatregelen nemen om de risico's voor de beveiliging van netwerk- en informatiesystemen te beheersen, inclusief het identificeren en beoordelen van risico's, het implementeren van beveiligingsmaatregelen, en het monitoren en detecteren van beveiligingsincidenten. Defender voor Containers helpt organisaties te voldoen aan artikel 21 door uitgebreide containerbeveiliging te bieden die kwetsbaarheden identificeert, bedreigingen detecteert, beveiligingsincidenten monitort, en automatische aanbevelingen biedt voor het verbeteren van de beveiligingsposture. De runtime-detectie en kwetsbaarheidsscanning vormen essentieel onderdeel van een robuuste cybersecurity-aanpak die vereist is onder NIS2, en Nederlandse organisaties die onder de NIS2-richtlijn vallen, dienen daarom Defender voor Containers te implementeren als onderdeel van hun verplichte cybersecurity-maatregelen om te voldoen aan de vereisten voor risicobeheer, incidentdetectie, en incidentrespons.

Voor auditing en compliance-doeleinden is het belangrijk om regelmatig bewijs te verzamelen dat aantoont dat Defender voor Containers actief is en correct functioneert, inclusief de activeringsstatus, kwetsbaarheidsscanresultaten, runtime-threat alerts, Kubernetes policy compliance, en eventuele configuratiewaarschuwingen of aanbevelingen. Dit bewijs kan worden verkregen via de Azure Portal, Azure PowerShell-cmdlets, de Azure Resource Manager API, of geautomatiseerde scripts die regelmatig worden uitgevoerd om compliance-rapportages te genereren. Auditlogboeken moeten worden bewaard voor de vereiste retentietijd, typisch zeven jaar voor Nederlandse overheidsorganisaties volgens de Archiefwet, en moeten regelmatig worden beoordeeld om te verzekeren dat de service actief blijft en dat alle beveiligingsgebeurtenissen correct worden gelogd en opgeslagen. Documentatie van de activeringsstatus, kwetsbaarheidsscanresultaten, runtime-threat alerts en Kubernetes policy compliance moeten worden onderhouden voor auditdoeleinden en kunnen worden gebruikt om te demonstreren aan auditors, toezichthouders, en bestuurders dat de organisatie voldoet aan de vereiste beveiligingsstandaarden en dat adequate maatregelen zijn genomen om containeromgevingen te beveiligen.

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 Microsoft Defender for Cloud: Defender Containers Inschakelen .DESCRIPTION CIS Azure Foundations Benchmark - Control 2.1.5 BIO Baseline - Thema 12.06.01, 14.02.01 NIS2 Richtlijn - Artikel 21 Controleert of Microsoft Defender for Containers is ingeschakeld. Biedt threat detection voor Kubernetes clusters en container workloads. .NOTES Filename: defender-containers-enabled.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/defender-cloud/defender-containers-enabled.json CIS Control: 2.1.5 BIO Controls: 12.06.01, 14.02.01 NIS2 Article: 21 #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Security [CmdletBinding()] param( [Parameter()][switch]$WhatIf, [Parameter()][switch]$Monitoring, [Parameter()][switch]$Remediation, [Parameter()][switch]$Revert ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' $PolicyName = "Microsoft Defender for Containers" function Connect-RequiredServices { try { if (-not (Get-AzContext)) { Connect-AzAccount | Out-Null } } catch { throw "Failed to connect to Azure: $_" } } function Test-Compliance { Write-Verbose "Testing compliance for: $PolicyName..." $result = [PSCustomObject]@{ ScriptName = "defender-containers-enabled" PolicyName = $PolicyName IsCompliant = $false TotalResources = 0 CompliantCount = 0 NonCompliantCount = 0 Details = @() Recommendations = @() } try { $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq 'Enabled' } $result.TotalResources = $subscriptions.Count foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id | Out-Null try { $pricing = Get-AzSecurityPricing -Name "Containers" -ErrorAction Stop if ($pricing.PricingTier -eq 'Standard') { $result.CompliantCount++ $result.Details += "✓ Subscription '$($sub.Name)': Defender for Containers enabled (Standard tier)" } else { $result.NonCompliantCount++ $result.Details += "✗ Subscription '$($sub.Name)': Defender for Containers DISABLED (Current tier: $($pricing.PricingTier))" $result.Recommendations += "Enable Defender for Containers op '$($sub.Name)' met Set-AzSecurityPricing -Name 'Containers' -PricingTier 'Standard'" } } catch { if ($_.Exception.Message -like "*not found*" -or $_.Exception.Message -like "*does not exist*") { $result.NonCompliantCount++ $result.Details += "✗ Subscription '$($sub.Name)': Defender for Containers NOT CONFIGURED" $result.Recommendations += "Enable Defender for Containers op '$($sub.Name)'" } else { $result.NonCompliantCount++ $result.Details += "✗ Subscription '$($sub.Name)': Fout bij controleren - $($_.Exception.Message)" } } } $result.IsCompliant = ($result.NonCompliantCount -eq 0) } catch { $result.Details += "ERROR: $($_.Exception.Message)" } return $result } function Invoke-Remediation { Write-Host "`nStarting remediation for: $PolicyName..." -ForegroundColor Cyan try { $fixed = 0 $failed = 0 $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq 'Enabled' } foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id | Out-Null try { # Check current status $pricing = Get-AzSecurityPricing -Name "Containers" -ErrorAction SilentlyContinue if ($pricing -and $pricing.PricingTier -eq 'Standard') { Write-Host " [OK] Already enabled for: $($sub.Name)" -ForegroundColor Green $fixed++ } else { # Enable Defender for Containers Set-AzSecurityPricing -Name "Containers" -PricingTier "Standard" -ErrorAction Stop | Out-Null Write-Host " [OK] Enabled for: $($sub.Name)" -ForegroundColor Green $fixed++ Write-Host " Note: Het kan enkele minuten duren voordat de service volledig actief is" -ForegroundColor Gray Write-Host " Kosten: €5 per vCore per maand voor compute-bescherming" -ForegroundColor Gray } } catch { Write-Host " ✗ Failed for $($sub.Name): $($_.Exception.Message)" -ForegroundColor Red $failed++ } } Write-Host "`n[OK] Configured: $fixed subscription(s)" -ForegroundColor Green if ($failed -gt 0) { Write-Host "⚠️ Failed: $failed subscription(s)" -ForegroundColor Yellow } Write-Host "`nImportant notes:" -ForegroundColor Cyan Write-Host " • Defender voor Containers is nu actief op alle abonnementen" -ForegroundColor Gray Write-Host " • De service wordt automatisch geïmplementeerd op alle AKS-clusters" -ForegroundColor Gray Write-Host " • Controleer de status via: Azure Portal → Defender voor Cloud → Containers" -ForegroundColor Gray Write-Host " • Monitor kosten via: Azure Portal → Cost Management + Billing" -ForegroundColor Gray } catch { Write-Error "Remediation failed: $_" } } function Invoke-Monitoring { $result = Test-Compliance Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "Subscriptions: $($result.TotalResources)" -ForegroundColor White Write-Host "Enabled: $($result.CompliantCount)" -ForegroundColor Green Write-Host "Disabled/Not Configured: $($result.NonCompliantCount)" -ForegroundColor $(if ($result.NonCompliantCount -gt 0) { 'Red' } else { 'Green' }) if ($result.Details) { Write-Host "`nDetails:" -ForegroundColor Yellow $result.Details | ForEach-Object { Write-Host " $_" -ForegroundColor Gray } } if ($result.Recommendations) { Write-Host "`nAanbevelingen:" -ForegroundColor Yellow $result.Recommendations | ForEach-Object { Write-Host " • $_" -ForegroundColor Gray } } Write-Host "`nCompliance Status: " -NoNewline -ForegroundColor White if ($result.IsCompliant) { Write-Host "[OK] COMPLIANT" -ForegroundColor Green Write-Host "`nAlle abonnementen hebben Defender voor Containers ingeschakeld." -ForegroundColor Green } else { Write-Host "[FAIL] NON-COMPLIANT" -ForegroundColor Red Write-Host "`n$($result.NonCompliantCount) abonnement(en) hebben Defender voor Containers niet ingeschakeld." -ForegroundColor Red Write-Host "Voer het script uit met -Remediation om dit op te lossen." -ForegroundColor Yellow } return $result } function Invoke-Revert { Write-Host "`n⚠️ WARNING: Defender voor Containers uitschakelen wordt NIET aanbevolen" -ForegroundColor Yellow Write-Host "Dit verhoogt het risico op ongedetecteerde containerbedreigingen en kwetsbaarheden." -ForegroundColor Yellow Write-Host "`nAls u toch wilt uitschakelen, gebruik dan:" -ForegroundColor Gray Write-Host " Set-AzSecurityPricing -Name 'Containers' -PricingTier 'Free'" -ForegroundColor Gray Write-Host "`nLET OP: Dit schakelt alle beveiligingsbescherming uit voor containers!" -ForegroundColor Red } try { Connect-RequiredServices if ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { if ($WhatIf) { Write-Host "`n=== WHATIF MODE ===" -ForegroundColor Yellow $result = Test-Compliance Write-Host "Zou Defender voor Containers inschakelen voor $($result.NonCompliantCount) abonnement(en)" -ForegroundColor Yellow if ($result.NonCompliantCount -gt 0) { Write-Host "`nAbonnementen die zouden worden geactiveerd:" -ForegroundColor Yellow $result.Details | Where-Object { $_ -like "✗*" } | ForEach-Object { Write-Host " $_" -ForegroundColor Gray } } } else { Invoke-Remediation } } elseif ($Revert) { Invoke-Revert } else { $result = Test-Compliance Write-Host "`nCompliance Check: $PolicyName" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($result.IsCompliant) { Write-Host "Status: [OK] COMPLIANT" -ForegroundColor Green Write-Host "`nAlle $($result.TotalResources) abonnement(en) hebben Defender voor Containers ingeschakeld." -ForegroundColor Green } else { Write-Host "Status: [FAIL] NON-COMPLIANT" -ForegroundColor Red Write-Host "`n$($result.NonCompliantCount) van $($result.TotalResources) abonnement(en) hebben Defender voor Containers niet ingeschakeld." -ForegroundColor Red } if ($result.Details) { Write-Host "`nDetails:" -ForegroundColor Yellow $result.Details | ForEach-Object { Write-Host " $_" -ForegroundColor Gray } } Write-Host "`nGebruik -Monitoring voor uitgebreide rapportage" -ForegroundColor Gray Write-Host "Gebruik -Remediation om Defender voor Containers in te schakelen" -ForegroundColor Gray } } catch { Write-Error $_ exit 1 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder Defender voor Containers blijven containerkwetsbaarheden en Kubernetes-bedreigingen ongedetecteerd. Kwetsbare images met CVEs worden geïmplementeerd zonder scanning, container breakout-aanvallen blijven onopgemerkt, cryptomining-malware veroorzaakt aanzienlijke kosten, en Kubernetes RBAC-misconfiguraties verlenen overmatige machtigingen. De gemiddelde kosten van een containerbeveiligingsincident bedragen meer dan €500.000. Compliance: CIS 2.1.5, BIO 12.06/14.02 en NIS2 vereisen containerbeveiliging. Het risico is hoog voor AKS-productieomgevingen en kritiek voor multi-tenant clusters.

Management Samenvatting

Defender voor Containers biedt: kwetsbaarheidsscanning van images (pre-deployment CVE-detectie), runtime-bedreigingsdetectie (container breakout, privilege escalation, procesanomalieën), Kubernetes-beleidsaudits (RBAC, pod-beveiliging), cryptomining-detectie. Activatie: Defender voor Cloud → Containers → AAN. Kosten: €5 per vCore per maand voor AKS plus €0,20 per imagescan. Verplicht voor CIS 2.1.5, BIO 12.06 en NIS2. Implementatie: 2-4 uur. Verplicht voor alle AKS-productieclusters.