Wybór autoryzatora API Gateway

Bezpieczeństwo AWS dla deweloperów

Rahul Singh

Technical Product Manager

Sprawdzane, zanim uruchomi się twój kod

Wywołanie przechodzi przez autoryzator API Gateway, zanim dotrze do twojego kodu, a odrzucone wywołanie dostaje błąd 401.

Przejście: żądanie dociera do twojego kodu

Odrzucenie: 401 unauthorized, twój kod się nie uruchamia

Bezpieczeństwo AWS dla deweloperów

Kto przeprowadza sprawdzenie

Trzy autoryzatory do wyboru
  1. Autoryzacja IAM (AWS_IAM): AWS sprawdza podpis

Pionowy stos na osi od sprawdzania przez AWS do sprawdzania przez ciebie. Wypełniona jest tylko pierwsza karta: autoryzacja IAM, w której AWS sprawdza podpis.

Bezpieczeństwo AWS dla deweloperów

Kto przeprowadza sprawdzenie

Trzy autoryzatory do wyboru
  1. Autoryzacja IAM (AWS_IAM): AWS sprawdza podpis
  2. Autoryzator Cognito (COGNITO_USER_POOLS): AWS weryfikuje token
    • Podpis, iss, aud, exp

Ten sam pionowy stos z dwiema wypełnionymi kartami: autoryzacja IAM, w której AWS sprawdza podpis, oraz autoryzator Cognito, w którym AWS weryfikuje token.

Bezpieczeństwo AWS dla deweloperów

Kto przeprowadza sprawdzenie

Trzy autoryzatory do wyboru
  1. Autoryzacja IAM (AWS_IAM): AWS sprawdza podpis
  2. Autoryzator Cognito (COGNITO_USER_POOLS): AWS weryfikuje token
    • Podpis, iss, aud, exp
  3. Autoryzator Lambda: twoja funkcja zwraca decyzję allow lub deny
    • Dla tokenów spoza Cognito

Trzy autoryzatory uszeregowane od sprawdzania przez AWS do sprawdzania przez ciebie: autoryzacja IAM, w której AWS sprawdza podpis, autoryzator Cognito, w którym AWS weryfikuje token, oraz autoryzator Lambda, w którym sam piszesz logikę sprawdzania.

Bezpieczeństwo AWS dla deweloperów

Dopasuj bramkę do wywołującego

 

Decyduje wywołujący

 

  • Usługa wewnętrzna: ma już dane uwierzytelniające AWS

Pierwszy z trzech wierszy przypisań wywołującego do autoryzatora: usługa wewnętrzna przypisana do autoryzacji IAM.

Bezpieczeństwo AWS dla deweloperów

Dopasuj bramkę do wywołującego

 

Decyduje wywołujący

 

  • Usługa wewnętrzna: ma już dane uwierzytelniające AWS
  • Użytkownik aplikacji: ma token Cognito

Dwa z trzech wierszy przypisań wywołującego do autoryzatora: usługa wewnętrzna przypisana do autoryzacji IAM oraz użytkownik aplikacji przypisany do autoryzatora Cognito.

Bezpieczeństwo AWS dla deweloperów

Dopasuj bramkę do wywołującego

 

Decyduje wywołujący

 

  • Usługa wewnętrzna: ma już dane uwierzytelniające AWS
  • Użytkownik aplikacji: ma token Cognito
  • Aplikacja partnera: ma własną logikę autoryzacji

Trzy wywołujące przypisane do autoryzatora, którego potrzebują: usługa wewnętrzna do autoryzacji IAM, użytkownik aplikacji do autoryzatora Cognito, a aplikacja partnera do autoryzatora Lambda.

Bezpieczeństwo AWS dla deweloperów

Zwróć uwagę na typ API

REST API

  • Wszystkie trzy autoryzatory plus polityki zasobów
  • Klucze API, ograniczanie liczby żądań per klient, walidacja żądań, WAF

Karta porównawcza dla REST API, z zaznaczonymi: autoryzacją IAM, autoryzatorem Cognito, autoryzatorem Lambda i polityką zasobów. Karta HTTP API obok jest jeszcze niewypełniona.

Bezpieczeństwo AWS dla deweloperów

Zwróć uwagę na typ API

REST API

  • Wszystkie trzy autoryzatory plus polityki zasobów
  • Klucze API, ograniczanie liczby żądań per klient, walidacja żądań, WAF

 

HTTP API

  • Autoryzator JWT, dowolny wystawca OIDC
  • Brak polityk zasobów; tańszy i szybszy

Dwie karty porównujące, jakie autoryzatory obsługuje każdy typ API: REST API dodaje polityki zasobów, a HTTP API zamienia autoryzator Cognito na autoryzator JWT i nie ma polityk zasobów.

Bezpieczeństwo AWS dla deweloperów

Autoryzator pamięta

