Sovereign Cloud Platforms Voor Azure In De Nederlandse Publieke Sector

💼 Management Samenvatting

Sovereign cloud platforms bieden Nederlandse overheidsorganisaties gespecialiseerde cloudomgevingen die expliciet zijn ontworpen om digitale soevereiniteit te ondersteunen. In tegenstelling tot standaard public cloud-aanbiedingen, richten sovereign cloud platforms zich op het waarborgen van strategische controle, onafhankelijkheid en compliance met nationale en Europese wet- en regelgeving. Voor Nederlandse publieke organisaties die werken onder de BIO, AVG en NIS2 vormen sovereign cloud platforms een belangrijke optie om cloudadoptie te combineren met soevereiniteitseisen, waarbij specifieke platformfeatures, architectuurpatronen en governance-modellen worden gebruikt om digitale soevereiniteit te verankeren.

Aanbeveling
EVALUEER EN IMPLEMENTEER SOVEREIGN CLOUD PLATFORMS VOOR UW AZURE-OMGEVING
Risico zonder
High
Risk Score
9/10
Implementatie
230u (tech: 140u)
Van toepassing op:
Azure Tenant
Azure Resources
Publieke Sector
Overheidsorganisaties
Kritieke Infrastructuur

Zonder expliciete focus op sovereign cloud platforms kunnen Nederlandse overheidsorganisaties onvoldoende gebruikmaken van gespecialiseerde platformfeatures en architectuurpatronen die bijdragen aan digitale soevereiniteit. Standaard public cloud-aanbiedingen bieden weliswaar veel functionaliteit, maar zijn niet altijd optimaal afgestemd op soevereiniteitseisen zoals strategische controle, minimale afhankelijkheid van niet-EU jurisdicties en expliciete compliance met Nederlandse en Europese wet- en regelgeving. Voor organisaties die kritieke infrastructuur beheren of zeer gevoelige gegevens verwerken, kan het ontbreken van een expliciete keuze voor sovereign cloud platforms leiden tot suboptimale architectuurkeuzes, onvoldoende gebruik van platformfeatures die soevereiniteit ondersteunen, en vragen van toezichthouders over de mate waarin de organisatie daadwerkelijk gebruikmaakt van beschikbare soevereiniteitsoplossingen. Bovendien ontstaat er zonder duidelijke kennis van sovereign cloud platforms een risico dat organisaties niet optimaal profiteren van gespecialiseerde features, architectuurpatronen en governance-modellen die bijdragen aan digitale soevereiniteit.

PowerShell Modules Vereist
Primary API: Azure API, Azure Resource Manager, Azure Policy
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.Resources, Az.Policy, Az.ResourceGraph

Implementatie

Dit artikel beschrijft hoe Nederlandse publieke organisaties sovereign cloud platforms evalueren, selecteren en implementeren binnen Azure-omgevingen. We beginnen met de uitleg van het concept sovereign cloud platforms en de relatie met digitale soevereiniteit, gevolgd door een overzicht van beschikbare platformopties zoals Microsoft Cloud for Sovereignty, Azure Government en gespecialiseerde EU-cloudoplossingen. Vervolgens gaan we in op evaluatiecriteria voor platformselectie, zoals compliance-ondersteuning, geografische controle, technische features en governance-modellen. In de secties over implementatie, configuratie en governance laten we zien hoe je met behulp van een PowerShell-script de huidige platformconfiguratie kunt analyseren, soevereiniteitsfeatures kunt identificeren en platformkeuzes kunt optimaliseren. Het doel is een praktisch toepasbaar raamwerk dat cloudarchitecten, CISO's en strategische adviseurs in staat stelt om sovereign cloud platforms niet alleen te evalueren, maar ook effectief te implementeren en te verankeren in de bredere cloudstrategie.

Het concept van sovereign cloud platforms

Sovereign cloud platforms zijn gespecialiseerde cloudomgevingen die expliciet zijn ontworpen om digitale soevereiniteit te ondersteunen door middel van specifieke platformfeatures, architectuurpatronen en governance-modellen. In tegenstelling tot standaard public cloud-aanbiedingen, richten sovereign cloud platforms zich op het waarborgen van strategische controle, onafhankelijkheid en compliance met nationale en Europese wet- en regelgeving. Voor Nederlandse overheidsorganisaties betekent dit dat platformkeuzes niet alleen worden gebaseerd op functionaliteit en kosten, maar ook op soevereiniteitscriteria zoals geografische controle, minimale afhankelijkheid van niet-EU jurisdicties, expliciete compliance-ondersteuning en governance-modellen die bijdragen aan strategische controle.

Het concept sovereign cloud platforms omvat verschillende dimensies. Ten eerste gaat het om platformfeatures die expliciet bijdragen aan soevereiniteit, zoals geografische restricties, data residency controls, encryptie-opties en compliance-rapportage. Ten tweede gaat het om architectuurpatronen die zijn ontworpen om strategische controle te ondersteunen, zoals hub-and-spoke-topologieën, private endpoints, netwerkisolatie en beveiligingslagen. Ten derde gaat het om governance-modellen die bijdragen aan onafhankelijkheid en controle, zoals customer-managed keys, resource locks, policy-automation en monitoring- en auditprocessen. Ten vierde gaat het om compliance-ondersteuning die expliciet aansluit bij Nederlandse en Europese wet- en regelgeving, zoals AVG-compliance, NIS2-ondersteuning en BIO-alignment.

