AWS Solutions Architect · Les

Autorisatie: IAM, Lambda Authorizers en Cognito

Beveilig API-endpoints met IAM SigV4-handtekeningen, aangepaste Lambda-authorizers of authorizers van Amazon Cognito User Pool.

Les 3 van 413 stappen

Autorisatie: IAM, Lambda Authorizers en Cognito is een gratis AWS Solutions Architect-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject AWS Solutions Architect. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus AWS Solutions Architect bevat in totaal 4 lessen.

Waarom API-autorisatie belangrijk is

Zonder autorisatiecontroles zou elke internetclient je API Gateway-eindpunten kunnen aanroepen en gegevens kunnen bekijken of wijzigen. API Gateway biedt drie ingebouwde autorisatiemechanismen: IAM (SigV4), Lambda-autorisatiefuncties en autorisatiefuncties voor Amazon Cognito-gebruikerspools. Elk mechanisme is geschikt voor andere toepassingen: IAM voor aanroepen tussen AWS-services, Lambda-autorisatiefuncties voor aangepaste autorisatie op basis van tokens of aanvragen, en Cognito voor authenticatie van web- en mobiele gebruikers.

IAM-autorisatie met SigV4

Voor IAM-autorisatie moeten aanroepers aanvragen ondertekenen met AWS Signature Version 4 (SigV4). De aanroeper moet over AWS-inloggegevens beschikken (een toegangssleutel en geheime sleutel, of tijdelijke inloggegevens van STS) en het IAM-beleid moet execute-api:Invoke toestaan op de ARN van de API. Dit is ideaal voor machine-to-machine-aanroepen (server-naar-server) binnen AWS: Lambda die een andere API aanroept, EC2 die een interne API aanroept of toegang tot services tussen accounts. Browserclients kunnen SigV4 niet eenvoudig gebruiken.

# IAM policy to allow invoking a specific API endpoint
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Action': 'execute-api:Invoke',
    'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/prod/GET/orders'
  }]
}

Lambda-autorisatiefuncties: op tokens gebaseerd

Een Lambda-autorisatiefunctie (voorheen aangepaste autorisatiefunctie) is een Lambda-functie die je schrijft en die API Gateway aanroept voordat de backendintegratie wordt aangeroepen. Bij op tokens gebaseerde autorisatiefuncties haalt API Gateway een token (JWT, OAuth, API-sleutel) uit de Authorization-header en geeft dit door aan je Lambda-functie. Je Lambda-functie valideert het token (bijvoorbeeld door de JWT-handtekening te controleren met een openbare sleutel of een externe identiteitsprovider aan te roepen) en retourneert een IAM-beleidsdocument dat de aanvraag toestaat of weigert.

def lambda_handler(event, context):
    token = event['authorizationToken']
    # Validate token (JWT verification, introspect OAuth, etc.)
    if is_valid_token(token):
        return {
            'principalId': 'user123',
            'policyDocument': {
                'Version': '2012-10-17',
                'Statement': [{'Effect': 'Allow', 'Action': 'execute-api:Invoke',
                                'Resource': event['methodArn']}]
            },
            'context': {'userId': 'user123', 'role': 'admin'}
        }
    raise Exception('Unauthorized')

Lambda-autorisatiefuncties: op aanvragen gebaseerd

Bij op aanvragen gebaseerde Lambda-autorisatiefuncties geeft API Gateway de volledige context van de aanvraag (headers, querystrings, stagevariabelen en padparameters) door aan je Lambda-functie, en niet alleen een token. Dit is nuttig voor autorisatie die afhankelijk is van meerdere kenmerken van de aanvraag, zoals IP-allowlists, combinaties van headers of controles voor meervoudige authenticatie. Op aanvragen gebaseerde autorisatiefuncties worden ondersteund door zowel REST API als HTTP API.

Caching van resultaten van Lambda-autorisatiefuncties

Elke API-aanvraag doorgeven aan een Lambda-autorisatiefunctie zorgt voor extra latentie en kosten. Schakel caching van autorisatieresultaten in: cache het IAM-beleid dat door de autorisatiefunctie wordt geretourneerd gedurende een configureerbare TTL (0–3600 seconden), waarbij de tokenwaarde als sleutel wordt gebruikt. Bij volgende aanvragen met hetzelfde token wordt de Lambda-aanroep overgeslagen en het gecachte beleid gebruikt. Stel de TTL af op de geldigheidsduur van je token: als een token 1 uur geldig is, cache je het resultaat van de autorisatiefunctie even lang. Caching is beschikbaar in REST API; JWT-autorisatiefuncties van HTTP API hebben ingebouwde caching.

Autorisatiefunctie voor Amazon Cognito-gebruikerspools

Autorisatiefuncties voor Cognito-gebruikerspools valideren door Cognito uitgegeven JWT's rechtstreeks in API Gateway, zonder een Lambda-functie. Wanneer een gebruiker zich via Cognito aanmeldt (via de gehoste gebruikersinterface, SDK of een gefedereerde identiteitsprovider), geeft Cognito een ID-token of toegangstoken uit. De client neemt dit token op in de Authorization-header. API Gateway controleert de handtekening en vervaldatum van het token tegen de Cognito-gebruikerspool. Als het token geldig is, gaat de aanvraag verder; anders retourneert API Gateway 401.

aws apigateway create-authorizer \
  --rest-api-id 'abc123' \
  --name 'CognitoAuthorizer' \
  --type COGNITO_USER_POOLS \
  --provider-arns 'arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_XXXXXXX' \
  --identity-source 'method.request.header.Authorization'

JWT-autorisatiefunctie in HTTP API

