Azure Containers: Overzicht, Beveiliging En Best Practices Voor Container-workloads

💼 Management Samenvatting

Container-technologie heeft zich ontwikkeld tot de dominante aanpak voor het bouwen, deployen en beheren van moderne applicaties in de cloud. Azure biedt een uitgebreide set container-services die organisaties helpen om container-workloads veilig, schaalbaar en beheersbaar te implementeren. Dit index-artikel schetst de overkoepelende principes, beveiligingsmaatregelen en best practices voor container-workloads binnen de Nederlandse publieke sector, en fungeert als kapstok voor meer specifieke artikelen over AKS-beveiliging, container registry configuratie en image scanning.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
200u (tech: 120u)
Van toepassing op:
Azure Kubernetes Service (AKS)
Azure Container Instances (ACI)
Azure Container Registry (ACR)
Azure Container Apps

Container-technologie biedt aanzienlijke voordelen voor organisaties: snellere deployment-cycli, betere resource-utilisatie, en verbeterde portabiliteit tussen omgevingen. Echter, containers introduceren ook unieke beveiligingsuitdagingen die verder gaan dan traditionele VM-beveiliging. Container images kunnen kwetsbaarheden bevatten, containers delen de host kernel wat nieuwe aanvalsoppervlakken creëert, en container orchestrators zoals Kubernetes vereisen complexe configuraties voor netwerksegmentatie, toegangscontrole en secrets management. Zonder een doordachte container-beveiligingsstrategie lopen organisaties risico op container breakout-aanvallen, privilege escalation, ongeautoriseerde toegang tot gevoelige data, en compromittatie van container-workloads. Voor Nederlandse overheidsorganisaties is het essentieel om te kunnen aantonen dat container-workloads voldoen aan strikte beveiligingsstandaarden voor compliance met BIO, ISO 27001 en NIS2. Een incomplete of inconsistente container-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.ContainerRegistry

Implementatie

Dit index-artikel positioneert Azure container-services binnen de "Nederlandse Baseline voor Veilige Cloud" en beschrijft hoe organisaties een samenhangend container-beveiligingslandschap kunnen opbouwen. We behandelen fundamentele principes zoals defense in depth voor containers, least privilege voor container-workloads, image security en scanning, runtime-beveiliging, en secrets management. Het artikel fungeert als kapstok voor meer specifieke artikelen over AKS security baseline, container registry beveiliging, image scanning, network policies, pod security standards en andere container-beveiligingscomponenten. Daarnaast biedt het artikel handvatten voor governance, container-beveiligingsbeheer en periodieke evaluatie van de container-beveiligingsvolwassenheid.

Rol en scope van container-beveiliging binnen de overheid

Container-beveiliging in een overheidscontext moet worden gezien als een strategisch kader dat technische keuzes, beveiligingsmaatregelen en operationele processen met elkaar verbindt tot een samenhangend geheel. In tegenstelling tot ad-hoc implementaties waarbij containers en orchestrators los van elkaar worden opgezet, vormt een doordachte container-beveiligingsarchitectuur de ruggengraat die ervoor zorgt dat alle componenten – van container images tot orchestrators, van registries tot runtime-beveiliging – op een consistente, beveiligde en beheersbare manier samenwerken. Deze architectuur moet expliciet rekening houden met de specifieke eisen die gelden voor Nederlandse overheidsorganisaties, waaronder de Baseline Informatiebeveiliging Overheid (BIO), de NIS2 richtlijn, de Algemene Verordening Gegevensbescherming (AVG) en sectorale wetgeving zoals de Archiefwet.

De primaire rol van container-beveiliging is het waarborgen van een veilige, betrouwbare en compliance-gerichte container-omgeving waarin organisaties hun container-workloads kunnen uitvoeren zonder onnodige risico's. Dit betekent dat beveiligingskeuzes niet alleen technisch correct moeten zijn, maar ook aantoonbaar moeten voldoen aan wettelijke en bestuurlijke vereisten. Een goed ontworpen container-beveiligingsarchitectuur maakt het mogelijk om te bewijzen dat passende maatregelen zijn genomen om container-workloads te beveiligen, dat toegang tot containers en gegevens wordt gecontroleerd en gelogd, en dat de organisatie in staat is om snel te reageren op beveiligingsincidenten. Voor auditors, toezichthouders en bestuurders biedt een gedocumenteerde container-beveiligingsarchitectuur transparantie over hoe beveiliging is ingericht en hoe deze wordt onderhouden.