Buforowanie oszczędza czas

  • Pierwsze wywołanie: autoryzator się uruchamia
  • Kolejne wywołania: odczyt odpowiedzi z pamięci podręcznej

Pierwsze wywołanie uruchamia autoryzator i zapisuje decyzję allow w pamięci podręcznej z określonym czasem życia, a kolejne wywołanie odczytuje tę decyzję z pamięci podręcznej bez ponownego uruchamiania autoryzatora.

Bezpieczeństwo AWS dla deweloperów

Autoryzator pamięta

Buforowanie oszczędza czas

  • Pierwsze wywołanie: autoryzator się uruchamia
  • Kolejne wywołania: odczyt odpowiedzi z pamięci podręcznej

 

Czas życia pamięci podręcznej (TTL)

  • authorizerResultTtlInSeconds: domyślnie 300 s, maksymalnie 3600 s
  • Zero wyłącza buforowanie

Pierwsze wywołanie uruchamia autoryzator i zapisuje decyzję allow w pamięci podręcznej z określonym czasem życia, a kolejne wywołanie odczytuje tę decyzję z pamięci podręcznej bez ponownego uruchamiania autoryzatora.

Bezpieczeństwo AWS dla deweloperów

Buforowana decyzja allow może przetrwać dłużej niż uprawnienie

Oś czasu z dwoma pasami. Pas uprawnień zmienia się z ważnego na cofnięte w momencie odwołania, podczas gdy pas buforowanej decyzji allow wciąż pokazuje zgodę po tym punkcie, a okno po odwołaniu jest zacieniowane.

W momencie odwołania

  • Uprawnienie: cofnięte natychmiast
  • Buforowana decyzja allow: nadal udziela dostępu
Bezpieczeństwo AWS dla deweloperów

Buforowana decyzja allow może przetrwać dłużej niż uprawnienie

Ta sama oś czasu z dwoma pasami, z zacieniowanym oknem między momentem odwołania a wygaśnięciem TTL, oznaczonym jako „nadal dozwolone" — uprawnienie jest cofnięte, ale buforowana decyzja allow wciąż daje dostęp.

Okno pomiędzy

  • Uprawnienia już nie ma, pamięć podręczna o tym nie wie
  • Dostęp trwa aż do wygaśnięcia TTL
Bezpieczeństwo AWS dla deweloperów

Buforowana decyzja allow może przetrwać dłużej niż uprawnienie

Ta sama oś czasu z dwoma pasami i strzałką nad zacieniowanym oknem pokazującą, że krótszy TTL przyspiesza wygaśnięcie i skraca okres, w którym cofnięte uprawnienie nadal daje dostęp.

Kontroluj to okno

  • Krótki TTL, gdy odwołanie musi działać szybko
  • TTL 0 dla najbardziej wrażliwych tras
Bezpieczeństwo AWS dla deweloperów

Jeden z wywołujących omija główne wejście

Zewnętrzny podmiot wewnątrz twojego konta

  • Przejmuje rolę, którą stworzyłeś
  • Przekazujesz mu ARN tej roli

Dostawca monitoringu znajduje się między dwoma polami klientów u góry a twoją rolą na dole. Twoje pole przekazuje ARN roli dostawcy, który przejmuje tę rolę. Drugie pole klienta jest wyszarzone i jeszcze nie bierze udziału w historii.

Bezpieczeństwo AWS dla deweloperów

Jeden z wywołujących omija główne wejście

Zewnętrzny podmiot wewnątrz twojego konta

  • Przejmuje rolę, którą stworzyłeś
  • Przekazujesz mu ARN tej roli

ARN roli nie jest tajny

Problem zdezorientowanego pośrednika (confused deputy)

Drugie pole klienta jest teraz aktywne na czerwono i przekazuje ARN twojej roli, jakby był jego własny. Od dostawcy monitoringu prowadzą teraz dwie strzałki do twojej roli, po jednym wywołaniu na klienta, i nic ich nie odróżnia.

Bezpieczeństwo AWS dla deweloperów

Jeden z wywołujących omija główne wejście

Zewnętrzny podmiot wewnątrz twojego konta

  • Przejmuje rolę, którą stworzyłeś
  • Przekazujesz mu ARN tej roli

ARN roli nie jest tajny

Problem zdezorientowanego pośrednika (confused deputy)

Rozwiązanie: sts:ExternalId

  • Dostawca generuje osobny identyfikator dla każdego klienta
  • Twoja polityka zaufania wymaga jego zgodności

Twoja rola wymaga teraz, aby zewnętrzny identyfikator był równy 12345. Wywołanie z identyfikatorem 12345 dociera do roli, a wywołanie z identyfikatorem 99999 zostaje zatrzymane czerwonym krzyżykiem, zanim dotrze do celu.

Bezpieczeństwo AWS dla deweloperów

Czas na praktykę!

Bezpieczeństwo AWS dla deweloperów

Preparing Video For Download...