Een API Gateway-authorizer kiezen

AWS-beveiliging gebruiken voor developers

Rahul Singh

Technical Product Manager

Gecontroleerd vóór je code draait

Een aanroeper gaat via de API Gateway-authorizer voordat je code wordt bereikt; een geweigerde aanroeper krijgt een 401.

Geslaagd: het verzoek bereikt je code

Mislukt: 401 unauthorized, je code draait niet

AWS-beveiliging gebruiken voor developers

Wie doet de controle

Drie authorizers om uit te kiezen
  1. IAM-auth (AWS_IAM): AWS controleert een handtekening

Een verticale stapel op een as van AWS die controleert naar jij die controleert. Alleen de eerste kaart is ingevuld: IAM-auth, waar AWS een handtekening controleert.

AWS-beveiliging gebruiken voor developers

Wie doet de controle

Drie authorizers om uit te kiezen
  1. IAM-auth (AWS_IAM): AWS controleert een handtekening
  2. Cognito-authorizer (COGNITO_USER_POOLS): AWS verifieert een token
    • Handtekening, iss, aud, exp

Dezelfde verticale stapel met twee ingevulde kaarten: IAM-auth, waar AWS een handtekening controleert, en een Cognito-authorizer, waar AWS een token verifieert.

AWS-beveiliging gebruiken voor developers

Wie doet de controle

Drie authorizers om uit te kiezen
  1. IAM-auth (AWS_IAM): AWS controleert een handtekening
  2. Cognito-authorizer (COGNITO_USER_POOLS): AWS verifieert een token
    • Handtekening, iss, aud, exp
  3. Lambda-authorizer: je functie geeft allow of deny terug
    • Voor tokens die geen Cognito zijn

Drie authorizers gerangschikt van AWS die controleert tot jij die controleert: IAM-auth waar AWS een handtekening controleert, een Cognito-authorizer waar AWS een token verifieert, en een Lambda-authorizer waar jij de controle schrijft.

AWS-beveiliging gebruiken voor developers

Kies de juiste deur voor de beller

 

De beller bepaalt

 

  • Interne service: heeft al AWS-referenties

De eerste van drie rijen beller-naar-authorizer: een interne service gekoppeld aan IAM-auth.

AWS-beveiliging gebruiken voor developers

Kies de juiste deur voor de beller

 

De beller bepaalt

 

  • Interne service: heeft al AWS-referenties
  • App-gebruiker: draagt een Cognito-token

Twee van drie rijen beller-naar-authorizer: een interne service gekoppeld aan IAM-auth, en een app-gebruiker gekoppeld aan een Cognito-authorizer.

AWS-beveiliging gebruiken voor developers

Kies de juiste deur voor de beller

 

De beller bepaalt

 

  • Interne service: heeft al AWS-referenties
  • App-gebruiker: draagt een Cognito-token
  • Partnerapp: heeft eigen autorisatielogica

Drie bellers gekoppeld aan de authorizer die ze nodig hebben: een interne service aan IAM-auth, een app-gebruiker aan een Cognito-authorizer en een partnerapp aan een Lambda-authorizer.

AWS-beveiliging gebruiken voor developers

Let op het API-type

REST API

  • Alle drie de authorizers, plus resource policies
  • API-sleutels, throttling per client, requestvalidatie, WAF

Een vergelijkingskaart voor een REST API met vinkjes bij IAM-auth, een Cognito user pool-authorizer, een Lambda-authorizer en een resource policy. De HTTP API-kaart ernaast is nog leeg.

AWS-beveiliging gebruiken voor developers

Let op het API-type

REST API

  • Alle drie de authorizers, plus resource policies
  • API-sleutels, throttling per client, requestvalidatie, WAF

 

HTTP API

  • JWT-authorizer, elke OIDC-issuer
  • Geen resource policies; goedkoper en sneller

Twee kaarten die vergelijken welke authorizers elk API-type ondersteunt: een REST API voegt resource policies toe, terwijl een HTTP API de Cognito-authorizer vervangt door een JWT-authorizer en geen resource policies heeft.

