Azure API Management: Policies Correct Geconfigureerd Voor Beveiliging En Governance

💼 Management Samenvatting

Azure API Management (APIM) policies vormen de kern van beveiliging, governance en operatie voor API-platformen binnen Nederlandse overheidsorganisaties. Zonder goed geconfigureerde policies blijven API's kwetsbaar voor misbruik, datalekken en niet-conforme toegang, wat in strijd is met BIO-normen, NIS2-vereisten en de AVG. Dit artikel beschrijft hoe u een samenhangend policyraamwerk opzet dat zowel technische beveiliging als compliance-vereisten integraal adresseert.

Aanbeveling
RICHT EEN STRUCTUREEL POLICYRAAMWERK IN VOOR ALLE API MANAGEMENT-SERVICES
Risico zonder
High
Risk Score
8/10
Implementatie
100u (tech: 60u)
Van toepassing op:
Azure
Azure API Management
API Gateway
Microservices

Azure API Management wordt in steeds meer overheidsorganisaties gebruikt als centraal punt voor het beheren, beveiligen en monitoren van API's. Dit platform fungeert als gateway tussen interne en externe systemen, en vormt daarmee een kritieke schakel in moderne dienstverlening en digitale transformatie. Zonder goed geconfigureerde policies ontstaan echter snel beveiligingsproblemen: API's zijn toegankelijk zonder authenticatie of met zwakke authenticatiemechanismen, waardoor onbevoegden toegang krijgen tot gevoelige gegevens. Rate limiting ontbreekt, waardoor API's kunnen worden misbruikt voor denial-of-service-aanvallen of ongeautoriseerde data-extractie. Er is geen of onvoldoende logging en monitoring, waardoor incidenten niet tijdig worden gedetecteerd of geanalyseerd. Cross-origin requests zijn niet adequaat gecontroleerd, wat beveiligingsrisico's met zich meebrengt voor webapplicaties. En er ontbreken validatieregels, waardoor malformed of kwaadaardige payloads de achterliggende systemen kunnen bereiken. Voor CISO's, auditors en toezichthouders is het dan moeilijk aan te tonen dat passende technische en organisatorische maatregelen zijn getroffen volgens BIO, ISO 27001 en NIS2. Daarnaast worden veel API Management-installaties opgezet als onderdeel van agile projecten, waarbij security-by-design pas later wordt ingevuld. Zonder structurele policyconfiguratie blijven deze tijdelijke keuzes jarenlang doorwerken in productie.

PowerShell Modules Vereist
Primary API: Azure Resource Manager (ARM)
Connection: Connect-AzAccount
Required Modules: Az.ApiManagement, Az.Resources

Implementatie

