Výběr autorizátoru pro API Gateway

Zabezpečení AWS pro vývojáře

Rahul Singh

Technical Product Manager

Kontrola před spuštěním kódu

Volající projde autorizátorem API Gateway, než se dostane ke tvému kódu; odmítnutý volající je zastaven chybou 401.

Projde: požadavek se dostane ke tvému kódu

Neprojde: 401 unauthorized, tvůj kód se vůbec nespustí

Zabezpečení AWS pro vývojáře

Kdo provádí kontrolu

Tři autorizátory na výběr
  1. IAM auth (AWS_IAM): AWS ověří podpis

Svislá osa od kontroly prováděné AWS po kontrolu prováděnou tebou. Vyplněná je jen první karta: IAM auth, kde AWS ověřuje podpis.

Zabezpečení AWS pro vývojáře

Kdo provádí kontrolu

Tři autorizátory na výběr
  1. IAM auth (AWS_IAM): AWS ověří podpis
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS ověří token
    • Podpis, iss, aud, exp

Stejná svislá osa se dvěma vyplněnými kartami: IAM auth, kde AWS ověřuje podpis, a Cognito authorizer, kde AWS ověřuje token.

Zabezpečení AWS pro vývojáře

Kdo provádí kontrolu

Tři autorizátory na výběr
  1. IAM auth (AWS_IAM): AWS ověří podpis
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS ověří token
    • Podpis, iss, aud, exp
  3. Lambda authorizer: tvoje funkce vrátí allow nebo deny
    • Pro tokeny mimo Cognito

Tři autorizátory seřazené od kontroly prováděné AWS po kontrolu prováděnou tebou: IAM auth, kde AWS ověřuje podpis, Cognito authorizer, kde AWS ověřuje token, a Lambda authorizer, kde kontrolu píšeš ty.

Zabezpečení AWS pro vývojáře

Vyber správné dveře pro volajícího

 

Rozhoduje volající

 

  • Interní služba: už má AWS přihlašovací údaje

První z tří řádků propojujících volajícího s autorizátorem: interní služba spárovaná s IAM auth.

Zabezpečení AWS pro vývojáře

Vyber správné dveře pro volajícího

 

Rozhoduje volající

 

  • Interní služba: už má AWS přihlašovací údaje
  • Uživatel aplikace: nese token od Cognito

Dva ze tří řádků propojujících volajícího s autorizátorem: interní služba spárovaná s IAM auth a uživatel aplikace spárovaný s Cognito authorizer.

Zabezpečení AWS pro vývojáře

Vyber správné dveře pro volajícího

 

Rozhoduje volající

 

  • Interní služba: už má AWS přihlašovací údaje
  • Uživatel aplikace: nese token od Cognito
  • Partnerská aplikace: má vlastní logiku autorizace

Tři volající spárovaní s autorizátorem, který potřebují: interní služba s IAM auth, uživatel aplikace s Cognito authorizer a partnerská aplikace s Lambda authorizer.

Zabezpečení AWS pro vývojáře

Pozor na typ API

REST API

  • Všechny tři autorizátory a navíc resource policies
  • API klíče, throttling podle klienta, validace požadavků, WAF

Srovnávací karta pro REST API se zaškrtnutými položkami IAM auth, Cognito user pool authorizer, Lambda authorizer a resource policy. Karta HTTP API vedle ní zatím není vyplněná.

Zabezpečení AWS pro vývojáře

Pozor na typ API

REST API

  • Všechny tři autorizátory a navíc resource policies
  • API klíče, throttling podle klienta, validace požadavků, WAF

 

HTTP API

  • JWT authorizer, libovolný OIDC vydavatel
  • Bez resource policies; levnější a rychlejší

Dvě karty srovnávající podporované autorizátory podle typu API: REST API přidává resource policies, zatímco HTTP API nahrazuje Cognito authorizer za JWT authorizer a resource policies nemá.

Zabezpečení AWS pro vývojáře

Autorizátor si pamatuje

Ukládání do mezipaměti šetří čas

  • První volání: autorizátor se spustí
  • Další volání: čte se odpověď z mezipaměti

