Att välja en autentiserare för API Gateway

Använda AWS-säkerhet för utvecklare

Rahul Singh

Technical Product Manager

Kontrolleras innan din kod körs

En anropare passerar genom API Gateway-autentiseraren innan den når din kod, en avvisad anropare nekas med 401.

Godkänd: förfrågan når din kod

Nekad: 401 unauthorized, din kod körs aldrig

Använda AWS-säkerhet för utvecklare

Vem gör kontrollen

Tre autentiserare att välja mellan
  1. IAM auth (AWS_IAM): AWS kontrollerar en signatur

En vertikal stapel på en axel som går från att AWS gör kontrollen till att du gör den. Endast första kortet är ifyllt: IAM auth, där AWS kontrollerar en signatur.

Använda AWS-säkerhet för utvecklare

Vem gör kontrollen

Tre autentiserare att välja mellan
  1. IAM auth (AWS_IAM): AWS kontrollerar en signatur
  2. Cognito-autentiserare (COGNITO_USER_POOLS): AWS verifierar en token
    • Signatur, iss, aud, exp

Samma vertikala stapel med två kort ifyllda: IAM auth, där AWS kontrollerar en signatur, och en Cognito-autentiserare, där AWS verifierar en token.

Använda AWS-säkerhet för utvecklare

Vem gör kontrollen

Tre autentiserare att välja mellan
  1. IAM auth (AWS_IAM): AWS kontrollerar en signatur
  2. Cognito-autentiserare (COGNITO_USER_POOLS): AWS verifierar en token
    • Signatur, iss, aud, exp
  3. Lambda-autentiserare: din funktion returnerar allow eller deny
    • För tokens som inte är Cognito

Tre autentiserare rangordnade från att AWS gör kontrollen till att du gör den: IAM auth där AWS kontrollerar en signatur, en Cognito-autentiserare där AWS verifierar en token, och en Lambda-autentiserare där du skriver kontrollen.

Använda AWS-säkerhet för utvecklare

Matcha dörren till anroparen

 

Anroparen avgör

 

  • Intern tjänst: har redan AWS-autentiseringsuppgifter

Den första av tre rader som kopplar anropare till autentiserare: en intern tjänst kopplad till IAM auth.

Använda AWS-säkerhet för utvecklare

Matcha dörren till anroparen

 

Anroparen avgör

 

  • Intern tjänst: har redan AWS-autentiseringsuppgifter
  • Appanvändare: har en Cognito-token

Två av tre rader som kopplar anropare till autentiserare: en intern tjänst kopplad till IAM auth, och en appanvändare kopplad till en Cognito-autentiserare.

Använda AWS-säkerhet för utvecklare

Matcha dörren till anroparen

 

Anroparen avgör

 

  • Intern tjänst: har redan AWS-autentiseringsuppgifter
  • Appanvändare: har en Cognito-token
  • Partnerapp: har egen auktoriseringslogik

Tre anropare kopplade till den autentiserare var och en behöver: en intern tjänst till IAM auth, en appanvändare till en Cognito-autentiserare, och en partnerapp till en Lambda-autentiserare.

Använda AWS-säkerhet för utvecklare

Tänk på API-typen

REST API

  • Alla tre autentiserare, plus resurspolicyer
  • API-nycklar, per-klient-begränsning, förfrågansvalidering, WAF

Ett jämförelsekort för en REST API, som bockar av IAM auth, en Cognito user pool-autentiserare, en Lambda-autentiserare och en resurspolicy. HTTP API-kortet bredvid är ännu inte ifyllt.

Använda AWS-säkerhet för utvecklare

Tänk på API-typen

REST API

  • Alla tre autentiserare, plus resurspolicyer
  • API-nycklar, per-klient-begränsning, förfrågansvalidering, WAF

 

HTTP API

  • JWT-autentiserare, vilken OIDC-utfärdare som helst
  • Inga resurspolicyer; billigare och snabbare

Två kort som jämför vilka autentiserare varje API-typ stödjer: en REST API lägger till resurspolicyer, medan en HTTP API byter ut Cognito-autentiseraren mot en JWT-autentiserare och saknar resurspolicyer.