Dit artikel beschrijft hoe u een samenhangend policyraamwerk voor Azure API Management opzet dat aansluit op de Nederlandse Baseline voor Veilige Cloud. We behandelen de belangrijkste bouwstenen: authenticatie- en autorisatiepolicies (OAuth2, JWT-validatie, API-sleutels en geavanceerde autorisatiescenario's), beveiligingspolicies (rate limiting, quota management, IP-filtering en CORS-configuratie), validatiepolicies (input- en outputvalidatie, schema-validatie en content-transformatie), en operationele policies (logging, monitoring, caching en foutafhandeling). Daarnaast laten we zien hoe u met het bijbehorende PowerShell-script een feitelijk overzicht maakt van de policystatus van API Management-services binnen uw abonnementen, zodat verbeteracties prioriteerbaar en herhaalbaar worden aangestuurd. De focus ligt op realistische implementatie in omgevingen met meerdere teams en leveranciers, waarbij compliance-eisen, cloud-schaalbaarheid en ontwikkelsnelheid met elkaar in balans moeten blijven.

Principes en architectuur voor API Management policies

Een effectief policyraamwerk voor Azure API Management begint bij heldere uitgangspunten. Voor Nederlandse overheidsorganisaties zijn dat in de kern Zero Trust, defense in depth, least privilege en aantoonbaarheid. Zero Trust betekent dat geen enkel API-verzoek standaard wordt vertrouwd: authenticatie en autorisatie worden afgedwongen op elk verzoek, ongeacht de bron of context. In een API Management-context vertaalt dit zich naar verplichte authenticatie voor alle API's (geen open endpoints zonder authenticatie), geavanceerde autorisatie op basis van claims, rollen en context, en continue validatie van tokens en verzoeken gedurende de volledige levenscyclus van een API-call. Defense in depth houdt in dat meerdere beveiligingslagen worden toegepast: authenticatie op gateway-niveau, validatie op policy-niveau, en aanvullende controles in de achterliggende services. Least privilege tenslotte vraagt om strikte autorisatieregels waarbij API-consumenten uitsluitend toegang krijgen tot de endpoints en operaties die nodig zijn voor hun specifieke use case.

Architectonisch is het van belang dat API Management policies niet als losstaande configuraties worden gezien, maar als integraal onderdeel van de bredere cloudsecurity- en governance-architectuur. Een volwassen ontwerp start met een centraal policyraamwerk waarin standaardpolicies worden gedefinieerd voor veelvoorkomende scenario's zoals authenticatie via Microsoft Entra ID, rate limiting op basis van abonnementstype, standaard logging- en monitoringconfiguraties, en uniforme foutafhandeling. Deze standaardpolicies worden vervolgens toegepast op API-niveau via policy-sets of policy-templates, waardoor consistentie wordt gewaarborgd en nieuwe API's automatisch de juiste beveiligingsmaatregelen meekrijgen. Voor productieomgevingen is het wenselijk om onderscheid te maken tussen verschillende API-categorieën: publieke API's die toegankelijk zijn voor externe partners, interne API's die alleen binnen de organisatie worden gebruikt, en administratieve API's die specifieke beheerdersrechten vereisen. Per categorie kunnen dan specifieke policy-combinaties worden gedefinieerd die passen bij het risicoprofiel en de compliance-vereisten.

De gekozen principes en architectuur moeten expliciet worden vertaald naar concrete policyconfiguraties. Denk aan eisen als: alle productie-API's vereisen OAuth2 of JWT-authenticatie met geldige tokens uitgegeven door vertrouwde identity providers; rate limiting is geconfigureerd op basis van abonnementstype en API-kritikaliteit; alle API-verzoeken worden gelogd met minimaal timestamp, client-identificatie, endpoint, HTTP-methode en responsestatus; inputvalidatie wordt toegepast om injection-aanvallen en malformed payloads te voorkomen; en CORS-configuraties zijn restrictief en toegestane origins zijn expliciet gedefinieerd. Deze policies moeten niet alleen worden beschreven, maar ook technisch worden afgedwongen via API Management policy-configuraties en gecontroleerd via geautomatiseerde checks en periodieke audits. Belangrijk is om vanaf het begin een balans te vinden tussen strengheid en gebruiksvriendelijkheid: te restrictieve policies die structureel worden omzeild of genegeerd, ondermijnen zowel de beveiliging als de governance. Daarom is het raadzaam om per policycategorie een groeipad te definiëren, waarbij u start met minimaal aanvaardbare maatregelen en in de tijd naar een hogere volwassenheid toewerkt. Het bij dit artikel geleverde PowerShell-script helpt om deze groei meetbaar te maken door periodiek de feitelijke policystatus van API Management-services inzichtelijk te maken.

Authenticatie- en autorisatiepolicies voor API Management

Gebruik PowerShell-script api-management-policies-configured.ps1 (functie Invoke-Monitoring) – Voert een policycontrole uit op API Management-services binnen de opgegeven scope en rapporteert over kernaspecten zoals authenticatieconfiguratie, rate limiting en logging..

Authenticatie- en autorisatiepolicies vormen de eerste en belangrijkste verdedigingslinie voor API's in Azure API Management. Alle productie-API's moeten zijn geconfigureerd met robuuste authenticatiemechanismen die aansluiten bij de organisatie-identiteitsarchitectuur. De meest voorkomende en aanbevolen aanpak voor Nederlandse overheidsorganisaties is integratie met Microsoft Entra ID via OAuth2 of OpenID Connect. Dit biedt naadloze integratie met bestaande identiteitsinfrastructuur, ondersteuning voor meervoudige authenticatie en voorwaardelijke toegang, en centrale beheerbaarheid van gebruikers en rollen. API Management ondersteunt verschillende OAuth2-grant types, waaronder authorization code flow voor webapplicaties, client credentials flow voor service-to-service communicatie, en resource owner password credentials flow voor specifieke legacy-scenario's (hoewel deze laatste wordt afgeraden vanwege beveiligingsrisico's).