Voor Nederlandse overheidsorganisaties worden sovereign cloud platforms gevormd door verschillende wet- en regelgevingskaders. De Baseline Informatiebeveiliging Overheid (BIO) benadrukt beheersing van uitbesteding, contractmanagement en ketenverantwoordelijkheid, waarbij platformkeuzes moeten bijdragen aan aantoonbare controle over gegevensverwerking en systemen. De NIS2-richtlijn versterkt deze focus door te eisen dat operators van essentiële diensten systematisch risico's in de toeleveringsketen beoordelen en documenteren, waarbij platformfeatures een belangrijke mitigerende maatregel kunnen zijn. De AVG stelt daarnaast eisen aan doorgifte van persoonsgegevens aan derde landen, waarbij platformkeuzes moeten bijdragen aan het waarborgen dat persoonsgegevens binnen de EER blijven of dat passende waarborgen zijn getroffen.

Een veelvoorkomend misverstand is dat sovereign cloud platforms automatisch worden bereikt door alleen te kiezen voor een specifieke cloudleverancier of regio. In werkelijkheid omvat sovereign cloud platforms veel meer: het gaat om het evalueren van platformfeatures op hun bijdrage aan soevereiniteit, het configureren van platforms met soevereiniteitsprincipes als uitgangspunt, het gebruiken van architectuurpatronen die strategische controle ondersteunen, en het verankeren van governance-modellen die bijdragen aan onafhankelijkheid en compliance. Dit artikel helpt organisaties om deze vertaalslag gestructureerd te maken en sovereign cloud platforms effectief te evalueren, selecteren en implementeren binnen de bredere cloudstrategie en risicobeheersing.

Beschikbare sovereign cloud platformopties

Voor Nederlandse overheidsorganisaties zijn verschillende sovereign cloud platformopties beschikbaar, elk met specifieke features, architectuurpatronen en governance-modellen die bijdragen aan digitale soevereiniteit. Microsoft Cloud for Sovereignty is een gespecialiseerde Azure-oplossing die expliciet is ontworpen om digitale soevereiniteit te ondersteunen door middel van policy templates, compliance-rapportage, data residency controls en governance-tools. Deze oplossing biedt Nederlandse organisaties een gestructureerde aanpak om Azure-omgevingen te configureren met soevereiniteitsprincipes als uitgangspunt, waarbij standaard templates en best practices worden gebruikt om compliance en controle te verankeren.

Azure Government is een andere belangrijke optie voor Nederlandse overheidsorganisaties die werken met gevoelige of geclassificeerde gegevens. Azure Government biedt gescheiden fysieke en logische omgevingen die voldoen aan specifieke compliance-eisen, met geografische restricties, enhanced security controls en dedicated support. Hoewel Azure Government primair is gericht op Amerikaanse overheidsorganisaties, biedt het ook relevante features voor Nederlandse organisaties die werken met geclassificeerde informatie of kritieke infrastructuur. Daarnaast zijn er gespecialiseerde EU-cloudoplossingen beschikbaar die expliciet zijn ontworpen om Europese soevereiniteitseisen te ondersteunen, zoals geografische restricties tot EU-regio's, expliciete AVG-compliance en governance-modellen die aansluiten bij Europese wet- en regelgeving.

Naast gespecialiseerde platformopties kunnen Nederlandse organisaties ook standaard Azure-omgevingen configureren met soevereiniteitsprincipes als uitgangspunt. Dit omvat het gebruik van Azure Policies om regionale restricties af te dwingen, het implementeren van landing zones die automatisch compliance en beveiliging borgt, het configureren van netwerkarchitecturen die bijdragen aan isolatie en controle, en het opzetten van monitoring- en governance-processen die aantoonbaar maken dat soevereiniteitsprincipes worden nageleefd. Door expliciet te werken aan platformconfiguratie met soevereiniteitsprincipes in het achterhoofd, kunnen organisaties ook met standaard Azure-omgevingen een hoog niveau van digitale soevereiniteit bereiken.

De keuze voor een specifieke platformoptie hangt af van verschillende factoren, zoals dataclassificatie, compliance-eisen, functionele vereisten en organisatorische context. Voor organisaties die werken met geclassificeerde informatie of kritieke infrastructuur kan Azure Government of gespecialiseerde EU-cloudoplossingen de meest geschikte optie zijn, terwijl organisaties die werken met persoonsgegevens of minder gevoelige data mogelijk kunnen volstaan met standaard Azure-omgevingen die zijn geconfigureerd met soevereiniteitsprincipes. Het is belangrijk om platformkeuzes expliciet te evalueren op hun bijdrage aan soevereiniteit en om platformfeatures, architectuurpatronen en governance-modellen te gebruiken die strategische controle en compliance ondersteunen.

Evaluatiecriteria voor platformselectie

De evaluatie van sovereign cloud platforms moet gebaseerd zijn op expliciete criteria die aansluiten bij soevereiniteitsdoelen, compliance-eisen en organisatorische context. Het eerste criterium is 'geografische controle': het platform moet ondersteuning bieden voor geografische restricties die aansluiten bij EU Data Boundary-eisen, met expliciete controle over datalocaties en minimale blootstelling aan niet-EU jurisdicties. Dit omvat bijvoorbeeld de mogelijkheid om resources uitsluitend in goedgekeurde EU-regio's uit te rollen, de mogelijkheid om data residency te monitoren en te rapporteren, en de mogelijkheid om geografische restricties af te dwingen via policies en guardrails.