První volání spustí autorizátor a zapíše povolení do mezipaměti s dobou platnosti; další volání pak čte toto povolení z mezipaměti bez opětovného spuštění autorizátoru.

Zabezpečení AWS pro vývojáře

Autorizátor si pamatuje

Ukládání do mezipaměti šetří čas

  • První volání: autorizátor se spustí
  • Další volání: čte se odpověď z mezipaměti

 

TTL mezipaměti

  • authorizerResultTtlInSeconds: výchozí 300 s, max 3600 s
  • Nula ukládání do mezipaměti vypne

První volání spustí autorizátor a zapíše povolení do mezipaměti s dobou platnosti; další volání pak čte toto povolení z mezipaměti bez opětovného spuštění autorizátoru.

Zabezpečení AWS pro vývojáře

Povolení v mezipaměti může přežít své oprávnění

Časová osa se dvěma pruhy. Pruh oprávnění se v bodě odebrání mění z platného na zrušené, zatímco pruh povolení v mezipaměti pod ním za tímto bodem stále ukazuje povolení; okno po zrušení je vystínované.

Ve chvíli, kdy oprávnění odebereš

  • Oprávnění: zrušeno okamžitě
  • Povolení v mezipaměti: stále platí
Zabezpečení AWS pro vývojáře

Povolení v mezipaměti může přežít své oprávnění

Stejná časová osa se dvěma pruhy, kde je okno mezi zrušením a vypršením TTL vystínované a označené jako stále povoleno; oprávnění je zrušeno, ale povolení v mezipaměti nadále umožňuje přístup.

Okno mezi tím

  • Oprávnění zmizelo, mezipaměť o tom neví
  • Přístup trvá, dokud nevyprší TTL
Zabezpečení AWS pro vývojáře

Povolení v mezipaměti může přežít své oprávnění

Stejná časová osa se šipkou přes vystínované okno, která ukazuje, že kratší TTL posune vypršení dřív a zkrátí dobu, kdy zrušené oprávnění ještě umožňuje přístup.

Ovládej toto okno

  • Krátké TTL, když musí být zrušení rychlé
  • TTL 0 u nejcitlivějších cest
Zabezpečení AWS pro vývojáře

Jeden volající obchází hlavní vstup

Třetí strana uvnitř tvého účtu

  • Převezme roli vytvořenou tebou
  • Předáš jí ARN role

Poskytovatel monitoringu stojí mezi dvěma rámečky zákazníků nahoře a tvojí rolí dole. Tvůj rámeček předává ARN role poskytovateli, který roli převezme. Druhý rámeček zákazníka je zatím šedý a není součástí příběhu.

Zabezpečení AWS pro vývojáře

Jeden volající obchází hlavní vstup

Třetí strana uvnitř tvého účtu

  • Převezme roli vytvořenou tebou
  • Předáš jí ARN role

ARN role není tajný údaj

Problém zmateného zástupce

Druhý rámeček zákazníka je teď aktivní a červený a předává ARN tvojí role, jako by byla jeho vlastní. Od poskytovatele monitoringu nyní vedou dvě šipky k tvojí roli, jedna za každého zákazníka, a nic je od sebe neodlišuje.

Zabezpečení AWS pro vývojáře

Jeden volající obchází hlavní vstup

Třetí strana uvnitř tvého účtu

  • Převezme roli vytvořenou tebou
  • Předáš jí ARN role

ARN role není tajný údaj

Problém zmateného zástupce

Řešení: sts:ExternalId

  • Poskytovatel vygeneruje jedno ID pro každého zákazníka
  • Tvoje trust policy vyžaduje shodu

Tvoje role teď vyžaduje, aby externí ID odpovídalo hodnotě 12345. Volání s hodnotou 12345 se k roli dostane, zatímco volání s hodnotou 99999 zastaví červený křížek, než dorazí.

Zabezpečení AWS pro vývojáře

Pojďme cvičit!

Zabezpečení AWS pro vývojáře

Preparing Video For Download...