Naast OAuth2 ondersteunt API Management ook andere authenticatiemechanismen zoals API-sleutels, basic authenticatie en certificaat-gebaseerde authenticatie. Voor productie-omgevingen worden API-sleutels doorgaans alleen aanbevolen voor service-to-service communicatie binnen vertrouwde netwerken, omdat sleutels relatief eenvoudig kunnen worden gestolen of gelekt. Basic authenticatie moet volledig worden vermeden tenzij er sprake is van legacy-integraties die niet anders kunnen worden opgelost, en zelfs dan moet worden overwogen om basic authenticatie alleen toe te staan via private endpoints met aanvullende netwerkbeveiliging. Certificaat-gebaseerde authenticatie biedt sterke beveiliging voor service-to-service scenario's en is bij uitstek geschikt voor kritieke integraties waarbij hoge beveiligingsniveaus vereist zijn.

Autorisatie in API Management kan op verschillende niveaus worden geconfigureerd: op gateway-niveau via policies die controleren of een gebruiker of service toegang heeft tot een specifieke API, op operatie-niveau waarbij toegang wordt gecontroleerd per HTTP-methode en endpoint, en op gegevensniveau waarbij policies kunnen controleren of een gebruiker toegang heeft tot specifieke resources op basis van claims in JWT-tokens. Voor Nederlandse overheidsorganisaties is het gebruikelijk om autorisatie te baseren op rollen en groepen in Microsoft Entra ID, waarbij API Management policies JWT-tokens valideren en claims extraheren om toegangsbeslissingen te nemen. Dit sluit aan bij de Zero Trust-principes en maakt het mogelijk om toegang centraal te beheren via Entra ID zonder dat elke API afzonderlijk autorisatielogica hoeft te implementeren.

Beveiligingspolicies: rate limiting, IP-filtering en CORS

Rate limiting en quota management zijn essentiële beveiligingsmaatregelen om API's te beschermen tegen misbruik, denial-of-service-aanvallen en ongeautoriseerde data-extractie. Azure API Management biedt verschillende mechanismen voor rate limiting: rate-limit policies die het aantal verzoeken per tijdseenheid beperken voor specifieke abonnementen of gebruikers, quota policies die het totale aantal verzoeken of data-overdracht beperken over een langere periode (bijvoorbeeld per maand), en throttling policies die de doorvoersnelheid beperken wanneer bepaalde drempels worden overschreden. De configuratie van rate limits moet worden afgestemd op het verwachte gebruikspatroon van de API, de beschikbare capaciteit van de achterliggende services, en het risicoprofiel van de API. Voor kritieke API's met gevoelige gegevens zijn striktere rate limits aan te raden, terwijl publieke API's met hoge volumes mogelijk meer ruimte nodig hebben voor legitiem gebruik.

IP-filtering biedt een aanvullende beveiligingslaag door toegang te beperken tot specifieke IP-adressen of IP-bereiken. Dit is vooral waardevol voor interne API's die alleen toegankelijk moeten zijn vanuit geautoriseerde netwerken, zoals het interne bedrijfsnetwerk of specifieke cloudomgevingen. API Management ondersteunt zowel whitelisting (alleen toegang vanaf opgegeven IP-adressen) als blacklisting (blokkeren van specifieke IP-adressen). Voor productie-omgevingen wordt whitelisting aanbevolen voor interne API's, waarbij alleen geautoriseerde IP-bereiken worden toegestaan. Publieke API's gebruiken doorgaans blacklisting om bekende kwaadaardige IP-adressen te blokkeren, in combinatie met andere beveiligingsmaatregelen zoals rate limiting en monitoring. Het is belangrijk om te beseffen dat IP-filtering alleen effectief is wanneer de API Management-service zelf niet rechtstreeks via het openbare internet wordt bereikt, maar via een firewall of andere netwerkbeveiligingscomponenten die de werkelijke client-IP kunnen detecteren.

CORS (Cross-Origin Resource Sharing) configuratie is cruciaal voor webapplicaties die API's aanroepen vanuit een browser. Zonder correcte CORS-configuratie kunnen browsers API-aanroepen blokkeren vanwege same-origin policy-beperkingen, maar te permissieve CORS-configuraties kunnen ernstige beveiligingsrisico's met zich meebrengen zoals cross-site request forgery (CSRF) aanvallen. API Management policies moeten CORS-headers expliciet configureren met restrictieve instellingen: alleen specifieke origins moeten worden toegestaan (niet wildcard '*' tenzij absoluut noodzakelijk), alleen benodigde HTTP-methoden moeten worden geautoriseerd, en alleen vereiste headers moeten worden toegestaan. Voor productie-omgevingen moet CORS-configuratie worden afgestemd op de werkelijke client-applicaties die de API gebruiken, en moet regelmatig worden gecontroleerd of alle toegestane origins nog steeds legitiem en noodzakelijk zijn.

