Container Security Scanning Configureren En Implementeren

💼 Management Samenvatting

Container security scanning vormt een essentiële beveiligingslaag voor moderne cloud-workloads door automatische detectie van kwetsbaarheden in container images voordat deze worden geïmplementeerd in productieomgevingen. Voor Nederlandse overheidsorganisaties is dit cruciaal om te voldoen aan BIO-, ISO 27001- en NIS2-vereisten voor kwetsbaarheidsbeheer en veilige softwareontwikkeling.

Aanbeveling
IMPLEMENTEER CONTAINER SECURITY SCANNING VOOR ALLE ACR-REGISTRY'S
Risico zonder
High
Risk Score
8/10
Implementatie
60u (tech: 40u)
Van toepassing op:
Azure Container Registry (ACR)
Azure Kubernetes Service (AKS)
Container Images

Container images bevatten vaak kwetsbaarheden die tijdens de ontwikkelingsfase zijn geïntroduceerd, zoals verouderde dependencies, onveilige configuraties of bekende Common Vulnerabilities and Exposures (CVEs). Zonder systematische scanning worden deze kwetsbaarheden rechtstreeks in productieomgevingen geïmplementeerd, waar zij kunnen worden misbruikt door aanvallers voor privilege escalation, remote code execution of datalekken. Snelle deploymentcycli betekenen dat kwetsbare images binnen minuten in productie kunnen staan zonder dat er tijd is voor handmatige beveiligingsreviews. Complexe dependency chains maken het onmogelijk om handmatig alle kwetsbaarheden te identificeren, vooral wanneer images zijn gebaseerd op publieke base images die regelmatig nieuwe kwetsbaarheden bevatten. Zonder geautomatiseerde scanning blijven deze risico's onopgemerkt totdat een incident plaatsvindt, wat kan leiden tot compromittatie van kritieke workloads, datalekken of serviceonderbrekingen.

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

Implementatie

Dit artikel beschrijft hoe u container security scanning configureert en implementeert voor Azure Container Registry (ACR) en hoe u de scanresultaten integreert in uw CI/CD-pipelines en Kubernetes-deploymentprocessen. U leert over de verschillende scanning-opties die beschikbaar zijn in Azure, inclusief Microsoft Defender for Containers image scanning, Azure Container Registry Tasks met Trivy-integratie en third-party scanning-oplossingen. Daarnaast behandelen we hoe u scanning automatiseert voor alle nieuwe images, hoe u scanresultaten interpreteert en prioriteert, en hoe u policy enforcement configureert om te voorkomen dat kwetsbare images worden gebruikt in productieomgevingen. De focus ligt op praktische implementatie binnen de Nederlandse publieke sector, met aandacht voor compliance-vereisten en governance-processen.

Architectuur en scanning-opties voor containerbeveiliging

Container security scanning in Azure kan worden geïmplementeerd via verschillende mechanismen, elk met specifieke voordelen en use cases. De primaire opties zijn Microsoft Defender for Containers image scanning, Azure Container Registry Tasks met geïntegreerde scanning-tools, en third-party scanning-oplossingen die worden geïntegreerd via CI/CD-pipelines. Microsoft Defender for Containers biedt native integratie met Azure Container Registry en automatiseert het scannen van alle images die worden gepusht naar of getrokken uit ACR-registry's. Deze oplossing gebruikt Microsoft's eigen vulnerability database en scanning-engine, die regelmatig wordt bijgewerkt met nieuwe CVE-informatie. De scanning wordt automatisch uitgevoerd wanneer nieuwe images worden gepusht naar een registry, wanneer bestaande images worden bijgewerkt, of wanneer een cluster een image probeert te pullen. De scanresultaten worden opgeslagen in Defender for Cloud en gekoppeld aan images via tags en digests, waardoor teams direct kunnen zien welke versies van een image kwetsbaarheden bevatten en wat de ernst is van elke gedetecteerde kwetsbaarheid.

