Autoryzacja: IAM, autoryzatory Lambda i Cognito
Zabezpieczą endpointy API za pomocą podpisów IAM SigV4, niestandardowych autoryzatorów Lambda lub autoryzatorów Amazon Cognito User Pool.
Autoryzacja: IAM, autoryzatory Lambda i Cognito to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Dlaczego autoryzacja API ma znaczenie
Bez mechanizmów autoryzacji dowolny klient internetowy mógłby wywoływać endpointy API Gateway oraz uzyskiwać dostęp do danych lub je modyfikować. API Gateway udostępnia trzy natywne mechanizmy autoryzacji: IAM (SigV4), Lambda Authorisers oraz Amazon Cognito User Pool Authorisers. Każdy z nich służy innym zastosowaniom: IAM do wywołań między usługami AWS, autoryzatory Lambda do niestandardowego uwierzytelniania opartego na tokenie lub żądaniu, a Cognito do uwierzytelniania użytkowników aplikacji internetowych i mobilnych.
Autoryzacja IAM za pomocą SigV4
Autoryzacja IAM wymaga, aby wywołujący podpisywał żądania za pomocą AWS Signature Version 4 (SigV4). Wywołujący musi mieć dane uwierzytelniające AWS (klucz dostępu i klucz tajny lub tymczasowe dane uwierzytelniające z STS), a polityka IAM musi zezwalać na działanie execute-api:Invoke względem ARN API. Jest to idealne rozwiązanie do wywołań między maszynami (między serwerami) w AWS: gdy Lambda wywołuje inne API, EC2 wywołuje wewnętrzne API lub usługa uzyskuje dostęp między kontami. Klienci przeglądarkowi nie mogą łatwo korzystać z SigV4.
# 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'
}]
}Autoryzatory Lambda: oparte na tokenie
Lambda Authoriser (wcześniej Custom Authoriser) to napisana przez Państwa funkcja Lambda, którą API Gateway wywołuje przed wywołaniem integracji backendowej. W przypadku autoryzatorów opartych na tokenie API Gateway pobiera token (JWT, OAuth, klucz API) z nagłówka Authorization i przekazuje go do funkcji Lambda. Funkcja Lambda weryfikuje token (np. sprawdza podpis JWT za pomocą klucza publicznego lub wywołuje zewnętrznego dostawcę tożsamości), a następnie zwraca dokument polityki IAM zezwalający na żądanie lub je odrzucający.
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')Autoryzatory Lambda: oparte na żądaniu
W przypadku autoryzatorów Lambda opartych na żądaniu API Gateway przekazuje do funkcji Lambda cały kontekst żądania (nagłówki, ciągi zapytania, zmienne etapu i parametry ścieżki), a nie tylko token. Jest to przydatne, gdy autoryzacja zależy od wielu atrybutów żądania: list dozwolonych adresów IP, kombinacji nagłówków lub kontroli uwierzytelniania wieloskładnikowego. Autoryzatory oparte na żądaniu są obsługiwane zarówno przez REST API, jak i HTTP API.
Buforowanie autoryzatora Lambda
Wywoływanie autoryzatora Lambda przy każdym żądaniu API zwiększa opóźnienia i koszty. Należy włączyć buforowanie wyników autoryzatora: polityka IAM zwrócona przez autoryzator jest przechowywana przez konfigurowalny TTL (0–3600 sekund), a kluczem jest wartość tokenu. Kolejne żądania z tym samym tokenem pomijają wywołanie Lambda i korzystają z zapisanej polityki. TTL należy ustawić zgodnie z czasem wygaśnięcia tokenu — jeśli token jest ważny przez 1 godzinę, wynik autoryzatora należy buforować przez taki sam czas. Buforowanie jest dostępne w REST API; autoryzatory JWT w HTTP API mają wbudowane buforowanie.
Autoryzator Amazon Cognito User Pool
Cognito User Pool Authorisers bezpośrednio weryfikują JWT wystawione przez Cognito w API Gateway, bez użycia funkcji Lambda. Gdy użytkownik uwierzytelnia się za pośrednictwem Cognito (przez Hosted UI, SDK lub federacyjnego dostawcę tożsamości), Cognito wystawia token ID lub token dostępu. Klient umieszcza ten token w nagłówku Authorization. API Gateway weryfikuje podpis i termin ważności tokenu względem puli użytkowników Cognito. Jeśli token jest prawidłowy, żądanie jest kontynuowane; w przeciwnym razie API Gateway zwraca 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'Autoryzator JWT w HTTP API
HTTP API natywnie obsługuje autoryzatory JWT bez użycia Lambda. Należy określić URL wystawcy JWT (Cognito, Auth0, Okta) oraz odbiorców, a API Gateway będzie automatycznie weryfikować JWT. Jest to zasadniczo autoryzator Cognito User Pool, ale działa również z dowolnym dostawcą OIDC zgodnym ze standardami. API Gateway wewnętrznie wykonuje walidację tokenu (podpisu, terminu ważności i odbiorcy), co zapewnia mniejsze opóźnienia niż autoryzatory Lambda i nie generuje kosztów Lambda.
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 Identity Pools a User Pools
Do autoryzacji API należy używać Cognito User Pools: zarządzają uwierzytelnianiem użytkowników i wystawiają JWT. Cognito Identity Pools (tożsamości federacyjne) działają inaczej — wymieniają tokeny zewnętrzne (z User Pools, logowania społecznościowego lub SAML) na tymczasowe dane uwierzytelniające AWS (za pośrednictwem STS AssumeRoleWithWebIdentity). Identity Pools stosuje się, gdy aplikacja musi bezpośrednio uzyskiwać dostęp do usług AWS (S3, DynamoDB) z poziomu klienta. W przypadku autoryzacji API Gateway właściwym wyborem są tokeny JWT z User Pool; dane uwierzytelniające Identity Pool służą do bezpośrednich wywołań AWS SDK z przeglądarki lub urządzenia mobilnego.
Polityki zasobów w API Gateway
REST API obsługuje polityki zasobów — polityki JSON dołączone do API, które kontrolują dostęp na podstawie adresu IP, endpointu VPC, konta źródłowego lub ARN. Polityki zasobów służą do: zezwalania na wywoływanie API tylko określonym zakresom adresów IP, ograniczania dostępu do żądań przechodzących przez konkretny endpoint VPC (prywatne API) lub zezwalania na wywołania między kontami. Polityki zasobów działają dodatkowo względem autoryzatorów na poziomie metody — oba mechanizmy muszą zezwolić na żądanie, aby zakończyło się ono powodzeniem.
# 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'}}
}]
}Uwierzytelnianie wzajemne TLS
Mutual TLS (mTLS) wymaga, aby zarówno klient, jak i serwer przedstawili certyfikaty podczas uzgadniania połączenia TLS. API Gateway obsługuje mTLS dla REST API i HTTP API po skonfigurowaniu niestandardowych nazw domen. Klienci muszą przedstawić prawidłowy certyfikat podpisany przez urząd certyfikacji (CA), którego certyfikat został przesłany do magazynu zaufania w S3. mTLS stosuje się w usługach finansowych, do uwierzytelniania urządzeń IoT oraz w integracjach B2B, gdy wymagana jest silna weryfikacja tożsamości klienta wykraczająca poza uwierzytelnianie oparte na tokenie.
Wybór odpowiedniego typu autoryzatora
Wybór autoryzatora na egzaminie SAA-C03: IAM (SigV4) → wywołania między usługami AWS w ramach tego samego konta lub między kontami; Cognito User Pool → użytkownicy aplikacji internetowych i mobilnych uwierzytelnieni za pomocą Cognito; Lambda Authoriser → niestandardowa logika uwierzytelniania (zewnętrzni dostawcy tożsamości, starsze formaty tokenów, introspekcja OAuth, połączenie adresu IP i tokenu); JWT Authoriser (HTTP API) → tokeny OIDC/OAuth2 z dowolnym dostawcą zgodnym ze standardami, przy niższym koszcie niż w przypadku autoryzatorów Lambda. Brak autoryzatora → publiczne API.
Szybkie sprawdzenie
Sprawdź swoją znajomość zagadnień AWS Solutions Architect (SAA-C03) z tej lekcji.
Podsumowanie lekcji
W tej lekcji poznali Państwo: autoryzacja IAM (SigV4) służy do wywołań między usługami z użyciem danych uwierzytelniających AWS; Cognito User Pool Authorisers natywnie weryfikują JWT wystawione przez Cognito na potrzeby aplikacji internetowych i mobilnych; natomiast Lambda Authorisers umożliwiają niestandardową walidację tokenów zewnętrznych dostawców tożsamości lub złożoną logikę autoryzacji, z opcjonalnym buforowaniem wyników. W następnej części omówimy ograniczanie przepustowości, buforowanie i plany użycia w API Gateway.
Często zadawane pytania
Czy lekcja „Autoryzacja: IAM, autoryzatory Lambda i Cognito” jest bezpłatna?
Tak — pełny tekst „Autoryzacja: IAM, autoryzatory Lambda i Cognito” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Autoryzacja: IAM, autoryzatory Lambda i Cognito”?
Zabezpieczą endpointy API za pomocą podpisów IAM SigV4, niestandardowych autoryzatorów Lambda lub autoryzatorów Amazon Cognito User Pool. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Autoryzacja: IAM, autoryzatory Lambda i Cognito”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- REST API a HTTP API i WebSocket API
- Integracje: Lambda, HTTP i Mock
- Autoryzacja: IAM, autoryzatory Lambda i Cognito
- Ograniczanie, buforowanie i plany użycia