Het tweede criterium is 'compliance-ondersteuning': het platform moet expliciete ondersteuning bieden voor compliance met Nederlandse en Europese wet- en regelgeving, zoals AVG-compliance, NIS2-ondersteuning en BIO-alignment. Dit omvat bijvoorbeeld compliance-rapportage, audit-logs, policy-templates en governance-tools die bijdragen aan aantoonbare compliance. Het derde criterium is 'technische controle': het platform moet volledige controle bieden over encryptie, toegangsbeveiliging, netwerkconfiguratie en beveiligingslagen, zonder afhankelijkheid van standaardconfiguraties die mogelijk niet voldoen aan soevereiniteitseisen. Dit omvat bijvoorbeeld customer-managed keys, granular access controls, network isolation en security monitoring.

Het vierde criterium is 'governance-modellen': het platform moet governance-tools en -processen bieden die bijdragen aan strategische controle en onafhankelijkheid. Dit omvat bijvoorbeeld policy-automation, resource locks, monitoring- en auditprocessen en governance-dashboards die inzicht geven in compliance-status en soevereiniteitsnaleving. Het vijfde criterium is 'exit-strategieën': het platform moet ondersteuning bieden voor exit-strategieën die bijdragen aan minimale vendor lock-in en onafhankelijkheid. Dit omvat bijvoorbeeld data portability, standard APIs, Infrastructure as Code-ondersteuning en migratietools die bijdragen aan flexibiliteit en controle.

Binnen Azure kunnen deze evaluatiecriteria worden toegepast op verschillende platformopties, waarbij Microsoft Cloud for Sovereignty, Azure Government en standaard Azure-omgevingen worden vergeleken op hun bijdrage aan soevereiniteit. Het bijbehorende PowerShell-script, zoals in dit artikel beschreven, kan deze evaluatie ondersteunen door de huidige platformconfiguratie te analyseren, soevereiniteitsfeatures te identificeren en platformkeuzes te optimaliseren op basis van expliciete criteria. Door evaluatiecriteria expliciet te definiëren en te gebruiken bij platformselectie, kunnen organisaties ervoor zorgen dat platformkeuzes bijdragen aan digitale soevereiniteit en strategische controle.

Implementatie en configuratie van sovereign cloud platforms

Gebruik PowerShell-script sovereign-cloud-platforms.ps1 (functie Invoke-Implementation) – Gebruik dit PowerShell-script om de huidige platformconfiguratie te analyseren, soevereiniteitsfeatures te identificeren en platformkeuzes te optimaliseren..

De implementatie van sovereign cloud platforms start met het evalueren van de huidige platformconfiguratie en het identificeren van soevereiniteitsfeatures die al beschikbaar zijn. Dit omvat het analyseren van Azure Policies die regionale restricties afdwingen, het controleren van resource locks die bijdragen aan controle, het evalueren van netwerkconfiguratie die isolatie ondersteunt, en het beoordelen van governance-processen die compliance verankeren. Op basis van deze analyse kunnen organisaties bepalen welke platformfeatures al worden gebruikt, welke features nog moeten worden geïmplementeerd en welke platformkeuzes moeten worden geoptimaliseerd.

Voor Microsoft Cloud for Sovereignty betekent implementatie het gebruik van standaard policy templates, compliance-rapportage en governance-tools die expliciet zijn ontworpen om digitale soevereiniteit te ondersteunen. Deze templates en tools worden gebruikt om Azure-omgevingen te configureren met soevereiniteitsprincipes als uitgangspunt, waarbij standaard best practices worden toegepast om compliance en controle te verankeren. Voor Azure Government betekent implementatie het migreren van workloads naar gescheiden omgevingen die voldoen aan specifieke compliance-eisen, met geografische restricties, enhanced security controls en dedicated support. Voor standaard Azure-omgevingen betekent implementatie het configureren van platforms met soevereiniteitsprincipes als uitgangspunt, waarbij Azure Policies, landing zones en governance-processen worden gebruikt om digitale soevereiniteit te verankeren.

Het PowerShell-script sovereign-cloud-platforms.ps1 ondersteunt deze implementatie door automatisch te analyseren welke platformfeatures beschikbaar zijn, welke soevereiniteitsfeatures worden gebruikt en welke platformkeuzes kunnen worden geoptimaliseerd. Het script maakt verbinding met Azure via Connect-AzAccount, haalt platformconfiguratie op, analyseert soevereiniteitsfeatures en rapporteert over platformkeuzes en optimalisatiemogelijkheden. De uitvoer bevat zowel een overzicht van beschikbare platformfeatures als aanbevelingen voor platformoptimalisatie, waardoor teams gericht acties kunnen uitzetten om soevereiniteitsfeatures beter te benutten en platformkeuzes te optimaliseren. Het script kan herhaaldelijk worden gedraaid na platformwijzigingen om te verifiëren dat soevereiniteitsfeatures effectief worden gebruikt en dat platformkeuzes bijdragen aan digitale soevereiniteit.

Governance en monitoring van sovereign cloud platforms

Gebruik PowerShell-script sovereign-cloud-platforms.ps1 (functie Invoke-Monitoring) – Voert een periodieke controle uit op platformconfiguratie en rapporteert over soevereiniteitsfeatures en platformkeuzes, met ondersteuning voor een lokale debugmodus zonder cloudverbinding..

