AWS - API Gateway Enum
Bramka API
Podstawowe informacje
AWS API Gateway to kompleksowa usługa oferowana przez Amazon Web Services (AWS), przeznaczona dla programistów do tworzenia, publikowania i nadzorowania interfejsów API na dużą skalę. Funkcjonuje jako punkt wejścia do aplikacji, umożliwiając programistom ustanowienie ram regulacji i procedur. Ta struktura reguluje dostęp, jaki zewnętrzni użytkownicy mają do określonych danych lub funkcji w aplikacji.
Bramka API umożliwia zdefiniowanie sposobu obsługi żądań do twoich interfejsów API, a także może tworzyć niestandardowe punkty końcowe API z określonymi metodami (np. GET, POST, PUT, DELETE) i zasobami. Może również generować zestawy SDK klienta (Software Development Kits), ułatwiając programistom wywoływanie twoich interfejsów API z ich aplikacji.
Typy bramek API
API HTTP: Buduj niskoopóźnieniowe i ekonomiczne interfejsy REST z wbudowanymi funkcjami takimi jak OIDC i OAuth2 oraz natywnym wsparciem dla CORS. Działa z następującymi: Lambda, backendami HTTP.
API WebSocket: Buduj interfejs WebSocket z użyciem trwałych połączeń do zastosowań czasu rzeczywistego, takich jak aplikacje czatowe lub pulpity nawigacyjne. Działa z następującymi: Lambda, HTTP, Usługami AWS.
API REST: Opracuj interfejs REST, w którym zyskujesz pełną kontrolę nad żądaniem i odpowiedzią wraz z możliwościami zarządzania interfejsem API. Działa z następującymi: Lambda, HTTP, Usługami AWS.
Prywatne API REST: Utwórz interfejs REST, który jest dostępny tylko z wewnątrz VPC.
Główne składniki bramki API
Zasoby: W bramce API zasoby to komponenty, które tworzą strukturę twojego interfejsu API. Reprezentują różne ścieżki lub punkty końcowe twojego interfejsu API i odpowiadają różnym działaniom, które obsługuje twoje API. Zasób to każda metoda (np. GET, POST, PUT, DELETE) wewnątrz każdej ścieżki (/, lub /users, lub /user/{id}).
Etap: Etapy w bramce API reprezentują różne wersje lub środowiska twojego interfejsu API, takie jak rozwój, staging lub produkcja. Możesz używać etapów do zarządzania i wdrażania wielu wersji twojego interfejsu jednocześnie, umożliwiając testowanie nowych funkcji lub poprawek błędów bez wpływu na środowisko produkcyjne. Etapy obsługują również zmienne etapu, które są parami klucz-wartość, które można użyć do konfigurowania zachowania twojego interfejsu API na podstawie bieżącego etapu. Na przykład można użyć zmiennych etapu do kierowania żądań interfejsu API do różnych funkcji Lambda lub innych usług backendowych w zależności od etapu.
Etap jest wskazany na początku adresu URL punktu końcowego bramki API.
Autoryzatory: Autoryzatory w bramce API są odpowiedzialne za kontrolę dostępu do twojego interfejsu API poprzez weryfikację tożsamości osoby dzwoniącej przed zezwoleniem na kontynuację żądania. Możesz używać funkcji AWS Lambda jako autoryzatorów niestandardowych, co pozwala ci zaimplementować własną logikę uwierzytelniania i autoryzacji. Gdy wpłynie żądanie, bramka API przekazuje token autoryzacji żądania do autoryzatora Lambda, który przetwarza token i zwraca politykę IAM, która określa, jakie działania osoba dzwoniąca ma zezwolenie wykonać. Bramka API obsługuje również wbudowane autoryzatory, takie jak AWS Identity and Access Management (IAM) i Amazon Cognito.
Polityka zasobu: Polityka zasobu w bramce API to dokument JSON, który definiuje uprawnienia dostępu do twojego interfejsu API. Jest podobna do polityki IAM, ale specjalnie dostosowana do bramki API. Możesz użyć polityki zasobu do kontrolowania, kto może uzyskać dostęp do twojego interfejsu API, jakie metody mogą wywołać i z jakich adresów IP lub VPC mogą się połączyć. Polityki zasobów można używać w połączeniu z autoryzatorami, aby zapewnić precyzyjną kontrolę dostępu do twojego interfejsu API.
Aby zastosować zmiany, API musi zostać ponownie wdrożone po zmodyfikowaniu polityki zasobu.
Logowanie
Domyślnie dzienniki CloudWatch są wyłączone, Logowanie dostępu jest wyłączone, a śledzenie X-Ray również jest wyłączone.
Wymienianie
Zauważ, że w obu interfejsach API AWS do wymieniania zasobów (apigateway
i apigatewayv2
) jedyną wymaganą uprawnieniem i jedynym uprawnieniem do odczytu, które można udzielić, jest apigateway:GET
, dzięki czemu można wymieniać wszystko.
Enumerating API Gateway v2
List APIs
To list all APIs in the account, you can use the getApis
method. This will return a list of APIs along with their details.
Get API details
To get details about a specific API, you can use the getApi
method with the API ID as a parameter.
List API mappings
To list all API mappings for a specific API, you can use the getApiMappings
method with the API ID as a parameter.
Get API mapping details
To get details about a specific API mapping, you can use the getApiMapping
method with the API mapping ID as a parameter.
Różne uprawnienia dostępu do punktów końcowych bramy API
Polityka zasobów
Możliwe jest użycie polityk zasobów do określenia, kto może wywołać punkty końcowe API.
W poniższym przykładzie można zobaczyć, że wskazany adres IP nie może wywołać punktu końcowego /resource_policy
za pomocą metody GET.
Autoryzator IAM
Możliwe jest ustawienie, że metody wewnątrz ścieżki (zasobu) wymagają uwierzytelnienia IAM, aby je wywołać.
Gdy to jest ustawione, otrzymasz błąd {"message":"Brak tokenu uwierzytelniającego"}
gdy spróbujesz dotrzeć do punktu końcowego bez żadnej autoryzacji.
Łatwym sposobem na wygenerowanie oczekiwanego tokenu przez aplikację jest użycie typu Authorization
Podpis AWS
w Postmanie.
Ustaw dostęp do klucza i klucza prywatnego konta, którego chcesz użyć, i możesz uwierzytelniać się przeciwko punktowi końcowemu API.
Wygeneruje to nagłówek Authorization tak jak:
Zauważ, że w innych przypadkach Autoryzator mógł zostać źle zakodowany i wysłanie czegokolwiek w nagłówku Autoryzacji pozwoli na zobaczenie ukrytej zawartości.
Podpisywanie żądania za pomocą Pythona
Niestandardowy autoryzator Lambda
Istnieje możliwość użycia funkcji lambda, która na podstawie określonego tokena zwróci politykę IAM, wskazującą, czy użytkownik jest uprawniony do wywołania punktu końcowego API. Można ustawić każdą metodę zasobu, która będzie korzystać z autoryzatora.
Last updated