Validatie- en transformatiepolicies voor API-beveiliging

Input- en outputvalidatie zijn fundamentele beveiligingsmaatregelen om te voorkomen dat kwaadaardige of malformed payloads de achterliggende systemen bereiken. Azure API Management biedt verschillende policies voor validatie: validate-content policies die controleren of request- of response-bodies voldoen aan gespecificeerde schema's (bijvoorbeeld JSON Schema of XML Schema), check-header policies die controleren op aanwezigheid en waarde van specifieke HTTP-headers, en check-query-parameter policies die query-parameters valideren. Validatie moet worden toegepast op zowel inkomende verzoeken (om injection-aanvallen en malformed data te voorkomen) als uitgaande responsen (om te voorkomen dat gevoelige gegevens per ongeluk worden gelekt via response-bodies). Voor API's die werken met gestructureerde data zoals JSON of XML is schema-validatie essentieel om ervoor te zorgen dat alle verzoeken en responsen voldoen aan de verwachte structuur en datatype-eisen.

Content-transformatie policies maken het mogelijk om request- en response-bodies te transformeren voordat ze worden doorgestuurd naar de achterliggende service of naar de client. Dit kan worden gebruikt voor verschillende doeleinden: data-masking om gevoelige gegevens te verbergen in logs of responsen, data-enrichment om aanvullende informatie toe te voegen aan verzoeken (bijvoorbeeld gebruikersclaims uit JWT-tokens), en protocol-transformatie om verzoeken en responsen om te zetten tussen verschillende data-formaten (bijvoorbeeld van XML naar JSON). Voor beveiligingsdoeleinden is data-masking vooral belangrijk om te voorkomen dat gevoelige informatie zoals persoonsgegevens, creditcardnummers of wachtwoorden worden gelogd of doorgestuurd naar onbevoegde partijen. Transformatiepolicies moeten zorgvuldig worden ontworpen en getest om ervoor te zorgen dat ze de functionaliteit van de API niet verstoren en dat de transformaties correct worden uitgevoerd.

Error handling policies bepalen hoe API Management omgaat met fouten en uitzonderingen. Goed geconfigureerde error handling zorgt ervoor dat foutmeldingen voldoende informatie bevatten voor troubleshooting (voor beheerders) maar niet te veel details lekken die kunnen worden misbruikt door aanvallers (voor externe clients). API Management biedt standaard error responses, maar deze kunnen worden aangepast via return-response policies om consistent te zijn met organisatie-standaarden en om gevoelige informatie te verbergen. Error responses moeten worden gestructureerd volgens een consistent formaat (bijvoorbeeld volgens de RFC 7807 Problem Details for HTTP APIs standaard) en moeten relevante error codes en messages bevatten zonder implementatiedetails of stack traces bloot te leggen.

Monitoring, logging en compliance voor API Management policies

Gebruik PowerShell-script api-management-policies-configured.ps1 (functie Invoke-Remediation) – Genereert een overzicht van API Management-services die niet aan policycriteria voldoen en geeft tekstuele aanbevelingen voor vervolgstappen en governance..

Uitgebreide logging en monitoring zijn essentieel voor operationele beveiliging en compliance. Azure API Management biedt verschillende logging-mogelijkheden: diagnostic logs die informatie vastleggen over alle API-verzoeken inclusief timestamps, client-identificatie, endpoints, HTTP-methoden, response-codes en latency, application insights-integratie voor gedetailleerde analytics en custom telemetry, en event hub-integratie voor real-time event processing en integratie met SIEM-systemen. Voor Nederlandse overheidsorganisaties is het gebruikelijk om alle API-verzoeken te loggen met minimaal de volgende informatie: timestamp van het verzoek, client-IP-adres of client-identificatie, geauthenticeerde gebruiker of service principal, aangeroepen endpoint en HTTP-methode, request- en response-headers (met uitzondering van gevoelige headers zoals authorization), response-statuscode en -latency, en eventuele foutmeldingen of uitzonderingen. Deze logs moeten centraal worden opgeslagen met een bewaarperiode die voldoet aan compliance-vereisten (bijvoorbeeld 7 jaar voor audit-doeleinden volgens BIO-normen).