Azure Container Registry Tasks biedt flexibele mogelijkheden voor het integreren van verschillende scanning-tools zoals Trivy, Clair of Anchore in de build- en deployment-pipeline. Deze aanpak geeft organisaties meer controle over welke tools worden gebruikt, hoe scanning wordt geconfigureerd en waar scanresultaten worden opgeslagen. Trivy is een populaire open-source scanning-tool die een uitgebreide database van bekende kwetsbaarheden onderhoudt en snel kan scannen op verschillende typen kwetsbaarheden, inclusief OS-packages, application dependencies en configuratiefouten. Door Trivy te integreren in ACR Tasks kunnen organisaties automatisch scannen tijdens het buildproces, waarbij builds kunnen worden geblokkeerd wanneer kritieke kwetsbaarheden worden gevonden. Deze aanpak vormt een belangrijke beveiligingsgate in het deployment-proces en voorkomt dat kwetsbare images in productie belanden.

Third-party scanning-oplossingen zoals Snyk, Aqua Security of Twistlock kunnen worden geïntegreerd via CI/CD-pipelines of als sidecar-containers in Kubernetes-clusters. Deze oplossingen bieden vaak geavanceerde features zoals license compliance checking, secrets detection en runtime scanning, naast traditionele vulnerability scanning. Voor organisaties met specifieke compliance-vereisten of bestaande investeringen in bepaalde scanning-tools kan deze aanpak waardevol zijn. Echter, deze oplossingen vereisen meestal extra configuratie, licentiebeheer en integratie-inspanning, wat de operationele complexiteit verhoogt. Voor de meeste Nederlandse overheidsorganisaties biedt de native Azure-oplossing (Defender for Containers) de beste balans tussen functionaliteit, integratie en beheerbaarheid.

De scanning-architectuur moet worden ontworpen met aandacht voor performance, kosten en compliance-vereisten. Scanning kan worden uitgevoerd tijdens verschillende fasen van de container lifecycle: tijdens de build-fase (shift-left scanning), tijdens de registry-fase (post-push scanning), of tijdens de runtime-fase (runtime scanning). Shift-left scanning, waarbij kwetsbaarheden worden gedetecteerd tijdens de development- en build-fase, is het meest effectief omdat problemen vroeg worden gevonden wanneer remediatie het minst kostbaar is. Post-push scanning in ACR zorgt ervoor dat alle images worden gescand, ongeacht hoe ze zijn gebouwd, wat belangrijk is voor compliance-doeleinden. Runtime scanning biedt continue monitoring van draaiende containers, maar is minder effectief voor het voorkomen van kwetsbare images omdat het probleem al in productie is. Een combinatie van shift-left en post-push scanning biedt de beste dekking en voldoet aan de meeste compliance-vereisten.

Voor Nederlandse overheidsorganisaties is het belangrijk om te realiseren dat scanning alleen effectief is wanneer de resultaten worden geïntegreerd in bestaande processen en wanneer er duidelijke policy enforcement is. Scanresultaten moeten worden gekoppeld aan incident response-processen, waarbij kritieke kwetsbaarheden onmiddellijk worden geëscaleerd naar security teams. Daarnaast moeten scanresultaten worden gebruikt voor compliance-rapportage, waarbij wordt aangetoond dat organisaties systematisch kwetsbaarheden identificeren en verhelpen. Door de scanning-architectuur op deze manier te ontwerpen, ontstaat een volwassen beveiligingsproces dat zowel operationele beveiliging als compliance-vereisten ondersteunt.

Stapsgewijze implementatie en configuratie van container scanning

De implementatie van container security scanning begint met het inschakelen van Microsoft Defender for Containers op abonnementsniveau, omdat dit een vereiste is voor ACR image scanning. Vervolgens moet image scanning worden geconfigureerd voor elk Azure Container Registry waar container images worden opgeslagen. Dit kan worden gedaan via de Azure Portal, Azure CLI, PowerShell of Infrastructure as Code-templates zoals Bicep of Terraform. Voor Nederlandse overheidsorganisaties wordt aanbevolen om de configuratie te automatiseren via IaC, zodat nieuwe registry's automatisch worden geconfigureerd voor scanning en bestaande configuraties reproduceerbaar en herleidbaar zijn. Het PowerShell-script dat bij dit artikel hoort, kan worden gebruikt om de status te controleren en om registry's te identificeren waarop scanning nog niet is ingeschakeld.