Governance van sovereign cloud platforms kan niet worden beperkt tot eenmalige configuratie. Nieuwe projecten, uitbreidingen en wijzigingen in de Azure-omgeving kunnen ertoe leiden dat platformfeatures niet optimaal worden gebruikt of dat platformkeuzes afwijken van soevereiniteitsprincipes. Een volwassen governance-aanpak combineert daarom geautomatiseerde controles met vaste rapportagemomenten en strategische beoordelingen. Voor Azure betekent dit dat er periodiek – bijvoorbeeld maandelijks of per kwartaal – een platformanalyse wordt uitgevoerd die toetst welke soevereiniteitsfeatures beschikbaar zijn, welke features worden gebruikt en welke platformkeuzes kunnen worden geoptimaliseerd. Op basis daarvan kan worden vastgesteld welk percentage van de platformconfiguratie voldoet aan soevereiniteitsprincipes en waar verbetermogelijkheden optreden.

Monitoring vormt de basis voor effectieve governance omdat het inzicht geeft in platformconfiguratie, soevereiniteitsfeatures en platformkeuzes. Een volwassen monitoringaanpak omvat verschillende componenten: geautomatiseerde controles die periodiek toetsen of platformfeatures correct worden gebruikt, rapportages die inzicht geven in platformconfiguratie en soevereiniteitsnaleving, en strategische beoordelingen die platformkeuzes evalueren op hun bijdrage aan digitale soevereiniteit. Voor Nederlandse overheidsorganisaties is het belangrijk om deze monitoring-aanpak te koppelen aan bredere governance-kaders, zoals informatiebeveiligingsbeleid, privacybeleid en contractmanagement. Door expliciet te werken aan monitoring en deze te verankeren in de organisatiestructuur, zorgt een organisatie ervoor dat platformfeatures effectief worden gebruikt en dat platformkeuzes bijdragen aan digitale soevereiniteit.