Använda AWS-säkerhet för utvecklare

Autentiseraren kommer ihåg

Cachad för att spara tid

  • Första anropet: autentiseraren körs
  • Senare anrop: läser det cachade svaret

Det första anropet kör autentiseraren och skriver en godkänd-markering till en cache med en livslängd, och ett senare anrop läser den godkänd-markeringen från cachen utan att köra autentiseraren igen.

Använda AWS-säkerhet för utvecklare

Autentiseraren kommer ihåg

Cachad för att spara tid

  • Första anropet: autentiseraren körs
  • Senare anrop: läser det cachade svaret

 

Cache-TTL

  • authorizerResultTtlInSeconds: 300 s som standard, 3600 s max
  • Noll inaktiverar cachning

Det första anropet kör autentiseraren och skriver en godkänd-markering till en cache med en livslängd, och ett senare anrop läser den godkänd-markeringen från cachen utan att köra autentiseraren igen.

Använda AWS-säkerhet för utvecklare

Ett cachat godkännande kan överleva sin behörighet

En tvåspårig tidslinje. Behörighetsspåret ändras från giltig till återkallad vid återkallelsepunkten, medan det cachade godkännandet nedanför fortfarande visar godkänd efter den punkten, med fönstret efter återkallelsen skuggat.

Vid tidpunkten för återkallelsen

  • Behörighet: återkallad omedelbart
  • Cachat godkännande: ger fortfarande åtkomst
Använda AWS-säkerhet för utvecklare

Ett cachat godkännande kan överleva sin behörighet

Samma tvåspåriga tidslinje med fönstret mellan återkallelsepunkten och TTL-utgången skuggat och markerat fortfarande tillåtet, där behörigheten är återkallad men det cachade godkännandet fortsätter att ge åtkomst.

Fönstret däremellan

  • Behörigheten borta, cachen inte informerad
  • Åtkomsten varar tills TTL:n löper ut
Använda AWS-säkerhet för utvecklare

Ett cachat godkännande kan överleva sin behörighet

Samma tvåspåriga tidslinje med en pil över det skuggade fönstret som visar att en kortare TTL flyttar utgången tidigare och minskar perioden där en återkallad behörighet fortfarande ger åtkomst.

Styr det fönstret

  • Kort TTL när återkallelse måste gå snabbt
  • TTL 0 på de mest känsliga rutterna
Använda AWS-säkerhet för utvecklare

En anropare hoppar över huvudentrén

En tredje part inuti ditt konto

  • Antar en roll du har skapat
  • Du lämnar ut roll-ARN:et

En övervakningsleverantör sitter mellan två kundrutor ovan och din roll nedan. Din ruta lämnar sitt roll-ARN nedåt till leverantören, som antar din roll. Den andra kundrutan är gråtonad och ännu inte en del av berättelsen.

Använda AWS-säkerhet för utvecklare

En anropare hoppar över huvudentrén

En tredje part inuti ditt konto

  • Antar en roll du har skapat
  • Du lämnar ut roll-ARN:et

Roll-ARN:et är ingen hemlighet

Confused deputy-problemet

Den andra kundrutan är nu aktiv i rött och lämnar ut ditt roll-ARN som om det vore sitt eget. Två pilar går nu från övervakningsleverantören ner till din roll, ett anrop per kund, och inget skiljer dem åt.

Använda AWS-säkerhet för utvecklare

En anropare hoppar över huvudentrén

En tredje part inuti ditt konto

  • Antar en roll du har skapat
  • Du lämnar ut roll-ARN:et

Roll-ARN:et är ingen hemlighet

Confused deputy-problemet

Lösningen: sts:ExternalId

  • Leverantören genererar ett per kund
  • Din trust policy kräver att det matchar

Din roll har nu ett krav på att det externa ID:t ska vara 12345. Anropet med 12345 når rollen, och anropet med 99999 stoppas av ett rött kryss innan det kommer fram.

Använda AWS-säkerhet för utvecklare

Nu kör vi en övning!

Använda AWS-säkerhet för utvecklare

Preparing Video For Download...