De scope van container-beveiliging binnen de Nederlandse Baseline voor Veilige Cloud omvat alle lagen van de containerstack: van container images en registries tot orchestrators en runtime-beveiliging, van netwerksegmentatie tot secrets management, van logging en monitoring tot incident response. Het container-beveiligingslandschap moet rekening houden met verschillende container-services – van Azure Container Instances voor eenvoudige workloads tot Azure Kubernetes Service voor complexe orchestratie en Azure Container Apps voor serverless container-workloads – en moet schaalbaar zijn van kleine pilots tot enterprise-omgevingen die duizenden containers ondersteunen. Daarnaast moet de architectuur flexibel genoeg zijn om te kunnen evolueren met nieuwe Azure container-services en veranderende businessvereisten, terwijl de fundamentele beveiligingsprincipes consistent blijven.

Implementatieroadmap: van basis naar volwassen container-beveiliging

De implementatie van een volwassen container-beveiligingsarchitectuur verloopt zelden in één grote stap, maar groeit geleidelijk van een solide basis naar een geavanceerd, geoptimaliseerd landschap. In de eerste fase wordt de fundamentele basis gelegd: een beveiligde Azure Container Registry voor het opslaan en beheren van container images, basis image scanning voor het detecteren van kwetsbaarheden, en essentiële beveiligingsservices zoals Microsoft Defender for Containers. Deze basislaag zorgt ervoor dat alle container images vanaf het begin worden beschermd en dat er een duidelijke scheiding is tussen verschillende omgevingen (development, test, productie) en verschillende vertrouwelijkheidsniveaus. In deze fase worden ook de eerste governance-mechanismen ingericht, zoals Azure Policy voor het afdwingen van container-beveiligingsstandaarden en geautomatiseerde scanning in CI/CD-pipelines.

In de volgende fase wordt de container-beveiligingsarchitectuur uitgebreid met geavanceerde beveiligingsmaatregelen en operationele processen. Voor AKS-clusters worden pod security standards geïmplementeerd om te voorkomen dat containers met onnodige privileges worden uitgevoerd, network policies worden geconfigureerd voor micro-segmentatie tussen workloads, en RBAC wordt afgedwongen om toegang tot clusterresources te beperken. Runtime-beveiliging wordt versterkt door Defender for Containers die continu monitort op verdachte activiteiten binnen containers en op cluster-niveau. Secrets management wordt geïmplementeerd via Azure Key Vault en de Secrets Store CSI Driver om te voorkomen dat gevoelige informatie hardcoded is in container images of configuratiebestanden. Monitoring en logging worden uitgebreid met Azure Monitor en Log Analytics voor centrale security monitoring en incident response.