Continue verbetering is een essentieel aspect van een volwassen sovereign cloud platform-programma omdat het ervoor zorgt dat platformfeatures effectief worden gebruikt en dat platformkeuzes blijven bijdragen aan digitale soevereiniteit. Continue verbetering omvat het regelmatig evalueren van platformconfiguratie, het identificeren van verbetermogelijkheden, het implementeren van verbeteringen en het monitoren van de effectiviteit van verbeteringen. Dit kan bijvoorbeeld betekenen dat platformfeatures worden geoptimaliseerd op basis van ervaringen, dat platformkeuzes worden verfijnd om beter aan te sluiten bij soevereiniteitsprincipes, of dat governance-processen worden gestroomlijnd om sneller beslissingen te kunnen nemen. Voor Nederlandse overheidsorganisaties is het belangrijk om continue verbetering te koppelen aan bredere verbeterprogramma's, zoals informatiebeveiligingsprogramma's en compliance-programma's. Door expliciet te werken aan continue verbetering en deze te verankeren in de organisatiestructuur, zorgt een organisatie ervoor dat sovereign cloud platforms evolueren met nieuwe eisen en ontwikkelingen en dat platformfeatures effectief blijven bijdragen aan digitale soevereiniteit.

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 Analyse van sovereign cloud platforms voor Azure-omgevingen .DESCRIPTION Voert een analyse uit op: - Beschikbare platformfeatures en soevereiniteitsfeatures - Platformconfiguratie en compliance-ondersteuning - Geografische controle en data residency - Governance-modellen en exit-strategieën - Optimalisatiemogelijkheden voor platformkeuzes Het script ondersteunt twee gebruiksscenario's: - Productie: verbinding met Azure om daadwerkelijke platformgegevens op te halen - Lokale debugmodus: synthetische testdata genereren zonder cloudverbinding Dit script sluit inhoudelijk aan op het artikel 'Sovereign Cloud Platforms voor Azure in de Nederlandse Publieke Sector'. .NOTES Filename: sovereign-cloud-platforms.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/sovereignty/sovereign-cloud-platforms.json #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Resources, Az.Policy, Az.ResourceGraph [CmdletBinding()] param( [Parameter(HelpMessage = "Monitor current platform configuration")] [switch]$Monitoring, [Parameter(HelpMessage = "Apply recommended platform configuration")] [switch]$Remediation, [Parameter(HelpMessage = "Show what would happen without making changes")] [switch]$WhatIf, [Parameter(HelpMessage = "Enable debug mode with synthetic test data")] [switch]$DebugMode ) $ErrorActionPreference = 'Stop' $PolicyName = "Sovereign Cloud Platforms - Azure" function Get-AllowedRegions { <# .SYNOPSIS Geeft de lijst met geaccepteerde EU-regio's voor sovereign cloud terug #> [CmdletBinding()] param() return @( "westeurope", "northeurope", "germanywestcentral", "germanynorth", "norwayeast", "norwaywest", "swedencentral", "swedensouth", "uksouth", "ukwest", "francecentral", "francesouth", "switzerlandnorth", "switzerlandwest", "italynorth", "spaincentral", "polandcentral" ) } function Connect-RequiredServices { [CmdletBinding()] param( [switch]$DebugMode ) if ($DebugMode) { Write-Verbose "DebugMode is ingeschakeld: er wordt geen verbinding met Azure gemaakt." return } if (-not (Get-AzContext -ErrorAction SilentlyContinue)) { Connect-AzAccount -ErrorAction Stop | Out-Null } } function Test-SovereignCloudPlatforms { <# .SYNOPSIS Analyseert de Azure-platformconfiguratie op soevereiniteitsfeatures en platformkeuzes .OUTPUTS PSCustomObject met platformanalyse en soevereiniteitsfeatures #> [CmdletBinding()] param( [switch]$DebugMode ) $allowedRegions = Get-AllowedRegions if ($DebugMode) { # Synthetische testdata voor lokale validatie zonder cloudverbinding return [PSCustomObject]@{ Mode = "Debug" PlatformType = "Standard Azure" SovereignFeaturesAvailable = $true SovereignFeaturesUsed = $true PoliciesConfigured = $true PoliciesCount = 12 ResourcesInAllowedRegions = 380 ResourcesOutsideAllowedRegions = 20 CompliancePercentage = [math]::Round((380 / 400) * 100, 1) ResourceLocksConfigured = $true LocksCount = 45 CustomerManagedKeysConfigured = $true PrivateEndpointsCount = 32 NetworkIsolationConfigured = $true GovernanceProcessesConfigured = $true PlatformScore = 82 IsCompliant = $false DetectedRegions = @("westeurope", "northeurope", "eastus") } } # Bepaal platformtype (indicatie op basis van tenant en configuratie) $platformType = "Standard Azure" try { $tenantInfo = Get-AzTenant -ErrorAction SilentlyContinue # Azure Government heeft specifieke tenant-eigenschappen # Dit is een vereenvoudigde check if ($tenantInfo -and $tenantInfo.Id -like "*gov*") { $platformType = "Azure Government" } } catch { Write-Verbose "Kon platformtype niet bepalen: $_" } # Controleer Azure Policies voor soevereiniteit $policiesConfigured = $false $policiesCount = 0 try { $sovereigntyPolicies = Get-AzPolicyDefinition -ErrorAction SilentlyContinue | Where-Object { $_.Properties.DisplayName -like "*allowed locations*" -or $_.Properties.DisplayName -like "*allowed regions*" -or $_.Properties.DisplayName -like "*data residency*" -or $_.Properties.DisplayName -like "*sovereignty*" -or $_.Properties.DisplayName -like "*encryption*" -or $_.Properties.DisplayName -like "*customer managed*" } if ($sovereigntyPolicies) { $policiesConfigured = $true $policiesCount = $sovereigntyPolicies.Count } } catch { Write-Verbose "Kon policies niet ophalen: $_" } # Haal subscriptions en resources op $subscriptions = Get-AzSubscription -ErrorAction Stop | Where-Object { $_.State -eq 'Enabled' } $totalResources = 0 $resourcesInAllowedRegions = 0 $resourcesOutsideAllowedRegions = 0 $regions = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase) $locksCount = 0 $privateEndpointsCount = 0 $customerManagedKeysCount = 0 foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id -ErrorAction Stop | Out-Null try { # Controleer resource locks $locks = Get-AzResourceLock -ErrorAction SilentlyContinue $locksCount += $locks.Count # Haal resources op via Resource Graph try { $resources = Search-AzGraph -Query "Resources | where type != 'microsoft.azureactivedirectory/b2ctenants' | project name, type, location, resourceGroup" -Subscription $sub.Id -ErrorAction SilentlyContinue if ($resources) { foreach ($r in $resources) { if (-not $r.location) { continue } $totalResources++ $null = $regions.Add($r.location.ToLowerInvariant()) if ($allowedRegions -contains $r.location.ToLowerInvariant()) { $resourcesInAllowedRegions++ } else { $resourcesOutsideAllowedRegions++ } } } # Controleer private endpoints $privateEndpoints = Search-AzGraph -Query "Resources | where type == 'microsoft.network/privateendpoints' | project name" -Subscription $sub.Id -ErrorAction SilentlyContinue if ($privateEndpoints) { $privateEndpointsCount += $privateEndpoints.Count } # Controleer customer-managed keys (indicatie via Key Vault resources) $keyVaults = Search-AzGraph -Query "Resources | where type == 'microsoft.keyvault/vaults' | project name" -Subscription $sub.Id -ErrorAction SilentlyContinue if ($keyVaults) { $customerManagedKeysCount += $keyVaults.Count } } catch { # Fallback naar Get-AzResource Write-Verbose "Resource Graph niet beschikbaar, gebruik Get-AzResource: $_" $resources = Get-AzResource -ErrorAction SilentlyContinue if ($resources) { foreach ($r in $resources) { if (-not $r.Location) { continue } $totalResources++ $null = $regions.Add($r.Location.ToLowerInvariant()) if ($allowedRegions -contains $r.Location.ToLowerInvariant()) { $resourcesInAllowedRegions++ } else { $resourcesOutsideAllowedRegions++ } } } } } catch { Write-Verbose "Kon resources voor subscription '$($sub.Name)' niet ophalen: $_" } } $compliancePercentage = $null if ($totalResources -gt 0) { $compliancePercentage = [math]::Round(($resourcesInAllowedRegions / $totalResources) * 100, 1) } # Controleer soevereiniteitsfeatures $sovereignFeaturesAvailable = ($policiesConfigured -or $locksCount -gt 0 -or $privateEndpointsCount -gt 0 -or $customerManagedKeysCount -gt 0) $sovereignFeaturesUsed = ($policiesConfigured -and $locksCount -gt 0) $customerManagedKeysConfigured = ($customerManagedKeysCount -gt 0) $networkIsolationConfigured = ($privateEndpointsCount -gt 0) # Controleer governance-processen (indicatie) $governanceProcessesConfigured = ($policiesConfigured -and $locksCount -gt 0) # Bereken platformscore $platformScore = 0 if ($policiesConfigured) { $platformScore += 25 } if ($compliancePercentage -ge 95) { $platformScore += 25 } elseif ($compliancePercentage -ge 80) { $platformScore += 15 } elseif ($compliancePercentage -ge 50) { $platformScore += 5 } if ($locksCount -gt 0) { $platformScore += 15 } if ($customerManagedKeysConfigured) { $platformScore += 10 } if ($networkIsolationConfigured) { $platformScore += 15 } if ($governanceProcessesConfigured) { $platformScore += 10 } $isCompliant = ($policiesConfigured -and $resourcesOutsideAllowedRegions -eq 0 -and $sovereignFeaturesUsed -and $governanceProcessesConfigured) [PSCustomObject]@{ Mode = "Live" PlatformType = $platformType SovereignFeaturesAvailable = $sovereignFeaturesAvailable SovereignFeaturesUsed = $sovereignFeaturesUsed PoliciesConfigured = $policiesConfigured PoliciesCount = $policiesCount TotalResources = $totalResources ResourcesInAllowedRegions = $resourcesInAllowedRegions ResourcesOutsideAllowedRegions = $resourcesOutsideAllowedRegions CompliancePercentage = $compliancePercentage ResourceLocksConfigured = ($locksCount -gt 0) LocksCount = $locksCount CustomerManagedKeysConfigured = $customerManagedKeysConfigured CustomerManagedKeysCount = $customerManagedKeysCount PrivateEndpointsCount = $privateEndpointsCount NetworkIsolationConfigured = $networkIsolationConfigured GovernanceProcessesConfigured = $governanceProcessesConfigured IsCompliant = $isCompliant DetectedRegions = @($regions) | Sort-Object PlatformScore = $platformScore } } function Test-Compliance { <# .SYNOPSIS Wrapper function die compliance-status test .OUTPUTS Returns monitoring result object with isCompliant property #> [CmdletBinding()] param( [switch]$DebugMode ) $result = Test-SovereignCloudPlatforms -DebugMode:$DebugMode return [PSCustomObject]@{ isCompliant = $result.IsCompliant details = $result } } function Invoke-Monitoring { <# .SYNOPSIS Monitors and reports current sovereign cloud platform configuration .DESCRIPTION Checks current platform configuration against sovereign cloud principles. Reports platform features and identifies optimization opportunities. .OUTPUTS Returns hashtable with: - isCompliant: Boolean indicating overall compliance - details: Detailed findings #> [CmdletBinding()] param( [switch]$DebugMode ) try { Write-Host "`nMonitoring:" -ForegroundColor Yellow Connect-RequiredServices -DebugMode:$DebugMode Write-Host "Analyseren van sovereign cloud platformconfiguratie..." -ForegroundColor Gray $result = Test-SovereignCloudPlatforms -DebugMode:$DebugMode Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host $PolicyName -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host ("Modus : {0}" -f $result.Mode) -ForegroundColor White Write-Host ("Platformtype : {0}" -f $result.PlatformType) -ForegroundColor White Write-Host ("Soevereiniteitsfeatures beschikbaar: {0}" -f $(if ($result.SovereignFeaturesAvailable) { "Ja" } else { "Nee" })) -ForegroundColor $(if ($result.SovereignFeaturesAvailable) { 'Green' } else { 'Yellow' }) Write-Host ("Soevereiniteitsfeatures gebruikt: {0}" -f $(if ($result.SovereignFeaturesUsed) { "Ja" } else { "Nee" })) -ForegroundColor $(if ($result.SovereignFeaturesUsed) { 'Green' } else { 'Yellow' }) Write-Host ("Policies geconfigureerd : {0}" -f $(if ($result.PoliciesConfigured) { "Ja ($($result.PoliciesCount))" } else { "Nee" })) -ForegroundColor $(if ($result.PoliciesConfigured) { 'Green' } else { 'Yellow' }) Write-Host ("Totaal aantal resources : {0}" -f $result.TotalResources) -ForegroundColor White Write-Host ("Resources in toegestane regio's: {0}" -f $result.ResourcesInAllowedRegions) -ForegroundColor White Write-Host ("Resources buiten toegestane regio's: {0}" -f $result.ResourcesOutsideAllowedRegions) -ForegroundColor $(if ($result.ResourcesOutsideAllowedRegions -eq 0) { 'Green' } else { 'Yellow' }) if ($null -ne $result.CompliancePercentage) { Write-Host ("Compliance percentage : {0}%" -f $result.CompliancePercentage) -ForegroundColor $(if ($result.CompliancePercentage -ge 95) { 'Green' } elseif ($result.CompliancePercentage -ge 80) { 'Yellow' } else { 'Red' }) } else { Write-Host "Compliance percentage : n.v.t. (geen resources gevonden)" -ForegroundColor Yellow } Write-Host ("Resource locks geconfigureerd : {0}" -f $(if ($result.ResourceLocksConfigured) { "Ja ($($result.LocksCount) locks)" } else { "Nee" })) -ForegroundColor $(if ($result.ResourceLocksConfigured) { 'Green' } else { 'Yellow' }) Write-Host ("Customer-managed keys : {0}" -f $(if ($result.CustomerManagedKeysConfigured) { "Ja ($($result.CustomerManagedKeysCount) Key Vaults)" } else { "Nee" })) -ForegroundColor $(if ($result.CustomerManagedKeysConfigured) { 'Green' } else { 'Yellow' }) Write-Host ("Netwerkisolatie geconfigureerd : {0}" -f $(if ($result.NetworkIsolationConfigured) { "Ja ($($result.PrivateEndpointsCount) private endpoints)" } else { "Nee" })) -ForegroundColor $(if ($result.NetworkIsolationConfigured) { 'Green' } else { 'Yellow' }) Write-Host ("Governance-processen : {0}" -f $(if ($result.GovernanceProcessesConfigured) { "Ja" } else { "Nee" })) -ForegroundColor $(if ($result.GovernanceProcessesConfigured) { 'Green' } else { 'Yellow' }) Write-Host ("Platformscore : {0}/100" -f $result.PlatformScore) -ForegroundColor $(if ($result.PlatformScore -ge 80) { 'Green' } elseif ($result.PlatformScore -ge 60) { 'Yellow' } else { 'Red' }) if ($result.DetectedRegions -and $result.DetectedRegions.Count -gt 0) { Write-Host ("Gedetecteerde regio's : {0}" -f ($result.DetectedRegions -join ", ")) -ForegroundColor White } Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host "SUMMARY:" -ForegroundColor Cyan if ($result.IsCompliant) { Write-Host "`n[OK] COMPLIANT" -ForegroundColor Green Write-Host "De platformconfiguratie voldoet aan sovereign cloud principes." -ForegroundColor Green } else { Write-Host "`n[FAIL] NON-COMPLIANT" -ForegroundColor Red if (-not $result.SovereignFeaturesAvailable) { Write-Host " - Soevereiniteitsfeatures zijn niet beschikbaar of niet geconfigureerd" -ForegroundColor Yellow } if (-not $result.SovereignFeaturesUsed) { Write-Host " - Soevereiniteitsfeatures zijn beschikbaar maar niet optimaal gebruikt" -ForegroundColor Yellow } if (-not $result.PoliciesConfigured) { Write-Host " - Azure Policies voor soevereiniteit zijn niet geconfigureerd" -ForegroundColor Yellow } if ($result.ResourcesOutsideAllowedRegions -gt 0) { Write-Host " - Er zijn $($result.ResourcesOutsideAllowedRegions) resources buiten toegestane regio's" -ForegroundColor Yellow } if (-not $result.ResourceLocksConfigured) { Write-Host " - Resource locks zijn niet geconfigureerd voor kritieke workloads" -ForegroundColor Yellow } if (-not $result.CustomerManagedKeysConfigured) { Write-Host " - Customer-managed keys zijn niet geconfigureerd" -ForegroundColor Yellow } if (-not $result.NetworkIsolationConfigured) { Write-Host " - Netwerkisolatie via private endpoints is niet geconfigureerd" -ForegroundColor Yellow } } return @{ isCompliant = $result.IsCompliant details = $result timestamp = Get-Date } } catch { Write-Host "`n[FAIL] ERROR during monitoring: $_" -ForegroundColor Red throw } } function Invoke-Remediation { <# .SYNOPSIS Applies recommended sovereign cloud platform configuration .DESCRIPTION Implements recommended configuration to optimize platform choices for sovereignty. Uses native PowerShell cmdlets where possible. .PARAMETER WhatIf Shows what would be changed without making actual changes #> [CmdletBinding(SupportsShouldProcess)] param( [switch]$WhatIf, [switch]$DebugMode ) try { Write-Host "`nRemediation:" -ForegroundColor Yellow if ($DebugMode) { Write-Host "[INFO] DebugMode: geen daadwerkelijke wijzigingen worden uitgevoerd" -ForegroundColor Yellow return } Connect-RequiredServices Write-Host "Optimaliseren van platformconfiguratie voor soevereiniteit..." -ForegroundColor Gray # Controleer eerst de huidige status $currentStatus = Test-SovereignCloudPlatforms if ($currentStatus.IsCompliant) { Write-Host " [OK] Platformconfiguratie is al optimaal geconfigureerd voor soevereiniteit" -ForegroundColor Green return } # Optimaliseer soevereiniteitsfeatures indien nodig if (-not $currentStatus.SovereignFeaturesUsed) { Write-Host "`n[INFO] Soevereiniteitsfeatures optimaliseren:" -ForegroundColor Yellow Write-Host " Overweeg de volgende acties:" -ForegroundColor White Write-Host " 1. Evalueer Microsoft Cloud for Sovereignty voor gestructureerde soevereiniteitsondersteuning" -ForegroundColor White Write-Host " 2. Gebruik standaard policy templates voor soevereiniteit" -ForegroundColor White Write-Host " 3. Implementeer compliance-rapportage en governance-tools" -ForegroundColor White Write-Host " 4. Documenteer platformkeuzes in architectuurdocumentatie" -ForegroundColor White if ($PSCmdlet.ShouldProcess("Sovereign Features", "Optimize platform features")) { Write-Host " [NOTE] Platformoptimalisatie vereist strategische besluitvorming en architectuurplanning" -ForegroundColor Yellow } } # Configureer customer-managed keys indien nodig if (-not $currentStatus.CustomerManagedKeysConfigured) { Write-Host "`n[INFO] Customer-managed keys configureren:" -ForegroundColor Yellow Write-Host " Overweeg de volgende stappen:" -ForegroundColor White Write-Host " 1. Maak Azure Key Vault aan voor centrale sleutelbeheer" -ForegroundColor White Write-Host " 2. Configureer customer-managed keys voor kritieke workloads" -ForegroundColor White Write-Host " 3. Implementeer key rotation en backup-processen" -ForegroundColor White Write-Host " 4. Documenteer key management in beveiligingsdocumentatie" -ForegroundColor White if ($PSCmdlet.ShouldProcess("Customer Managed Keys", "Configure key management")) { Write-Host " [NOTE] Key management vereist Azure Key Vault-configuratie en key policies" -ForegroundColor Yellow } } # Optimaliseer netwerkisolatie indien nodig if (-not $currentStatus.NetworkIsolationConfigured) { Write-Host "`n[INFO] Netwerkisolatie optimaliseren:" -ForegroundColor Yellow Write-Host " Overweeg de volgende stappen:" -ForegroundColor White Write-Host " 1. Implementeer private endpoints voor PaaS-diensten" -ForegroundColor White Write-Host " 2. Configureer hub-and-spoke-topologie voor centrale netwerkdiensten" -ForegroundColor White Write-Host " 3. Implementeer Network Security Groups voor granular toegangscontrole" -ForegroundColor White Write-Host " 4. Documenteer netwerkarchitectuur in architectuurdocumentatie" -ForegroundColor White if ($PSCmdlet.ShouldProcess("Network Isolation", "Optimize network isolation")) { Write-Host " [NOTE] Netwerkisolatie vereist netwerkarchitectuurplanning en implementatie" -ForegroundColor Yellow } } Write-Host "`n[OK] Remediation-aanbevelingen gepresenteerd" -ForegroundColor Green Write-Host " Voer de bovenstaande stappen uit om platformconfiguratie te optimaliseren voor soevereiniteit" -ForegroundColor White } catch { Write-Host "`n[FAIL] ERROR during remediation: $_" -ForegroundColor Red throw } } function Invoke-Implementation { <# .SYNOPSIS Implementeert configuratie (delegeert naar remediatie) #> [CmdletBinding()] param( [switch]$WhatIf, [switch]$DebugMode ) Invoke-Remediation -WhatIf:$WhatIf -DebugMode:$DebugMode } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { # Determine which action to perform if ($Remediation) { if ($WhatIf) { Write-Host "WhatIf: Would apply remediation" -ForegroundColor Yellow Invoke-Remediation -WhatIf -DebugMode:$DebugMode } else { Invoke-Remediation -DebugMode:$DebugMode } } elseif ($Monitoring) { $result = Invoke-Monitoring -DebugMode:$DebugMode # Exit with appropriate code for automation if ($result.isCompliant) { exit 0 # Success - Compliant } else { exit 1 # Warning - Non-compliant } } else { # No parameters - show usage Write-Host "Available parameters:" -ForegroundColor Yellow Write-Host " -Monitoring : Check current platform configuration" -ForegroundColor Gray Write-Host " -Remediation : Apply recommended platform configuration" -ForegroundColor Gray Write-Host " -WhatIf : Preview changes without applying" -ForegroundColor Gray Write-Host " -DebugMode : Use synthetic test data (no Azure connection)" -ForegroundColor Gray Write-Host "`nExample: .\sovereign-cloud-platforms.ps1 -Monitoring" -ForegroundColor Cyan Write-Host "Example: .\sovereign-cloud-platforms.ps1 -Monitoring -DebugMode" -ForegroundColor Cyan } } catch { Write-Error "Script execution failed: $_" exit 2 # Error } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # ============================================================================ # EXIT CODES # ============================================================================ # 0 = Success / Compliant # 1 = Warning / Non-compliant # 2 = Error / Execution failed