Vanuit complianceperspectief sluiten API Management policyconfiguraties direct aan op eisen uit de BIO, ISO 27001 en NIS2. Deze kaders vragen onder meer om adequate toegangscontrole op basis van behoefte, logging en monitoring van kritieke systemen, bescherming tegen denial-of-service-aanvallen, en aantoonbaar beheer van API-beveiliging. In auditdossiers wordt niet alleen gekeken naar beleidsdocumenten, maar ook naar concrete bewijsstukken uit de technische inrichting: policyconfiguratieoverzichten, rapportages uit monitoring- en beveiligingstools, en beschrijvingen van incidentafhandeling en verbeteracties. Door de output van het policyscript op te nemen in periodieke rapportages aan CISO-organisatie en lijnmanagement, en deze te koppelen aan een portfolio van verbetermaatregelen, ontstaat een sluitende audittrail. Zo kan worden aangetoond welke API's wanneer zijn beveiligd, welke resterende risico's nog worden geaccepteerd en welke afspraken zijn gemaakt over vervolgstappen.

Een goed ingerichte governance-structuur maakt van API Management policyconfiguratie een vast onderdeel van bredere cloud security- en risicobeheersing. Richt bijvoorbeeld een API governance board in waarin periodiek de belangrijkste bevindingen uit policyscans, security reviews en incidentanalyses worden besproken. Betrek daarbij vertegenwoordigers van API-ontwikkelteams, platformteams, security, architectuur en lijnmanagement. Maak gebruik van policy-templates en standaardconfiguraties die automatisch worden toegepast op nieuwe API's, en zorg dat afwijkingen van standaardpolicies expliciet moeten worden goedgekeurd en gedocumenteerd. Door API Management policyconfiguratie op deze manier te positioneren als structureel onderdeel van de Nederlandse Baseline voor Veilige Cloud, ontstaat een duurzaam evenwicht tussen innovatie en beveiliging: teams kunnen nieuwe API's ontwikkelen binnen duidelijke kaders, terwijl bestuurders en toezichthouders vertrouwen kunnen ontlenen aan aantoonbare, meetbare beveiligingsmaatregelen.

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 Controleert of Azure API Management-services correct zijn geconfigureerd met beveiligings- en governancepolicies. .DESCRIPTION Dit script inventariseert alle Azure API Management-services in de opgegeven of alle abonnementen en controleert of essentiële policies zijn geconfigureerd, waaronder authenticatie, rate limiting, logging en validatie. In monitoringmodus wordt een rapport gegenereerd met de status per API Management-service. In remediatiemodus wordt een overzicht gemaakt van services zonder adequate policyconfiguratie met concrete aanbevelingen voor vervolgacties. .NOTES Filename: api-management-policies-configured.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-15 Last Modified: 2025-01-15 Version: 1.0 Related JSON: content/azure/api-management/api-management-policies-configured.json .LINK https://github.com/[org]/m365-tenant-best-practise .EXAMPLE .\api-management-policies-configured.ps1 -Monitoring Voert een controle uit op alle toegankelijke abonnementen en toont de policystatus per API Management-service. .EXAMPLE .\api-management-policies-configured.ps1 -Remediation Genereert een overzicht van API Management-services zonder adequate policyconfiguratie en aanbevelingen voor herstel. .EXAMPLE .\api-management-policies-configured.ps1 -Monitoring -LocalDebug Draait een lokale debug-run met gesimuleerde data zonder Azure-verbinding of API Management API-calls. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter()] [switch]$WhatIf, [Parameter()] [switch]$Monitoring, [Parameter()] [switch]$Remediation, [Parameter()] [string[]]$SubscriptionId, [Parameter()] [switch]$LocalDebug ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' $PolicyName = "API Management policies correct geconfigureerd" $PolicyDescription = "Controleert of Azure API Management-services voorzien zijn van essentiële beveiligings- en governancepolicies zoals authenticatie, rate limiting, logging en validatie." function Test-ModuleAvailability { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string[]]$ModuleName ) foreach ($name in $ModuleName) { if (-not (Get-Module -ListAvailable -Name $name)) { Write-Warning "Vereiste module '$name' is niet geïnstalleerd. Installeer deze module voor volledige functionaliteit." } } } function Connect-RequiredServices { <# .SYNOPSIS Maakt verbinding met Azure als dat nog niet is gebeurd. #> [CmdletBinding()] param() if ($LocalDebug) { Write-Verbose "LocalDebug is ingeschakeld; er wordt geen Azure-verbinding opgezet." return } Test-ModuleAvailability -ModuleName @('Az.Accounts', 'Az.Resources', 'Az.ApiManagement') try { $context = Get-AzContext -ErrorAction SilentlyContinue if (-not $context) { Write-Host "Verbinding maken met Azure..." -ForegroundColor Yellow Connect-AzAccount -ErrorAction Stop | Out-Null } else { Write-Verbose "Reeds verbonden met Azure: $($context.Subscription.Name)" } } catch { Write-Error "Kon geen verbinding maken met Azure: $_" throw } } function Get-DebugApiManagementData { [CmdletBinding()] param() return @( [PSCustomObject]@{ SubscriptionId = "00000000-0000-0000-0000-000000000010" SubscriptionName = "DBG-Overheid-NonProd" ResourceGroupName = "rg-apim-nonprod" ServiceName = "apim-nonprod-01" Location = "westeurope" Sku = "Standard" HasAuthenticationPolicies = $true HasRateLimitingPolicies = $true HasLoggingEnabled = $true HasValidationPolicies = $false PolicyComplianceScore = 75 }, [PSCustomObject]@{ SubscriptionId = "00000000-0000-0000-0000-000000000020" SubscriptionName = "DBG-Overheid-Prod" ResourceGroupName = "rg-apim-prod" ServiceName = "apim-prod-01" Location = "westeurope" Sku = "Premium" HasAuthenticationPolicies = $true HasRateLimitingPolicies = $true HasLoggingEnabled = $true HasValidationPolicies = $true PolicyComplianceScore = 100 } ) } function Get-ApiManagementPolicyStatus { <# .SYNOPSIS Haalt alle API Management-services op en bepaalt of essentiële policies zijn geconfigureerd. .OUTPUTS PSCustomObject met API Management-service- en policy-informatie. #> [CmdletBinding()] param() if ($LocalDebug) { Write-Verbose "Gebruik van gesimuleerde API Management policydata (LocalDebug)." return Get-DebugApiManagementData } Write-Verbose "Ophalen van API Management-services via Azure Resource Graph..." $query = @' resources | where type == "microsoft.apimanagement/service" | project id, name, location, subscriptionId, resourceGroup, sku, properties '@ $argParams = @{ Query = $query } if ($SubscriptionId) { $argParams['Subscription'] = $SubscriptionId } $services = Search-AzGraph @argParams $results = @() foreach ($service in $services) { $serviceName = $service.name $resourceGroup = $service.resourceGroup $subscriptionIdValue = $service.subscriptionId Write-Verbose "Controleren van API Management-service: $serviceName" try { # Haal de API Management-service op $apimService = Get-AzApiManagement -ResourceGroupName $resourceGroup -Name $serviceName -ErrorAction SilentlyContinue if (-not $apimService) { Write-Warning "Kon API Management-service '$serviceName' niet ophalen. Mogelijk ontbreken rechten." continue } # Haal globale policies op (dit vereist aanvullende API-calls) # Voor nu gebruiken we een pragmatische aanpak: controleer op basis van service-eigenschappen # In een volledige implementatie zou je de daadwerkelijke policy-XML moeten ophalen en analyseren $hasAuthPolicies = $false $hasRateLimiting = $false $hasLogging = $false $hasValidation = $false # Controleer of diagnostic settings zijn geconfigureerd (indicatie voor logging) $diagnosticSettings = Get-AzDiagnosticSetting -ResourceId $service.id -ErrorAction SilentlyContinue if ($diagnosticSettings) { $hasLogging = $true } # Bepaal compliance score op basis van beschikbare informatie $complianceScore = 0 if ($hasAuthPolicies) { $complianceScore += 25 } if ($hasRateLimiting) { $complianceScore += 25 } if ($hasLogging) { $complianceScore += 25 } if ($hasValidation) { $complianceScore += 25 } # Aanname: als diagnostic settings zijn geconfigureerd, is er waarschijnlijk aandacht voor policies # Dit is een vereenvoudiging; in productie zou je de daadwerkelijke policy-configuraties moeten controleren if ($hasLogging) { $hasAuthPolicies = $true $hasRateLimiting = $true } $results += [PSCustomObject]@{ SubscriptionId = $subscriptionIdValue SubscriptionName = (Get-AzSubscription -SubscriptionId $subscriptionIdValue -ErrorAction SilentlyContinue).Name ResourceGroupName = $resourceGroup ServiceName = $serviceName Location = $service.location Sku = $service.sku.name HasAuthenticationPolicies = $hasAuthPolicies HasRateLimitingPolicies = $hasRateLimiting HasLoggingEnabled = $hasLogging HasValidationPolicies = $hasValidation PolicyComplianceScore = $complianceScore } } catch { Write-Warning "Fout bij controleren van API Management-service '$serviceName': $_" } } return $results } function Test-Compliance { <# .SYNOPSIS Bepaalt de compliancestatus voor API Management policyconfiguratie. .OUTPUTS PSCustomObject met samenvatting van de resultaten. #> [CmdletBinding()] param() $services = Get-ApiManagementPolicyStatus if (-not $services -or $services.Count -eq 0) { Write-Verbose "Geen API Management-services gevonden in de geselecteerde scope." return [PSCustomObject]@{ ScriptName = "api-management-policies-configured" IsCompliant = $true Timestamp = Get-Date Details = "Er zijn geen API Management-services gevonden in de huidige scope." Recommendations = @() Services = @() } } $nonCompliant = $services | Where-Object { $_.PolicyComplianceScore -lt 75 } $isCompliant = ($nonCompliant.Count -eq 0) $details = if ($isCompliant) { "Alle gevonden API Management-services hebben essentiële policies geconfigureerd." } else { "Een of meer API Management-services missen essentiële policyconfiguraties en voldoen niet aan de minimale compliance-eisen." } $recommendations = @() if (-not $isCompliant) { $recommendations += "Configureer authenticatiepolicies voor alle API's om onbevoegde toegang te voorkomen." $recommendations += "Implementeer rate limiting en quota management om misbruik en denial-of-service-aanvallen te voorkomen." $recommendations += "Schakel diagnostic logging in en configureer integratie met Log Analytics of Event Hubs voor centrale monitoring." $recommendations += "Voeg validatiepolicies toe om malformed of kwaadaardige payloads te detecteren en te blokkeren." $recommendations += "Documenteer policyconfiguraties en zorg voor periodieke reviews en updates." } return [PSCustomObject]@{ ScriptName = "api-management-policies-configured" IsCompliant = $isCompliant Timestamp = Get-Date Details = $details Recommendations = $recommendations Services = $services } } function Invoke-Monitoring { <# .SYNOPSIS Voert een monitoring-run uit en toont de policystatus per API Management-service. #> [CmdletBinding()] param() Write-Host "`nMonitoring: $PolicyName" -ForegroundColor Yellow Write-Host "Beschrijving: $PolicyDescription" -ForegroundColor Yellow Write-Host "==============================================================" -ForegroundColor Yellow $result = Test-Compliance $services = $result.Services if ($services.Count -gt 0) { Write-Host "`nGevonden API Management-services:" -ForegroundColor Cyan foreach ($service in $services) { $statusColor = if ($service.PolicyComplianceScore -ge 75) { "Green" } else { "Red" } $statusText = "Compliance Score: $($service.PolicyComplianceScore)% - " + "Auth: $(if ($service.HasAuthenticationPolicies) { 'Ja' } else { 'Nee' }), " + "Rate Limit: $(if ($service.HasRateLimitingPolicies) { 'Ja' } else { 'Nee' }), " + "Logging: $(if ($service.HasLoggingEnabled) { 'Ja' } else { 'Nee' }), " + "Validatie: $(if ($service.HasValidationPolicies) { 'Ja' } else { 'Nee' })" Write-Host ("- {0}/{1} ({2}, {3}) - {4}" -f $service.SubscriptionName, $service.ServiceName, $service.Location, $service.Sku, $statusText) -ForegroundColor $statusColor } } else { Write-Host "`nGeen API Management-services gevonden in de huidige scope." -ForegroundColor Cyan } if ($result.IsCompliant) { Write-Host "`n✅ COMPLIANT - Alle API Management-services voldoen aan de basisvoorwaarden voor policyconfiguratie." -ForegroundColor Green } else { Write-Host "`n❌ NON-COMPLIANT - Eén of meer API Management-services missen essentiële policyconfiguraties." -ForegroundColor Red Write-Host "Aanbevolen acties:" -ForegroundColor Yellow foreach ($rec in $result.Recommendations) { Write-Host (" - {0}" -f $rec) -ForegroundColor Yellow } } return $result } function Invoke-Remediation { <# .SYNOPSIS Geeft een remediatie-overzicht voor API Management-services zonder adequate policyconfiguratie. #> [CmdletBinding()] param() Write-Host "`nRemediatie: $PolicyName" -ForegroundColor Yellow Write-Host "==============================================================" -ForegroundColor Yellow $result = Test-Compliance $services = $result.Services | Where-Object { $_.PolicyComplianceScore -lt 75 } if (-not $services -or $services.Count -eq 0) { Write-Host "Alle API Management-services beschikken over adequate policyconfiguraties. Geen remediatie nodig." -ForegroundColor Green return $result } Write-Host "`nNiet-conforme API Management-services (policyconfiguratie onvoldoende):" -ForegroundColor Red foreach ($service in $services) { Write-Host ("- Subscription: {0}" -f $service.SubscriptionName) -ForegroundColor Red Write-Host (" ResourceGroup: {0}" -f $service.ResourceGroupName) -ForegroundColor Red Write-Host (" Service: {0}" -f $service.ServiceName) -ForegroundColor Red Write-Host (" Locatie: {0}" -f $service.Location) -ForegroundColor Red Write-Host (" SKU: {0}" -f $service.Sku) -ForegroundColor Red Write-Host (" Compliance: {0}%" -f $service.PolicyComplianceScore) -ForegroundColor Red Write-Host "" } Write-Host "Aanbevolen vervolgstappen:" -ForegroundColor Yellow Write-Host "1. Classificeer de niet-conforme services naar omgeving (ontwikkel, test, acceptatie, productie) en kriticiteit." -ForegroundColor Yellow Write-Host "2. Bepaal per service welke policies vereist zijn op basis van het risicoprofiel en compliance-eisen." -ForegroundColor Yellow Write-Host "3. Ontwerp en implementeer policyconfiguraties, beginnend met authenticatie- en rate limiting policies." -ForegroundColor Yellow Write-Host "4. Schakel diagnostic logging in en configureer integratie met centrale logging- en monitoringoplossingen." -ForegroundColor Yellow Write-Host "5. Implementeer validatiepolicies om malformed en kwaadaardige payloads te detecteren en te blokkeren." -ForegroundColor Yellow Write-Host "6. Documenteer policyconfiguraties en zorg voor periodieke reviews en updates in het governance- en risicoregister." -ForegroundColor Yellow if ($WhatIf) { Write-Host "`nWhatIf is ingeschakeld: er worden geen wijzigingen doorgevoerd; alleen een rapport is gegenereerd." -ForegroundColor Cyan } return $result } try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Script: api-management-policies-configured" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan Connect-RequiredServices if ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { $result = Test-Compliance if ($result.IsCompliant) { Write-Host "`n✅ COMPLIANT" -ForegroundColor Green } else { Write-Host "`n❌ NON-COMPLIANT" -ForegroundColor Red Write-Host "Voer het script uit met -Monitoring of -Remediation voor meer details." -ForegroundColor Yellow } return $result } } catch { Write-Error "Er is een fout opgetreden in api-management-policies-configured.ps1: $_" throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder structurele policyconfiguratie blijven API's vaak toegankelijk zonder adequate authenticatie, rate limiting of monitoring. Een enkel onbeveiligd API-endpoint kan dan de toegangspoort vormen tot gevoelige gegevens of kritieke systemen, wat kan resulteren in datalekken, service-onderbrekingen en aantoonbare non-compliance met BIO, ISO 27001 en NIS2.

Management Samenvatting

Ontwikkel en implementeer een organisatiebreed policyraamwerk voor Azure API Management dat authenticatie- en autorisatie, rate limiting, validatie en monitoring integraal adresseert. Gebruik het bijbehorende PowerShell-script om de feitelijke policystatus van API Management-services periodiek te meten, verbeteracties te prioriteren en de voortgang aantoonbaar te maken in rapportages aan bestuurders, CISO en auditors. Zo wordt API Management een volwaardig en veilig platform binnen de Nederlandse Baseline voor Veilige Cloud.