In de volwassenheidsfase wordt de container-beveiligingsarchitectuur geoptimaliseerd en geautomatiseerd. Infrastructure as Code (IaC) met Azure Resource Manager templates, Bicep of Terraform zorgt voor reproduceerbare, versiebeheerde container-omgevingen. Geautomatiseerde compliance-controles en security assessments worden regelmatig uitgevoerd om te verifiëren dat de container-beveiligingsarchitectuur nog steeds voldoet aan alle vereisten. Advanced threat protection, behavioral analytics en machine learning-gebaseerde detectie helpen om zero-day aanvallen en geavanceerde persistent threats (APT's) vroegtijdig te identificeren. Governance wordt volwassen met geautomatiseerde rapportages, dashboards voor bestuurders en geïntegreerde change management processen. Door deze fasering expliciet te maken in een roadmap – met duidelijke mijlpalen, beslismomenten en success criteria – ontstaat voorspelbaarheid voor bestuurders en wordt het eenvoudiger om investeringen, risico's en baten te verantwoorden.

Governance, compliance en relatie met andere container-artikelen

Governance rond container-beveiliging raakt meerdere disciplines: cloud governance, informatiebeveiliging, DevOps, compliance en risk management. Zonder een helder governance-model ontstaat het risico dat container-beveiligingskeuzes versnipperd worden gemaakt, dat verschillende teams verschillende standaarden hanteren, en dat niemand zich eigenaar voelt van de integrale container-beveiligingsarchitectuur. Een effectief governance-model benoemt daarom ten minste een cloud architect die verantwoordelijk is voor de overkoepelende container-architectuurvisie, een security architect die container-beveiligingsaspecten waarborgt, een DevOps lead die de integratie met CI/CD-pipelines beheert, en expliciete rollen voor CISO, privacy officer en compliance officer. Deze rollen worden vertaald naar concrete taken: wie keurt nieuwe container images goed, wie beoordeelt afwijkingen van standaarden, wie beheert de container-beveiligingsdocumentatie, en wie beslist over het uitfaseren van verouderde container images of configuraties. Deze afspraken worden vastgelegd in governance-documenten, container-beveiligingsprincipes en changeprocedures zodat zij organisatiebreed herkenbaar zijn.

Op compliancegebied vormt container-beveiliging een kruispunt van verschillende wettelijke kaders. De AVG vereist dat persoonsgegevens adequaat worden beveiligd en dat organisaties kunnen aantonen welke technische en organisatorische maatregelen zijn genomen. De BIO en NIS2 leggen eisen op rond informatiebeveiliging, incident response en continuïteit. ISO 27001 biedt een internationaal erkend framework voor informatiebeveiligingsmanagement. De CIS Kubernetes Benchmark bevat uitgebreide controles voor Kubernetes-clusterbeveiliging. Deze compliance-vereisten moeten expliciet worden vertaald naar container-beveiligingskeuzes: welke image scanning wordt gebruikt, hoe wordt toegang gecontroleerd, hoe worden logs bewaard, en hoe wordt incident response georganiseerd. Dit index-artikel moet daarom expliciet worden gelezen in samenhang met andere artikelen binnen de "Nederlandse Baseline voor Veilige Cloud", zoals de artikelen over AKS security baseline, container registry beveiliging, image scanning, network policies en pod security standards. Samen vormen zij een consistent raamwerk: dit artikel schetst de overkoepelende lijnen, terwijl de deelartikelen verdieping bieden op specifieke container-beveiligingscomponenten en technische implementaties.

Voor auditors en toezichthouders is vooral van belang dat de samenhang tussen beleid, container-beveiligingsarchitectuur, implementatie en operationele controles aantoonbaar is. Dat betekent dat u niet alleen architectuurdiagrammen en procesbeschrijvingen beschikbaar heeft, maar ook concreet kunt laten zien welke container-services er zijn, hoe deze zijn geconfigureerd, hoe vaak security assessments worden uitgevoerd en welke verbeteracties zijn ondernomen na incidenten of bevindingen. De in dit domein beschreven PowerShell-scripts – waaronder het index-script bij dit artikel en de scripts voor specifieke container-beveiligingscomponenten – helpen om deze informatie snel en reproduceerbaar te verzamelen. Door hun output te koppelen aan dashboards en rapportages wordt governance niet beperkt tot papieren documenten, maar ondersteund door actuele operationele data die aantoonbaar maakt dat de container-beveiligingsarchitectuur daadwerkelijk wordt nageleefd en onderhouden.

Monitoring van het Azure container-beveiligingslandschap

Gebruik PowerShell-script index.ps1 (functie Invoke-Monitoring) – Geeft een overzicht van de belangrijkste Azure container-services en controleert of basiselementen aanwezig en correct geconfigureerd zijn..

Monitoring van het Azure container-beveiligingslandschap gaat verder dan het bewaken van individuele containers of clusters. Bestuurders, cloud architects en security teams hebben behoefte aan een samenvattend beeld: welke container-services zijn actief, hoe zijn container registries geconfigureerd, welke beveiligingsservices zijn geactiveerd, en zijn er signalen dat de container-beveiligingsarchitectuur niet meer voldoet aan compliance-vereisten. Het index-script bij dit artikel inventariseert de belangrijkste container-beveiligingscomponenten en vertaalt die naar een compacte managementsamenvatting: hoeveel AKS-clusters zijn actief, hoeveel container registries zijn geconfigureerd, welke Defender-services zijn actief, en voor welke onderdelen aanvullende acties nodig zijn. Dit vormt een startpunt voor diepgaandere analyses met gespecialiseerde scripts voor specifieke container-beveiligingscomponenten, en helpt om het gesprek met bestuur en auditcommissies te structureren rond feitelijke cijfers en meetbare container-beveiligingsvolwassenheid.

Effectieve container-beveiligingsmonitoring omvat zowel technische als governance-aspecten. Technisch gezien moet worden gemonitord of container-services correct zijn geconfigureerd volgens de beveiligingsstandaarden, of beveiligingsservices actief zijn en correct functioneren, en of er afwijkingen zijn die kunnen wijzen op security risico's of compliance-problemen. Governance-monitoring richt zich op de vraag of container-beveiligingsprincipes worden nageleefd, of documentatie actueel is, of change management processen correct worden gevolgd, en of er regelmatige reviews plaatsvinden om de container-beveiligingsarchitectuur te evalueren en te verbeteren. Door beide aspecten te combineren ontstaat een compleet beeld van de container-beveiligingsvolwassenheid en kunnen gerichte verbeteracties worden ondernomen om de container-beveiligingsarchitectuur verder te professionaliseren.

Remediatie en volwassenwording van Azure container-beveiliging

Gebruik PowerShell-script index.ps1 (functie Invoke-Remediation) – Genereert overzichten van container-beveiligingshiaten en biedt handvatten voor gerichte verbeteracties om de container-beveiligingsvolwassenheid te verhogen..

Remediatie binnen het Azure container-beveiligingsdomein betekent in de praktijk dat u gaten dicht tussen de gewenste container-beveiligingsarchitectuur en de werkelijkheid. In veel organisaties bestaan al wel beleidsdocumenten over cloudgebruik, informatiebeveiliging en container-beveiligingsprincipes, maar ontbreekt concrete vastlegging van hoe deze worden vertaald naar Azure container-configuraties, welke container-services daadwerkelijk zijn ingericht, en hoe de container-beveiligingsarchitectuur wordt onderhouden en geëvalueerd. Het index-script ondersteunt remediatie door automatisch te inventariseren waar container-beveiligingsstandaarden niet worden nageleefd, waar beveiligingsservices ontbreken, en waar documentatie verouderd of incompleet is. Op basis van deze inventarisatie kunnen gerichte verbeteracties worden gepland en uitgevoerd, waarbij prioriteit wordt gegeven aan de meest kritieke hiaten die de grootste impact hebben op beveiliging en compliance.

Een volwassen Azure container-beveiligingsarchitectuur groeit stap voor stap door continue verbetering. Na elke monitoringsronde worden de belangrijkste verbeterpunten vastgelegd, van een eigenaar voorzien en ingepland in het reguliere change- of verbeterportfolio. Denk aan het standaardiseren van container image-scanning, het implementeren van ontbrekende beveiligingsservices, het verbeteren van pod security standards, het actualiseren van container-beveiligingsdocumentatie of het invoeren van geautomatiseerde compliance-controles. Door de resultaten van het index-script te combineren met de uitkomsten van gespecialiseerde scripts voor specifieke container-beveiligingscomponenten ontstaat een integraal beeld van de voortgang. Uiteindelijk wordt Azure container-beveiliging zo niet alleen een technisch ontwerp, maar een aantoonbaar beheerst en verantwoord ingericht fundament voor de container-workloads van de organisatie, dat continu wordt geëvalueerd en verbeterd om te blijven voldoen aan veranderende eisen en dreigingen.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# .SYNOPSIS Overzichtsmonitoring en remediatie voor Azure container-beveiligingslandschap .DESCRIPTION Geeft een samenvattend beeld van de belangrijkste Azure container-services (AKS-clusters, container registries, beveiligingsservices en documentatie) binnen de repository en ondersteunt het gericht dichten van hiaten in container-beveiligingsstandaarden en configuratieregisters. .NOTES Filename: index.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-27 Last Modified: 2025-01-27 Version: 1.0 Related JSON: content/azure/containers/index.json .LINK https://github.com/[org]/m365-tenant-best-practise .EXAMPLE .\index.ps1 -Monitoring Toont een samenvattend overzicht van Azure container-services en configuratiestatus. .EXAMPLE .\index.ps1 -Remediation Genereert een basisoverzicht en, indien gewenst, templates voor ontbrekende container-beveiligingsdocumentatie. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Resources, Az.Aks, Az.ContainerRegistry [CmdletBinding()] param( [Parameter(HelpMessage = "Voer een samenvattende monitoring uit van het Azure container-beveiligingslandschap.")] [switch]$Monitoring, [Parameter(HelpMessage = "Genereer remediatie-overzichten en optioneel documentatietemplates.")] [switch]$Remediation, [Parameter(HelpMessage = "Toon welke acties zouden worden uitgevoerd zonder daadwerkelijk te wijzigen.")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' function Get-RepositoryRoot { <# .SYNOPSIS Bepaalt de rootmap van de repository op basis van de locatie van dit script. .OUTPUTS String met pad naar repository-root. #> [CmdletBinding()] param() $root = Resolve-Path (Join-Path $PSScriptRoot "..\..\..") -ErrorAction SilentlyContinue if (-not $root) { throw "Kon de repository-root niet bepalen op basis van PSScriptRoot: $PSScriptRoot" } return $root.Path } function Get-AzureContainersInventory { <# .SYNOPSIS Stelt een overzicht op van Azure container-gerelateerde JSON- en PS1-bestanden. .OUTPUTS PSCustomObject met aantallen en details. #> [CmdletBinding()] param() $repoRoot = Get-RepositoryRoot $contentRoot = Join-Path $repoRoot "content\azure\containers" $codeRoot = Join-Path $repoRoot "code\azure\containers" $jsonFiles = @() if (Test-Path -Path $contentRoot) { $jsonFiles = Get-ChildItem -Path $contentRoot -Filter "*.json" -File -ErrorAction SilentlyContinue } $ps1Files = @() if (Test-Path -Path $codeRoot) { $ps1Files = Get-ChildItem -Path $codeRoot -Filter "*.ps1" -File -ErrorAction SilentlyContinue } $byName = @{} foreach ($json in $jsonFiles) { $base = [System.IO.Path]::GetFileNameWithoutExtension($json.Name) if (-not $byName.ContainsKey($base)) { $byName[$base] = [pscustomobject]@{ Name = $base JsonPath = $null JsonUpdated = $null ScriptPath = $null ScriptUpdated= $null } } $entry = $byName[$base] $entry.JsonPath = $json.FullName $entry.JsonUpdated = $json.LastWriteTime $byName[$base] = $entry } foreach ($ps1 in $ps1Files) { $base = [System.IO.Path]::GetFileNameWithoutExtension($ps1.Name) if (-not $byName.ContainsKey($base)) { $byName[$base] = [pscustomobject]@{ Name = $base JsonPath = $null JsonUpdated = $null ScriptPath = $null ScriptUpdated= $null } } $entry = $byName[$base] $entry.ScriptPath = $ps1.FullName $entry.ScriptUpdated = $ps1.LastWriteTime $byName[$base] = $entry } $items = $byName.Values | Sort-Object Name $missingJson = $items | Where-Object { -not $_.JsonPath } $missingScript = $items | Where-Object { -not $_.ScriptPath } return [pscustomobject]@{ RepositoryRoot = $repoRoot Items = $items MissingJson = $missingJson MissingScripts = $missingScript TotalControls = $items.Count WithJsonAndPs1 = ($items | Where-Object { $_.JsonPath -and $_.ScriptPath }).Count } } function Test-AzureConnection { <# .SYNOPSIS Controleert of er een actieve Azure-verbinding bestaat. .OUTPUTS Boolean: $true als verbonden, anders $false #> [CmdletBinding()] param() try { $context = Get-AzContext -ErrorAction Stop if ($context) { Write-Verbose "Azure-verbinding actief: $($context.Account.Id) in tenant $($context.Tenant.Id)" return $true } return $false } catch { Write-Verbose "Geen actieve Azure-verbinding: $_" return $false } } function Get-AzureContainersStatus { <# .SYNOPSIS Inventariseert de status van belangrijke Azure container-services. .OUTPUTS PSCustomObject met container-services status. #> [CmdletBinding()] param() $isConnected = Test-AzureConnection if (-not $isConnected) { Write-Warning "Geen actieve Azure-verbinding. Alleen repository-inventarisatie wordt uitgevoerd." return [pscustomobject]@{ AzureConnected = $false AksClusters = 0 ContainerRegistries = 0 DefenderForContainersEnabled = $false } } try { Write-Verbose "Inventariseren van Azure container-services..." $aksClusters = @() try { $aksClusters = Get-AzAks -ErrorAction SilentlyContinue } catch { Write-Verbose "Kon AKS-clusters niet ophalen: $_" } $containerRegistries = @() try { $containerRegistries = Get-AzContainerRegistry -ErrorAction SilentlyContinue } catch { Write-Verbose "Kon container registries niet ophalen: $_" } return [pscustomobject]@{ AzureConnected = $true AksClusters = $aksClusters.Count ContainerRegistries = $containerRegistries.Count DefenderForContainersEnabled = $false # Vereist specifieke Defender-module } } catch { Write-Warning "Fout bij inventariseren van Azure container-services: $_" return [pscustomobject]@{ AzureConnected = $false AksClusters = 0 ContainerRegistries = 0 DefenderForContainersEnabled = $false } } } function New-ContainerDocumentationTemplate { <# .SYNOPSIS Maakt een eenvoudige Markdown-template aan voor aanvullende Azure container-beveiligingsdocumentatie. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Name, [Parameter(Mandatory = $true)] [string]$OutputPath ) $template = @" # Azure Container Beveiliging component: $Name **Laatst bijgewerkt:** $(Get-Date -Format "yyyy-MM-dd") **Documentatie-eigenaar:** [Naam / functie] **Status:** Concept ## 1. Rol in het Azure container-beveiligingslandschap [Beschrijf hoe deze component (artikel, script of control) past in de totale Azure container-beveiligingsarchitectuur.] ## 2. Container-beveiligingsprincipes en design patterns [Beschrijf welke container-beveiligingsprincipes en design patterns worden toegepast.] ## 3. Technische implementatie [Beschrijf de concrete Azure container-services, configuraties en koppelingen.] ## 4. Beveiligingsmaatregelen [Beschrijf beveiligingslagen, image scanning, runtime-beveiliging, toegangscontrole en monitoring.] ## 5. Compliance en governance [Beschrijf hoe wordt voldaan aan BIO, NIS2, AVG en andere relevante kaders voor container-workloads.] ## 6. Verbeterpunten en vervolgstappen [Beschrijf bekende verbeterpunten, gepland onderhoud en evaluatiemomenten.] "@ $folder = Split-Path -Path $OutputPath -Parent if (-not (Test-Path -Path $folder)) { New-Item -Path $folder -ItemType Directory -Force | Out-Null } $template | Out-File -FilePath $OutputPath -Encoding UTF8 Write-Host " Template gegenereerd: $OutputPath" -ForegroundColor Green } function Invoke-Monitoring { <# .SYNOPSIS Voert een samenvattende monitoring uit van Azure container-beveiligingscomponenten. .OUTPUTS PSCustomObject met overzichtsresultaten. #> [CmdletBinding()] param() Write-Host "`nMonitoring: Azure Container Beveiliging overzicht" -ForegroundColor Yellow Write-Host "===================================================" -ForegroundColor Yellow $inventory = Get-AzureContainersInventory $azureStatus = Get-AzureContainersStatus Write-Host "`nRepository-root: $($inventory.RepositoryRoot)" -ForegroundColor Cyan Write-Host "Totaal Azure container-beveiligingscontrols (JSON/PS1-combinaties): $($inventory.TotalControls)" -ForegroundColor Cyan Write-Host "Volledig gekoppeld (JSON + PS1): $($inventory.WithJsonAndPs1)" -ForegroundColor Cyan if ($azureStatus.AzureConnected) { Write-Host "`nAzure container-services status:" -ForegroundColor Cyan Write-Host " AKS-clusters: $($azureStatus.AksClusters)" -ForegroundColor Gray Write-Host " Container Registries: $($azureStatus.ContainerRegistries)" -ForegroundColor Gray } else { Write-Host "`n⚠️ Geen actieve Azure-verbinding. Verbind met Connect-AzAccount voor volledige monitoring." -ForegroundColor Yellow } if ($inventory.MissingJson.Count -gt 0) { Write-Host "`n❌ Ontbrekende JSON voor de volgende scripts:" -ForegroundColor Red foreach ($item in $inventory.MissingJson) { Write-Host " - $($item.Name) (script: $($item.ScriptPath))" -ForegroundColor Red } } if ($inventory.MissingScripts.Count -gt 0) { Write-Host "`n❌ Ontbrekende PS1-scripts voor de volgende JSON-bestanden:" -ForegroundColor Red foreach ($item in $inventory.MissingScripts) { Write-Host " - $($item.Name) (json: $($item.JsonPath))" -ForegroundColor Red } } if (($inventory.MissingJson.Count -eq 0) -and ($inventory.MissingScripts.Count -eq 0)) { Write-Host "`n✅ Alle Azure container-beveiligingsartikelen hebben zowel JSON als PS1." -ForegroundColor Green } else { Write-Host "`n⚠️ Er zijn nog hiaten in de JSON/PS1-koppeling voor Azure container-beveiliging." -ForegroundColor Yellow Write-Host " Gebruik -Remediation om gericht met deze hiaten aan de slag te gaan." -ForegroundColor Yellow } return [pscustomobject]@{ Inventory = $inventory AzureStatus = $azureStatus } } function Invoke-Remediation { <# .SYNOPSIS Ondersteunt remediatie door ontbrekende componenten inzichtelijk te maken en optioneel documentatietemplates te genereren. .OUTPUTS PSCustomObject met remediatieadvies. #> [CmdletBinding()] param() Write-Host "`nRemediatie: Azure Container Beveiliging overzicht" -ForegroundColor Yellow Write-Host "=================================================" -ForegroundColor Yellow $inventory = Get-AzureContainersInventory $repoRoot = $inventory.RepositoryRoot $docRoot = Join-Path $repoRoot "documentatie\azure-containers" if (-not (Test-Path -Path $docRoot)) { New-Item -Path $docRoot -ItemType Directory -Force | Out-Null } $actions = @() foreach ($item in $inventory.Items) { $action = [pscustomobject]@{ Name = $item.Name HasJson = [bool]$item.JsonPath HasScript = [bool]$item.ScriptPath DocumentationPath = $null DocumentationExists = $false } $docFile = Join-Path $docRoot ("container-" + $item.Name + ".md") $action.DocumentationPath = $docFile $action.DocumentationExists = Test-Path -Path $docFile if (-not $action.DocumentationExists -and -not $WhatIf) { New-ContainerDocumentationTemplate -Name $item.Name -OutputPath $docFile } elseif (-not $action.DocumentationExists -and $WhatIf) { Write-Host " [WhatIf] Zou documentatietemplate aanmaken: $docFile" -ForegroundColor Yellow } $actions += $action } Write-Host "`nSamenvatting remediatie-status:" -ForegroundColor Cyan Write-Host (" Items zonder JSON: {0}" -f ($actions | Where-Object { -not $_.HasJson }).Count) -ForegroundColor Cyan Write-Host (" Items zonder script: {0}" -f ($actions | Where-Object { -not $_.HasScript }).Count) -ForegroundColor Cyan Write-Host (" Items zonder documentatie: {0}" -f ($actions | Where-Object { -not $_.DocumentationExists }).Count) -ForegroundColor Cyan return $actions } try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Azure Container Beveiliging Overzichtsmonitor" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan if ($Monitoring) { Invoke-Monitoring | Out-Null } elseif ($Remediation) { Invoke-Remediation | Out-Null } else { # Standaard: compacte compliance check via monitoring $result = Invoke-Monitoring if (($result.Inventory.MissingJson.Count -eq 0) -and ($result.Inventory.MissingScripts.Count -eq 0)) { Write-Host "`n✅ COMPLIANT" -ForegroundColor Green } else { Write-Host "`n❌ NON-COMPLIANT" -ForegroundColor Red Write-Host "Run met -Remediation voor een gericht overzicht van hiaten en documentatietemplates." -ForegroundColor Yellow } } } catch { Write-Error "Er is een fout opgetreden in index.ps1: $_" throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder een doordachte Azure container-beveiligingsarchitectuur ontstaan versnipperde, inconsistente container-omgevingen waarin beveiligingsmaatregelen niet samenhangend worden toegepast, compliance-vereisten moeilijk aantoonbaar zijn en het risico op container breakout-aanvallen, privilege escalation, ongeautoriseerde toegang en compromittatie van container-workloads aanzienlijk toeneemt. Dit kan leiden tot niet-naleving van AVG, BIO en NIS2, bestuurlijke aansprakelijkheid en verlies van vertrouwen bij burgers en bestuurders.

Management Samenvatting

Een doordachte Azure container-beveiligingsarchitectuur vormt de fundamentele basis voor veilige, schaalbare en beheersbare container-workloads binnen de Nederlandse publieke sector. Dit index-artikel schetst de overkoepelende principes, beveiligingsmaatregelen en best practices, en fungeert als kapstok voor meer specifieke artikelen over AKS security baseline, container registry beveiliging, image scanning en andere container-beveiligingscomponenten.