Risico zonder implementatie

Risico zonder implementatie
High: Zonder expliciete focus op sovereign cloud platforms kunnen Nederlandse overheidsorganisaties onvoldoende gebruikmaken van gespecialiseerde platformfeatures en architectuurpatronen die bijdragen aan digitale soevereiniteit. Dit kan leiden tot suboptimale architectuurkeuzes, onvoldoende gebruik van platformfeatures die soevereiniteit ondersteunen, en vragen van toezichthouders over de mate waarin de organisatie daadwerkelijk gebruikmaakt van beschikbare soevereiniteitsoplossingen. Voor kritieke infrastructuur kan dit leiden tot operationele risico's en vragen over de mate van controle en onafhankelijkheid.

Management Samenvatting

Sovereign cloud platforms bieden gespecialiseerde cloudomgevingen die expliciet zijn ontworpen om digitale soevereiniteit te ondersteunen. Door platformfeatures te evalueren, platformkeuzes te optimaliseren en soevereiniteitsfeatures effectief te gebruiken, ontstaat aantoonbare controle over cloudplatforms en soevereiniteitsnaleving. Dit artikel geeft cloudarchitecten, CISO's en strategische adviseurs een concreet raamwerk om sovereign cloud platforms effectief te evalueren, selecteren en implementeren binnen cloudstrategie, risicobeheersing en governance.