HTTP API biedt ingebouwde ondersteuning voor JWT-autorisatiefuncties, zonder Lambda. Je geeft de URL van de JWT-uitgever (Cognito, Auth0, Okta) en de doelgroep op, waarna API Gateway JWT's automatisch valideert. Dit is in wezen een autorisatiefunctie voor een Cognito-gebruikerspool, maar werkt ook met elke OIDC-provider die aan de standaarden voldoet. De tokenvalidatie (handtekening, vervaldatum en doelgroep) wordt intern door API Gateway uitgevoerd. Dit zorgt voor minder latentie dan bij Lambda-autorisatiefuncties en brengt geen Lambda-kosten met zich mee.

aws apigatewayv2 create-authorizer \
  --api-id 'abc123' \
  --authorizer-type JWT \
  --name 'JWTAuthorizer' \
  --identity-source '$request.header.Authorization' \
  --jwt-configuration '{
    "Issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXX",
    "Audience": ["your-client-id"]
  }'

Cognito-identiteitspools versus gebruikerspools

Gebruik voor API-autorisatie Cognito-gebruikerspools: deze beheren gebruikersauthenticatie en geven JWT's uit. Cognito-identiteitspools (gefedereerde identiteiten) zijn anders: deze wisselen tokens van derden (uit gebruikerspools, sociale aanmeldingen of SAML) om voor tijdelijke AWS-inloggegevens (via STS AssumeRoleWithWebIdentity). Identiteitspools worden gebruikt wanneer je app rechtstreeks vanuit de client toegang nodig heeft tot AWS-services (S3, DynamoDB). Voor authenticatie van API Gateway zijn JWT's van gebruikerspools de juiste keuze; inloggegevens van identiteitspools zijn bedoeld voor rechtstreekse AWS SDK-aanroepen vanuit de browser of mobiele app.

Resourcebeleid voor API Gateway

REST API ondersteunt resourcebeleid: JSON-beleid dat aan de API wordt gekoppeld en toegang beheert op basis van IP-adres, VPC-eindpunt, bronaccount of ARN. Gebruik resourcebeleid om alleen specifieke IP-bereiken toe te staan je API aan te roepen, toegang te beperken tot aanvragen via een specifiek VPC-eindpunt (privé-API) of aanroepen tussen accounts toe te staan. Resourcebeleid werkt naast autorisatiefuncties op methodeniveau: beide moeten de aanvraag toestaan voordat deze slaagt.

# Allow only specific IP range to call the API
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': '*',
    'Action': 'execute-api:Invoke',
    'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/*',
    'Condition': {'IpAddress': {'aws:SourceIp': '203.0.113.0/24'}}
  }]
}

Mutual TLS-authenticatie

Mutual TLS (mTLS) vereist dat zowel de client als de server tijdens de TLS-handshake certificaten presenteren. API Gateway ondersteunt mTLS voor REST- en HTTP-API's wanneer aangepaste domeinnamen zijn geconfigureerd. Clients moeten een geldig certificaat presenteren dat is ondertekend door een certificeringsinstantie (CA) die je uploadt naar een truststore in S3. mTLS wordt gebruikt in financiële dienstverlening, voor authenticatie van IoT-apparaten en bij B2B-integraties waar naast tokengebaseerde authenticatie een sterke verificatie van de clientidentiteit vereist is.

Het juiste type autorisatiefunctie kiezen

Keuze van een autorisatiefunctie voor het SAA-C03-examen: IAM (SigV4) → aanroepen tussen AWS-services binnen hetzelfde account of tussen verschillende accounts; Cognito-gebruikerspool → gebruikers van web- en mobiele apps die via Cognito zijn geauthenticeerd; Lambda-autorisatiefunctie → aangepaste autorisatielogica (identiteitsproviders van derden, verouderde tokenindelingen, OAuth-introspectie, een combinatie van IP en token); JWT-autorisatiefunctie (HTTP API) → OIDC/OAuth2-tokens met elke provider die aan de standaarden voldoet, tegen lagere kosten dan Lambda-autorisatiefuncties. Geen autorisatiefunctie → openbare API.

Snelle controle

Test je begrip van de concepten uit deze les voor AWS Solutions Architect (SAA-C03).

Samenvatting van de les

In deze les heb je geleerd dat IAM (SigV4)-autorisatie bedoeld is voor aanroepen tussen services met AWS-inloggegevens; dat autorisatiefuncties voor Cognito-gebruikerspools door Cognito uitgegeven JWT's rechtstreeks valideren voor web- en mobiele apps; en dat Lambda-autorisatiefuncties aangepaste tokenvalidatie implementeren voor identiteitsproviders van derden of complexe autorisatielogica, met optionele caching van resultaten. Hierna bekijken we beperking van aanvragen, caching en gebruiksplannen in API Gateway.

Gratis beginnen

Leer AWS Solutions Architect met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Autorisatie: IAM, Lambda Authorizers en Cognito” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad AWS Solutions Architect, waaronder “Autorisatie: IAM, Lambda Authorizers en Cognito”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus AWS Solutions Architect bevat in totaal 4 lessen.

Wat leer ik in “Autorisatie: IAM, Lambda Authorizers en Cognito”?

Beveilig API-endpoints met IAM SigV4-handtekeningen, aangepaste Lambda-authorizers of authorizers van Amazon Cognito User Pool. Je oefent met AWS Solutions Architect door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met AWS Solutions Architect te beginnen?

Ervaring vooraf is niet nodig. AWS Solutions Architect op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Autorisatie: IAM, Lambda Authorizers en Cognito”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over AWS Solutions Architect?

Ja. Elke les over AWS Solutions Architect bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. REST API versus HTTP API versus WebSocket API
  2. Integraties: Lambda, HTTP en Mock
  3. Autorisatie: IAM, Lambda Authorizers en Cognito
  4. Throttling, caching en usage plans
← Terug naar AWS Solutions Architect