💼 Management Samenvatting
Rate limiting vormt een essentiële beveiligingslaag voor API's in Azure API Management, gericht op het voorkomen van misbruik, overbelasting en denial-of-service-aanvallen. Voor Nederlandse overheidsorganisaties is het correct configureren van rate limiting niet alleen een technische maatregel, maar ook een verplichting vanuit BIO-vereisten voor beschikbaarheid en beveiliging van kritieke diensten.
✓ Azure API Management
✓ API Gateway
✓ Microservices
✓ Integratieplatformen
Zonder rate limiting zijn API's kwetsbaar voor verschillende vormen van misbruik en overbelasting. Aanvallers kunnen API-endpoints overspoelen met aanvragen, waardoor legitieme gebruikers worden buitengesloten en de achterliggende systemen worden overbelast. Ook kunnen individuele clients of gecompromitteerde accounts onevenredig veel resources verbruiken, wat leidt tot onbillijke verdeling van capaciteit en mogelijke kostenoverschrijdingen. Daarnaast maken onbeperkte API-aanroepen het moeilijk om misbruik te detecteren; wanneer elke client onbeperkt kan aanroepen, valt een aanvallende client niet op tussen het normale verkeer. Voor overheidsorganisaties kan dit leiden tot uitval van burgerportalen, verstoring van ketenprocessen en onnodige cloudkosten. Bovendien is uit de BIO- en NIS2-vereisten duidelijk dat organisaties passende maatregelen moeten treffen om de beschikbaarheid van kritieke diensten te waarborgen, wat zonder rate limiting niet te realiseren is.
Connection:
Connect-AzAccountRequired Modules: Az.Accounts, Az.Resources, Az.ApiManagement
Implementatie
Dit artikel beschrijft hoe u rate limiting effectief implementeert in Azure API Management, afgestemd op de specifieke context van Nederlandse overheidsorganisaties. We behandelen de verschillende typen rate limiting die beschikbaar zijn, waaronder subscription-based throttling, key-based throttling en op JWT-claims gebaseerde limitering. Daarnaast bespreken we hoe u rate limits configureert op verschillende niveaus: globaal per API Management-service, per product of API, per subscription of zelfs per individuele client. Verder gaan we in op strategieën voor het bepalen van geschikte limietwaarden, het hanteren van burst-capaciteit, het implementeren van graceful degradation bij overschrijding van limieten en het monitoren van rate limit-gedrag. Het bijbehorende PowerShell-script helpt om de feitelijke rate limit-configuratie te inventariseren, te controleren of minimale beveiligingsstandaarden zijn toegepast en rapportages te genereren voor architecten, beheerders en auditors.
Fundamenten van rate limiting in API-beveiliging
Rate limiting is een beveiligings- en stabiliteitsmechanisme dat het aantal API-aanroepen per tijdseenheid beperkt voor specifieke clients, subscriptions of endpoints. Het principe is gebaseerd op de observatie dat legitieme gebruikers doorgaans een voorspelbaar gebruikspatroon hebben, terwijl misbruik en aanvallen worden gekenmerkt door abnormaal hoge volumes of repetitieve aanvragen. Door limieten te stellen aan het aantal toegestane aanvragen, kunnen organisaties de impact van aanvallen beperken, de beschikbaarheid waarborgen voor legitieme gebruikers en de kosten van cloudinfrastructuur beheersen. In de context van Azure API Management wordt rate limiting gerealiseerd door policies die worden toegepast op inkomende requests, waarbij het platform automatisch bijhoudt hoeveel aanvragen zijn gedaan binnen een bepaalde tijdspanne en aanvragen weigert wanneer de limiet is overschreden.
Er bestaan verschillende typen rate limiting, elk met eigen toepassingsgebieden. Subscription-based throttling beperkt het aantal aanvragen per subscription, waarbij een subscription meestal correspondeert met een abonnement dat is gekoppeld aan een specifieke client of applicatie. Dit is de meest voorkomende vorm van rate limiting in API Management en is geschikt voor het beheer van verschillende clienttypen met verschillende SLA-niveaus. Key-based throttling werkt vergelijkbaar maar is gebaseerd op API-sleutels in plaats van subscriptions, wat handig is voor eenvoudige scenario's of legacy-integraties. Daarnaast biedt Azure API Management de mogelijkheid om rate limiting toe te passen op basis van claims uit JWT-tokens, bijvoorbeeld om verschillende limieten te hanteren voor verschillende rollen of gebruikersgroepen. Dit laatste maakt het mogelijk om binnen een subscription fijnmazige limitering toe te passen op basis van de identiteit van de aanroepende gebruiker.
Voor Nederlandse overheidsorganisaties is rate limiting vooral relevant omdat publieke diensten vaak openbaar toegankelijk moeten zijn, wat ze kwetsbaar maakt voor automatische aanvallen en misbruik. Tegelijkertijd moeten deze diensten betrouwbaar beschikbaar zijn voor burgers en ketenpartners. Door rate limiting strategisch in te zetten, kan een organisatie voorkomen dat een enkele aanvallende client of gecompromitteerd account de volledige dienstverlening lamlegt, terwijl legitieme gebruikers onbelemmerd toegang behouden. Bovendien helpt rate limiting bij het naleven van BIO-vereisten voor beschikbaarheid en continuïteit, omdat het een concrete maatregel is die aantoonbaar bijdraagt aan het voorkomen van denial-of-service-situaties. Het is belangrijk om te beseffen dat rate limiting slechts één onderdeel is van een bredere beveiligingsstrategie; het moet worden gecombineerd met andere maatregelen zoals authenticatie, autorisatie, monitoring en incident response.
Configuratiestrategieën en best practices voor rate limiting
Gebruik PowerShell-script rate-limiting.ps1 (functie Invoke-Monitoring) – Inventariseert de rate limit-configuratie in Azure API Management en controleert of minimale beveiligingsstandaarden zijn toegepast op alle relevante API's en producten..
Het configureren van rate limiting begint met het bepalen van geschikte limietwaarden die balanceren tussen beveiliging en gebruikerservaring. Te strikte limieten frustreren legitieme gebruikers en kunnen leiden tot klachten en verlies van vertrouwen, terwijl te ruime limieten onvoldoende bescherming bieden tegen misbruik. Een veelgebruikte benadering is om te starten met conservatieve limieten op basis van verwacht normaal gebruik, en deze vervolgens aan te passen op basis van monitoring en feedback. Voor publieke API's in overheidscontext wordt vaak gekozen voor limieten zoals honderd aanvragen per minuut per subscription of duizend aanvragen per uur, waarbij hogere limieten worden toegekend aan geverifieerde ketenpartners of beheerders. Belangrijk is om niet alleen te kijken naar het totale aantal aanvragen, maar ook naar burst-capaciteit: hoeveel aanvragen mogen kort na elkaar worden gedaan voordat de limiet wordt afgedwongen. Dit voorkomt dat legitieme gebruikers worden geblokkeerd wanneer zij bijvoorbeeld een bulkoperatie uitvoeren die normaal gesproken verspreid is over meerdere minuten.
Rate limiting moet worden geconfigureerd op het juiste niveau binnen de API Management-hiërarchie. Globale limieten worden toegepast op alle verkeer dat door een API Management-service gaat en zijn nuttig als laatste verdedigingslinie tegen grootschalige aanvallen. Product-level throttling wordt toegepast op alle API's binnen een product en maakt het mogelijk om verschillende service levels te hanteren: bijvoorbeeld hoge limieten voor premium-abonnementen en lagere voor standaard-abonnementen. API-level throttling wordt toegepast op individuele API's en is handig wanneer bepaalde endpoints gevoeliger zijn voor misbruik of meer resources verbruiken. Subscription-level throttling tenslotte wordt toegepast op individuele subscriptions en vormt de basis voor klant-specifieke limitering. In de praktijk wordt vaak een combinatie van meerdere niveaus gebruikt, waarbij elk niveau zijn eigen limiet heeft en de meest restrictieve limiet wordt toegepast. Deze gelaagde aanpak zorgt ervoor dat bescherming op meerdere niveaus werkt en dat een enkele zwakke schakel niet direct leidt tot onvoldoende beveiliging.
Naast het instellen van limieten is het belangrijk om na te denken over de respons die wordt gegeven wanneer een limiet wordt overschreden. Standaard retourneert Azure API Management een HTTP 429 Too Many Requests statuscode wanneer een rate limit wordt overschreden, wat de juiste respons is volgens HTTP-standaarden. Het is echter aan te raden om deze respons te verrijken met bruikbare informatie, zoals een indicatie van wanneer de limiet opnieuw beschikbaar komt of een Retry-After header die aangeeft hoeveel seconden de client moet wachten voordat een nieuwe poging wordt gedaan. Dit verbetert de gebruikerservaring en helpt client-ontwikkelaars om hun applicaties robuuster te maken. Daarnaast is het raadzaam om overschrijdingen van rate limits te loggen en te monitoren, omdat herhaalde overschrijdingen kunnen wijzen op misbruik, foutieve client-implementaties of een verkeerd ingeschatte behoefte aan hogere limieten. Door deze informatie te analyseren, kunnen organisaties hun rate limiting-strategie continu verbeteren en vroegtijdig problemen detecteren.
Geavanceerde scenario's en aanpassingen aan specifieke use cases
Binnen Nederlandse overheidsorganisaties bestaan verschillende typen API's en gebruiksscenario's die elk hun eigen rate limiting-behoeften hebben. Publieke burgerportalen moeten bijvoorbeeld beschermd zijn tegen grootschalige scraping en automated attacks, terwijl zij tegelijkertijd voldoende capaciteit moeten bieden voor piekmomenten zoals de aanvraagperiode voor uitkeringen of belastingaangiften. Voor deze scenario's is het belangrijk om rate limits dynamisch aan te passen op basis van de context: tijdens normale periodes kunnen strikte limieten worden gehanteerd, terwijl tijdens bekende piekmomenten de limieten tijdelijk kunnen worden verhoogd. Azure API Management biedt hiervoor mogelijkheden via policies en externe configuratie, hoewel volledig geautomatiseerde aanpassing op basis van voorspelbare patronen vaak nog handmatige interventie vereist of aanvullende automatisering.
Voor ketenintegraties tussen overheidsorganisaties gelden andere overwegingen. Deze API's worden doorgaans gebruikt door een beperkt aantal bekende partners en hebben vaak specifieke SLA's en capaciteitsafspraken. Rate limiting voor keten-API's moet daarom niet alleen gericht zijn op het voorkomen van misbruik, maar ook op het waarborgen van fair use en het naleven van afgesproken volumes. In deze context is het zinvol om per partner of per applicatie specifieke limieten te configureren, eventueel op basis van contractuele afspraken. Bovendien moet worden overwogen om voor kritieke ketenprocessen een whitelist-mechanisme te implementeren, waarbij bepaalde partners of applicaties hogere of zelfs onbeperkte limieten krijgen, terwijl andere clients worden beperkt. Dit vereist zorgvuldige afweging van beveiliging versus functionaliteit en moet worden vastgelegd in governanceafspraken en documentatie.
Interne API's die gebruikt worden door ontwikkelteams en beheerapplicaties hebben weer andere eisen. Hoewel deze API's minder kwetsbaar zijn voor externe aanvallen, kunnen zij nog steeds last hebben van misconfiguraties, foutieve scripts of onbeperkte retry-logica in clientapplicaties. Rate limiting voor interne API's is daarom vooral gericht op het voorkomen van accidentele overbelasting en het beschermen van gedeelde resources. Vaak worden voor interne API's hogere limieten gehanteerd dan voor publieke API's, maar nog steeds met redelijke bovengrenzen om te voorkomen dat een enkele misconfiguratie de volledige omgeving beïnvloedt. Daarnaast is het voor interne API's vaak nuttig om rate limiting te combineren met quota management, waarbij niet alleen het aantal aanvragen per tijdseenheid wordt beperkt, maar ook het totaal aantal aanvragen per dag of maand. Dit helpt bij het beheersen van cloudkosten en het identificeren van inefficiënte of misbruikende applicaties.
Monitoring, analyse en continue optimalisatie van rate limiting
Gebruik PowerShell-script rate-limiting.ps1 (functie Invoke-Remediation) – Genereert een overzicht van API Management-services met ontbrekende of onvoldoende rate limiting-configuratie en doet aanbevelingen voor verbetering..
Het configureren van rate limiting is geen eenmalige activiteit, maar vereist continue monitoring en aanpassing op basis van werkelijke gebruikspatronen en incidenten. Azure API Management biedt uitgebreide logging en metrics die inzicht geven in het rate limiting-gedrag, waaronder het aantal aanvragen dat wordt toegestaan, het aantal dat wordt geblokkeerd wegens overschrijding van limieten, en gedetailleerde informatie over welke clients of subscriptions de limieten het meest benaderen of overschrijden. Deze informatie moet regelmatig worden geanalyseerd om trends te identificeren, zoals groeiende gebruikspatronen die wijzen op de noodzaak om limieten aan te passen, of herhaalde overschrijdingen door specifieke clients die mogelijk wijzen op misbruik of foutieve implementaties. Door deze analyses te koppelen aan incident response-processen, kunnen organisaties snel reageren op nieuwe dreigingen of gebruikspatronen en hun rate limiting-strategie proactief aanpassen.
Het PowerShell-script dat bij dit artikel hoort, kan worden ingezet als geautomatiseerde controle om periodiek te verifiëren of alle relevante API's en producten rate limiting hebben geconfigureerd en of deze configuratie voldoet aan minimale beveiligingsstandaarden. Het script kan bijvoorbeeld controleren of er geen API's zijn zonder rate limiting in productie, of alle publieke API's minimaal een bepaalde basislimiet hebben, en of de configuratie consistent is tussen verschillende omgevingen. De output van het script kan worden gekoppeld aan compliance-dashboards of risicoregisters, zodat afwijkingen snel zichtbaar worden en kunnen worden opgepakt. Voor Nederlandse overheidsorganisaties is dit vooral waardevol omdat het helpt om aan te tonen dat rate limiting niet alleen is geconfigureerd, maar ook structureel wordt bewaakt en onderhouden, wat belangrijk is voor audits en toezicht door de Autoriteit Persoonsgegevens, de NCTV of andere relevante toezichthouders.
Naast het monitoren van de technische configuratie is het belangrijk om regelmatig de effectiviteit van rate limiting te evalueren. Dit betekent niet alleen kijken naar metrics, maar ook naar incidenten: zijn er denial-of-service-situaties geweest die rate limiting niet heeft kunnen voorkomen, zijn er klachten van legitieme gebruikers over onterechte blokkades, en zijn er nieuwe aanvalstactieken geïdentificeerd waartegen bestaande rate limiting onvoldoende bescherming biedt. Door deze evaluaties structureel uit te voeren, bijvoorbeeld als onderdeel van periodieke security reviews of na significante incidenten, kunnen organisaties hun rate limiting-strategie continu verbeteren en ervoor zorgen dat deze effectief blijft in een veranderende dreigingsomgeving. Daarnaast is het waardevol om rate limiting te koppelen aan bredere security monitoring en threat intelligence, zodat nieuwe aanvalstactieken snel kunnen worden herkend en mitigeerbaar gemaakt via aanpassingen aan rate limiting-configuraties.
Compliance & Frameworks
- BIO: 09.01, 12.02, 14.01 - Eisen uit de Baseline Informatiebeveiliging Overheid rond beschikbaarheid, continuïteit en bescherming van kritieke diensten tegen denial-of-service en overbelasting.
- ISO 27001:2022: A.12.2.1, A.14.1.3, A.17.2.1 - Beveiliging van netwerkdiensten, beheer van beveiligingsaspecten van netwerkdiensten en bescherming tegen denial-of-service-aanvallen.
- NIS2: Artikel - Verplichting tot het treffen van passende technische en organisatorische maatregelen voor de beschikbaarheid en beveiliging van essentiële of belangrijke diensten, inclusief bescherming tegen denial-of-service-aanvallen.
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).
Risico zonder implementatie
Management Samenvatting
Configureer rate limiting op meerdere niveaus binnen Azure API Management voor alle kritieke API's, met geschikte limieten die balanceren tussen beveiliging en gebruikerservaring. Monitor rate limiting-gedrag regelmatig en pas configuraties aan op basis van werkelijke gebruikspatronen en incidenten. Gebruik het bijbehorende PowerShell-script om periodiek te controleren of rate limiting correct is geconfigureerd en voldoet aan minimale beveiligingsstandaarden.
- Implementatietijd: 65 uur
- FTE required: 0.3 FTE