Tijdens de configuratie moeten verschillende opties worden overwogen. Standaard worden alle images automatisch gescand wanneer ze worden gepusht naar een ACR-registry, maar organisaties kunnen ook configureren dat alleen specifieke tags of namespaces worden gescand om kosten te beheersen. Voor productieomgevingen wordt aanbevolen om scanning te activeren voor alle images, terwijl voor ontwikkelomgevingen kan worden overwogen om alleen kritieke images te scannen of om scanning te beperken tot specifieke tags. Daarnaast kunnen organisaties configureren hoe lang scanresultaten worden bewaard, wat belangrijk is voor compliance-doeleinden en forensische analyse. De standaard bewaartermijn is dertig dagen, maar dit kan worden uitgebreid door scanresultaten te exporteren naar Log Analytics of andere storage-oplossingen.

Azure Container Registry Tasks-integratie vereist expliciete configuratie van build-tasks die scanning-tools zoals Trivy bevatten. Deze tasks kunnen worden geconfigureerd om automatisch te worden uitgevoerd wanneer nieuwe images worden gebouwd, of ze kunnen handmatig worden geactiveerd voor bestaande images. De task-configuratie definieert welke scanning-tool wordt gebruikt, welke severity levels worden gerapporteerd, en welke acties worden ondernomen wanneer kwetsbaarheden worden gevonden. Voor kritieke kwetsbaarheden kunnen tasks worden geconfigureerd om builds te falen, waardoor wordt voorkomen dat kwetsbare images worden gepusht naar de registry. Voor minder kritieke kwetsbaarheden kunnen tasks worden geconfigureerd om alleen waarschuwingen te genereren, zodat teams op de hoogte zijn van kwetsbaarheden maar builds niet worden geblokkeerd.

Na de technische implementatie moet de configuratie worden gevalideerd om te verifiëren dat scanning correct functioneert. Dit omvat het pushen van een test-image naar de registry en het controleren dat een scan wordt uitgevoerd en dat resultaten beschikbaar zijn. Het PowerShell-script biedt monitoringfunctionaliteit om deze status te controleren en om te rapporteren over de compliance van registry's. Daarnaast moeten security teams worden getraind in het interpreteren van scanresultaten, zodat zij effectief kunnen reageren op gedetecteerde kwetsbaarheden. Voor organisaties met meerdere registry's is het belangrijk om een gestandaardiseerd proces te hebben voor het configureren van scanning, zodat nieuwe registry's automatisch worden beveiligd zonder dat dit handmatig moet worden gecontroleerd of geconfigureerd.

Ten slotte moet de implementatie worden gedocumenteerd in architectuur- en beveiligingsdocumentatie, inclusief welke registry's zijn geconfigureerd voor scanning, welke configuraties zijn toegepast en wie verantwoordelijk is voor het onderhoud. Deze documentatie is essentieel voor compliance-audits en voor het overdragen van kennis binnen de organisatie. Door container security scanning op een gestructureerde en gedocumenteerde manier te implementeren, kunnen Nederlandse overheidsorganisaties profiteren van geautomatiseerde kwetsbaarheidsdetectie terwijl ze voldoen aan de vereisten voor aantoonbare beveiliging en governance.

Monitoring en operationele bewaking van scanresultaten

Gebruik PowerShell-script container-security-scanning.ps1 (functie Invoke-Monitoring) – Controleert of container security scanning is geconfigureerd voor ACR-registry's en rapporteert de status van image scanning..

Effectieve monitoring van container security scanning is essentieel om te waarborgen dat de scanning-functionaliteit continu actief blijft en om tijdig te kunnen reageren op gedetecteerde kwetsbaarheden. Het monitoringproces omvat het regelmatig controleren van de status van scanning-configuraties op elk ACR-registry, het analyseren van scanresultaten en het beoordelen van trends in kwetsbaarheden. Het PowerShell-script dat bij dit artikel hoort, kan worden gebruikt om een overzicht te genereren van alle registry's, hun scanning-status en eventuele configuratieproblemen. Deze informatie moet regelmatig worden gereviewed door security teams en moet worden gerapporteerd aan management en compliance-teams als onderdeel van de reguliere governance-processen.