AWS-beveiliging gebruiken voor developers

De authorizer onthoudt

Gecachet om tijd te besparen

  • Eerste call: de authorizer draait
  • Latere calls: lees het gecachete antwoord

De eerste call draait de authorizer en schrijft een allow in een cache met een time-to-live; een latere call leest die allow uit de cache zonder de authorizer opnieuw te draaien.

AWS-beveiliging gebruiken voor developers

De authorizer onthoudt

Gecachet om tijd te besparen

  • Eerste call: de authorizer draait
  • Latere calls: lees het gecachete antwoord

 

Cache-TTL

  • authorizerResultTtlInSeconds: standaard 300s, max 3600s
  • Nul schakelt caching uit

De eerste call draait de authorizer en schrijft een allow in een cache met een time-to-live; een latere call leest die allow uit de cache zonder de authorizer opnieuw te draaien.

AWS-beveiliging gebruiken voor developers

Een gecachete allow kan langer leven dan de toestemming

Een tijdlijn met twee sporen. In het toestemmingsspoor verandert de status van geldig naar ingetrokken bij het intrekkingspunt, terwijl het gecachete allow-spoor eronder nog steeds allow toont na dat punt; het venster na intrekking is gearceerd.

Op het moment dat je intrekt

  • Toestemming: direct ingetrokken
  • Gecachete allow: geeft nog steeds toegang
AWS-beveiliging gebruiken voor developers

Een gecachete allow kan langer leven dan de toestemming

Dezelfde tweesporentijdlijn met het venster tussen het intrekkingspunt en het verlopen van de TTL gearceerd en gemarkeerd als nog toegestaan, waar de toestemming is ingetrokken maar de gecachete allow toegang blijft geven.

Het venster ertussen

  • Toestemming weg, cache niet geïnformeerd
  • Toegang blijft tot de TTL verloopt
AWS-beveiliging gebruiken voor developers

Een gecachete allow kan langer leven dan de toestemming

Dezelfde tweesporentijdlijn met een pijl over het gearceerde venster die laat zien dat een kortere TTL het verlopen naar voren haalt en de periode verkleint waarin een ingetrokken toestemming nog toegang geeft.

Beheer dat venster

  • Korte TTL als intrekken snel moet zijn
  • TTL 0 op de meest gevoelige routes
AWS-beveiliging gebruiken voor developers

Eén beller omzeilt de voordeur

Een derde partij binnen je account

  • Neemt een rol aan die jij hebt gemaakt
  • Jij geeft de role ARN door

Een monitoringleverancier staat tussen twee klantvakken boven en jouw rol onder. Jouw vak geeft zijn role ARN door aan de leverancier, die jouw rol aanneemt. Het tweede klantvak is grijs en nog niet actief in het verhaal.

AWS-beveiliging gebruiken voor developers

Eén beller omzeilt de voordeur

Een derde partij binnen je account

  • Neemt een rol aan die jij hebt gemaakt
  • Jij geeft de role ARN door

De role ARN is geen geheim

Het confused deputy-probleem

Het tweede klantvak is nu actief in rood en geeft jouw role ARN door alsof het van hem is. Er lopen twee pijlen van de monitoringleverancier naar jouw rol, één call per klant, en niets onderscheidt ze.

AWS-beveiliging gebruiken voor developers

Eén beller omzeilt de voordeur

Een derde partij binnen je account

  • Neemt een rol aan die jij hebt gemaakt
  • Jij geeft de role ARN door

De role ARN is geen geheim

Het confused deputy-probleem

De oplossing: sts:ExternalId

  • De leverancier genereert er één per klant
  • Jouw trust policy vereist de match

Je rol vereist nu dat de external ID gelijk is aan 12345. De call met 12345 bereikt de rol, en de call met 99999 wordt tegengehouden door een rood kruis.

AWS-beveiliging gebruiken voor developers

Laten we oefenen!

AWS-beveiliging gebruiken voor developers

Preparing Video For Download...