Scanresultaten vormen het hart van de kwetsbaarheidsdetectiecapaciteiten van container security scanning. Deze resultaten bevatten gedetailleerde informatie over gedetecteerde kwetsbaarheden, inclusief de CVE-ID, severity score, beschrijving van de kwetsbaarheid, en aanbevolen remediatiestappen. Elke kwetsbaarheid wordt gekoppeld aan specifieke images via tags en digests, waardoor teams direct kunnen zien welke versies van een image kwetsbaarheden bevatten. Security teams moeten deze resultaten regelmatig beoordelen, prioriteren op basis van severity en impact, en passende actie ondernemen. Voor kritieke kwetsbaarheden moet een geautomatiseerd alerting-mechanisme zijn ingericht, bijvoorbeeld via Azure Monitor alerts of integratie met SIEM-systemen, zodat incident response-teams onmiddellijk kunnen worden geïnformeerd wanneer ernstige kwetsbaarheden worden gedetecteerd.

Trendanalyse van scanresultaten biedt waardevolle inzichten in de beveiligingspostuur van container workloads. Door te monitoren hoeveel kwetsbaarheden worden gedetecteerd over tijd, welke typen kwetsbaarheden het meest voorkomen, en hoe snel kwetsbaarheden worden verholpen, kunnen organisaties hun beveiligingsprocessen verbeteren. Trends kunnen bijvoorbeeld aantonen dat bepaalde base images consistent kwetsbaarheden bevatten, wat kan leiden tot het overwegen van alternatieve base images of het implementeren van extra scanning in de build-fase. Daarnaast kunnen trends aantonen dat ontwikkelteams sneller reageren op kwetsbaarheden naarmate het scanning-proces volwassener wordt, wat een positieve indicator is voor de effectiviteit van het beveiligingsprogramma.

Compliance monitoring is een ander cruciaal aspect van de operationele bewaking. Organisaties moeten kunnen aantonen dat container security scanning actief is op alle relevante registry's en dat scanresultaten worden behandeld. Het PowerShell-script genereert rapporten die kunnen worden gebruikt als auditbewijs, inclusief welke registry's zijn geconfigureerd voor scanning, wanneer scanning is ingeschakeld en wat de huidige status is. Deze rapporten moeten worden opgeslagen en bewaard voor de vereiste bewaartermijn, conform Nederlandse archiefwetgeving en compliance-eisen. Door monitoring op deze manier te structureren, ontstaat een volwassen beveiligingsbewaking die zowel operationele stabiliteit als compliance-vereisten ondersteunt.

Remediatie en respons op gedetecteerde kwetsbaarheden

Gebruik PowerShell-script container-security-scanning.ps1 (functie Invoke-Remediation) – Ondersteunt het configureren van container security scanning op ACR-registry's waar dit nog niet is geactiveerd en geeft aanbevelingen voor remediatie..

Wanneer monitoring uitwijst dat container security scanning niet is geconfigureerd op een of meer ACR-registry's, of wanneer kwetsbaarheden worden gedetecteerd, moet snelle en gestructureerde remediatie plaatsvinden. Het remediatieproces begint met het identificeren van de oorzaak: is scanning niet geconfigureerd, is er een configuratiefout, of zijn er daadwerkelijk kwetsbare images in gebruik? Het PowerShell-script kan helpen bij het identificeren van registry's zonder scanning-configuratie, maar voor het onderzoeken van scanresultaten is handmatige analyse door security experts noodzakelijk. Wanneer een registry zonder scanning wordt geïdentificeerd, moet dit worden behandeld als een hoge prioriteit, vooral voor productieregistry's die images bevatten die worden gebruikt in productieomgevingen.

Voor registry's waarop scanning nog niet is geconfigureerd, kan remediatie worden uitgevoerd via het PowerShell-script of via de Azure Portal. Het is belangrijk om te verifiëren dat alle vereisten zijn voldaan voordat de configuratie plaatsvindt, zoals de beschikbaarheid van Defender for Containers op abonnementsniveau en de juiste rechten voor het wijzigen van registry-configuraties. Na de configuratie moet worden gecontroleerd dat scanning daadwerkelijk wordt uitgevoerd voor nieuwe images en dat scanresultaten beschikbaar zijn. Dit kan enige tijd duren, vooral voor grote registry's met veel images. Het is aanbevolen om de status na enkele uren opnieuw te controleren en om te verifiëren dat scanresultaten worden gegenereerd.

Wanneer kwetsbaarheden worden gedetecteerd in container images, moet een gestructureerd proces worden gevolgd voor remediatie. Dit begint met het analyseren van de scanresultaten om te begrijpen welke kwetsbaarheden zijn gedetecteerd, wat de severity is en wat de potentiële impact is. Vervolgens moet worden bepaald welke workloads gebruik maken van kwetsbare images en wat de impact is van het bijwerken of vervangen van deze images. Voor kritieke kwetsbaarheden met een hoge CVSS-score moet onmiddellijk actie worden ondernomen, waarbij workloads mogelijk tijdelijk moeten worden gestopt of geïsoleerd totdat patches beschikbaar zijn. Voor minder kritieke kwetsbaarheden kan een geplande remediatie worden uitgevoerd tijdens reguliere onderhoudsvensters.

Remediatie van kwetsbare images begint met het identificeren van de bron van de kwetsbaarheid. Dit kan een verouderde dependency zijn, een onveilige configuratie, of een kwetsbaarheid in een base image. Vervolgens moeten ontwikkelteams 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 kwetsbaarheden in base images kan het nodig zijn om over te stappen op alternatieve base images of om base images regelmatig bij te werken naar nieuwere versies die de kwetsbaarheden niet bevatten. Door dit proces te automatiseren via CI/CD-pipelines en policy enforcement, kunnen organisaties snel reageren op kwetsbaarheden en ervoor zorgen dat alleen beveiligde images worden gebruikt in productieomgevingen.

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 registry's niet waren geconfigureerd voor scanning, welke kwetsbaarheden het meest voorkomen en hoe effectief de respons was op gedetecteerde kwetsbaarheden. 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.

Compliance, governance en auditbaarheid

Container security scanning speelt een cruciale rol bij het voldoen aan verschillende compliance- en beveiligingsstandaarden die relevant zijn voor Nederlandse overheidsorganisaties. De implementatie van deze beveiligingsoplossing helpt bij het aantonen van naleving van internationale normen zoals ISO 27001, nationale normen zoals de BIO, en Europese richtlijnen zoals NIS2. Voor elke normenkader zijn specifieke controles relevant die worden ondersteund door container security scanning-functionaliteiten.

De CIS Docker Benchmark bevat meerdere controles die direct worden ondersteund door container security scanning. Control 4.1 vereist dat container images worden gescand op kwetsbaarheden, wat wordt geborgd door de Azure Container Registry-integratie met Defender for Containers of Trivy. Control 4.2 vereist dat images regelmatig worden bijgewerkt om bekende kwetsbaarheden te verhelpen, wat wordt ondersteund door het monitoren van scanresultaten en het implementeren van policy enforcement. Control 4.3 vereist dat alleen vertrouwde base images worden gebruikt, wat wordt ondersteund door het scannen van base images en het blokkeren van onveilige images. Door deze controles te implementeren via container security scanning, kunnen organisaties aantonen dat zij voldoen aan best practices voor containerbeveiliging zoals gedefinieerd door het Center for Internet Security.

De BIO (Baseline Informatiebeveiliging Overheid) bevat thema's die direct verband houden met container security scanning. Thema 12.06 richt zich op kwetsbaarheidsbeheer en vereist dat organisaties systematisch kwetsbaarheden identificeren, beoordelen en verhelpen. Container security scanning ondersteunt dit thema door automatische scanning van container images op bekende kwetsbaarheden en 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. De shift-left scanning-functionaliteiten van container security scanning helpen bij het waarborgen van veilige containerimplementaties door kwetsbaarheden vroeg in de development-cyclus te detecteren. Thema 16.01 richt zich op logging en monitoring en vereist dat relevante gebeurtenissen worden gelogd en gemonitord. De uitgebreide logging-capaciteiten van container security scanning voldoen aan deze vereisten door alle scanresultaten vast te leggen in Log Analytics.

ISO 27001 bevat controles die relevant zijn voor container security scanning. 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. Container security scanning voorziet in deze behoefte door continue scanning en rapportage van kwetsbaarheden in container images. Control A.14.2.1 betreft veilige systeemengineering en vereist dat beveiligingsmaatregelen worden geïmplementeerd tijdens de ontwikkeling en implementatie van systemen. De shift-left scanning-functionaliteiten ondersteunen deze control. Control A.17.2.1 betreft het monitoren van informatiebeveiligingssystemen en vereist dat organisaties informatiebeveiligingsgebeurtenissen monitoren. De monitoring-capaciteiten van container security scanning voldoen aan deze vereiste door continue scanning 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. Container security scanning helpt bij het voldoen aan deze vereisten door geavanceerde kwetsbaarheidsdetectie en door waarschuwingen te genereren wanneer kritieke kwetsbaarheden worden gedetecteerd. 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 container security scanning actief blijft en dat scanresultaten worden behandeld. Auditbewijs zoals scanning-configuratiestatus, scanresultaten, remediatie-acties 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 container security scanning-status voor Azure Container Registry .DESCRIPTION Dit script helpt om inzicht te krijgen in de container security scanning-configuratie voor Azure Container Registry (ACR)-registry's. Het controleert of image scanning is ingeschakeld op registry's, of Defender for Containers is geconfigureerd en geeft aanbevelingen voor remediatie waar nodig. In LocalDebug-modus wordt voorbeelddata gebruikt zodat het script ook zonder actieve Azure-verbinding getest kan worden. .NOTES Filename: container-security-scanning.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/container/container-security-scanning.json Modules: Az.Accounts, Az.ContainerRegistry, Az.Security .EXAMPLE .\container-security-scanning.ps1 -Monitoring -LocalDebug Voert een monitoringcontrole uit op basis van voorbeelddata. .EXAMPLE .\container-security-scanning.ps1 -Monitoring Toont een overzicht van ACR-registry's en de container security scanning-status. .EXAMPLE .\container-security-scanning.ps1 -Remediation Geeft aanbevelingen voor het configureren van container security scanning op registry's. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.ContainerRegistry, 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 = 'Container Security Scanning op ACR-registry''s' 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-ContainerScanningStatus { <# .SYNOPSIS Haalt de container security scanning-status op voor alle ACR-registry's. .OUTPUTS PSCustomObject met registry-informatie en samenvatting. #> [CmdletBinding()] param( [switch]$UseDebugData ) if ($UseDebugData) { $registries = @( [pscustomobject]@{ Name = 'acr-prod-registry' SubscriptionId = '00000000-0000-0000-0000-000000000000' SubscriptionName = 'Production Subscription' ResourceGroup = 'rg-acr-prod' Location = 'westeurope' DefenderScanningEnabled = $true DefenderForContainersEnabled = $true ImageCount = 150 VulnerableImageCount = 12 }, [pscustomobject]@{ Name = 'acr-dev-registry' SubscriptionId = '11111111-1111-1111-1111-111111111111' SubscriptionName = 'Development Subscription' ResourceGroup = 'rg-acr-dev' Location = 'westeurope' DefenderScanningEnabled = $false DefenderForContainersEnabled = $true ImageCount = 45 VulnerableImageCount = $null } ) } else { $registries = @() $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 { $acrRegistries = Get-AzContainerRegistry -ErrorAction SilentlyContinue foreach ($registry in $acrRegistries) { # Controleren of Defender for Containers is ingeschakeld op abonnementsniveau $defenderForContainers = Get-AzSecurityPricing -Name 'Containers' -ErrorAction SilentlyContinue $defenderEnabledAtSubscription = ($defenderForContainers.PricingTier -eq 'Standard') # Controleren of image scanning is ingeschakeld # Dit vereist specifieke API-calls naar ACR of Defender for Cloud # Voor nu gebruiken we een vereenvoudigde aanname gebaseerd op Defender-status $scanningEnabled = $defenderEnabledAtSubscription # Ophalen van image count (vereist ACR API) $imageCount = $null try { $images = Get-AzContainerRegistryRepository -RegistryName $registry.Name -ResourceGroupName $registry.ResourceGroupName -ErrorAction SilentlyContinue $imageCount = ($images | Measure-Object).Count } catch { Write-Verbose "Kon image count niet ophalen voor registry $($registry.Name): $_" } $obj = [pscustomobject]@{ Name = $registry.Name SubscriptionId = $sub.Id SubscriptionName = $sub.Name ResourceGroup = $registry.ResourceGroupName Location = $registry.Location DefenderScanningEnabled = $scanningEnabled DefenderForContainersEnabled = $defenderEnabledAtSubscription ImageCount = $imageCount VulnerableImageCount = $null # Zou apart gecontroleerd moeten worden via Defender API } $registries += $obj } } catch { Write-Verbose "Kon geen ACR-registry's ophalen voor abonnement $($sub.Name): $_" } } } $enabledCount = ($registries | Where-Object { $_.DefenderScanningEnabled -eq $true }).Count $disabledCount = ($registries | Where-Object { $_.DefenderScanningEnabled -eq $false }).Count $summary = [pscustomobject]@{ TotalRegistries = $registries.Count ScanningEnabledRegistries = $enabledCount ScanningDisabledRegistries = $disabledCount AllRegistries = $registries } return $summary } function Invoke-Monitoring { <# .SYNOPSIS Voert een gedetailleerde monitoringcontrole uit. .DESCRIPTION Toont een overzicht van ACR-registry's en hun container security scanning-status, zodat beheerders gericht vervolgacties kunnen plannen. #> [CmdletBinding()] param() Connect-AzureContext $result = Get-ContainerScanningStatus -UseDebugData:$LocalDebug Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host $PolicyName -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host ("Totaal ACR-registry's: {0}" -f $result.TotalRegistries) -ForegroundColor White Write-Host ("Met container security scanning ingeschakeld: {0}" -f $result.ScanningEnabledRegistries) -ForegroundColor ($(if ($result.ScanningEnabledRegistries -eq $result.TotalRegistries) { 'Green' } else { 'Yellow' })) Write-Host ("Zonder container security scanning: {0}" -f $result.ScanningDisabledRegistries) -ForegroundColor ($(if ($result.ScanningDisabledRegistries -eq 0) { 'Green' } else { 'Red' })) if ($result.TotalRegistries -eq 0) { Write-Host "`nGeen ACR-registry's gevonden in de huidige Azure-context." -ForegroundColor Yellow return } if ($result.ScanningDisabledRegistries -gt 0) { Write-Host "`nDe volgende registry's hebben container security scanning NIET ingeschakeld:" -ForegroundColor Yellow $result.AllRegistries | Where-Object { -not $_.DefenderScanningEnabled } | Select-Object Name, ResourceGroup, Location, SubscriptionName, ImageCount | Format-Table -AutoSize Write-Host "`nBelangrijk:" -ForegroundColor Yellow Write-Host "- Defender for Containers moet eerst zijn ingeschakeld op abonnementsniveau" -ForegroundColor Yellow Write-Host "- Image scanning moet worden geconfigureerd voor elk registry" -ForegroundColor Yellow Write-Host "- Gebruik -Remediation voor aanbevelingen" -ForegroundColor Yellow } else { Write-Host "`nAlle ACR-registry's hebben container security scanning ingeschakeld." -ForegroundColor Green } # Toon aanvullende informatie over registry's met scanning $enabledRegistries = $result.AllRegistries | Where-Object { $_.DefenderScanningEnabled -eq $true } if ($enabledRegistries.Count -gt 0) { Write-Host "`nRegistry's met scanning ingeschakeld:" -ForegroundColor Cyan $enabledRegistries | Select-Object Name, ResourceGroup, Location, ImageCount | Format-Table -AutoSize } } function Invoke-Remediation { <# .SYNOPSIS Geeft aanbevelingen voor remediatie rond container security scanning. .DESCRIPTION Dit script wijzigt zelf geen resources, maar rapporteert waar container security scanning ontbreekt en geeft gerichte aanbevelingen zodat beheerders via Azure Portal, ARM/Bicep of Terraform de juiste wijzigingen kunnen doorvoeren. #> [CmdletBinding()] param() Connect-AzureContext $result = Get-ContainerScanningStatus -UseDebugData:$LocalDebug Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host "$PolicyName - Remediatieadvies" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($result.TotalRegistries -eq 0) { Write-Host "`nGeen ACR-registry's gevonden. Geen remediatie nodig." -ForegroundColor Green return } $registriesWithoutScanning = $result.AllRegistries | Where-Object { -not $_.DefenderScanningEnabled } if ($registriesWithoutScanning.Count -eq 0) { Write-Host "`nAlle registry's hebben container security scanning ingeschakeld. Geen remediatie nodig." -ForegroundColor Green return } Write-Host "`nRegistry's zonder container security scanning:" -ForegroundColor Red $registriesWithoutScanning | Select-Object Name, ResourceGroup, Location, SubscriptionName | Format-Table -AutoSize Write-Host "`nREMEDIATIESTAPPEN:" -ForegroundColor Cyan Write-Host "1. Verifieer dat Defender for Containers is ingeschakeld op abonnementsniveau:" -ForegroundColor White Write-Host " Get-AzSecurityPricing -Name 'Containers' -PricingTier 'Standard'" -ForegroundColor Gray Write-Host "" Write-Host "2. Schakel image scanning in voor elk ACR-registry via Azure Portal:" -ForegroundColor White Write-Host " Azure Portal -> Container Registry -> [Registry] -> Security -> Microsoft Defender for Cloud -> Enable" -ForegroundColor Gray Write-Host "" Write-Host "3. Of gebruik Azure CLI:" -ForegroundColor White Write-Host " az acr update --name <registry-name> --resource-group <resource-group> --security-policy MicrosoftDefender" -ForegroundColor Gray Write-Host "" Write-Host "4. Verifieer de status na enkele minuten:" -ForegroundColor White Write-Host " Azure Portal -> Container Registry -> [Registry] -> Security -> Microsoft Defender for Cloud" -ForegroundColor Gray Write-Host "" Write-Host "5. Configureer automatische scanning voor nieuwe images:" -ForegroundColor White Write-Host " Azure Portal -> Container Registry -> [Registry] -> Tasks -> Add Task -> Scan" -ForegroundColor Gray Write-Host "" Write-Host "6. Bekijk scanresultaten en remedieer kwetsbaarheden:" -ForegroundColor White Write-Host " Azure Portal -> Defender for Cloud -> Recommendations -> Container registries should have vulnerability findings resolved" -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 } } 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-ContainerScanningStatus -UseDebugData:$LocalDebug Write-Host ("Container Security Scanning op ACR: {0}/{1} registry's beveiligd" -f ` $result.ScanningEnabledRegistries, $result.TotalRegistries) } } catch { Write-Error $_ exit 1 }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder container security scanning blijven kwetsbaarheden in container images ongedetecteerd totdat zij worden misbruikt door aanvallers. Dit kan leiden tot remote code execution, privilege escalation, datalekken en compromittatie van kritieke workloads. Het risico is kritiek voor productieomgevingen waar kwetsbare images direct kunnen worden geëxploiteerd.

Management Samenvatting

Container security scanning biedt automatische detectie van kwetsbaarheden in container images via Microsoft Defender for Containers of geïntegreerde tools zoals Trivy. Implementatie: schakel image scanning in op elk ACR-registry, configureer automatische scanning voor nieuwe images en stel monitoring in voor scanresultaten en compliance. Verplicht voor alle productie-ACR-registry's. Vereist voor CIS Docker Benchmark, BIO 12.06/14.02/16.01, ISO 27001 en NIS2 Artikel 21.