AWS - Step Functions Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AWS Step Functions to usługa przepływu pracy, która umożliwia koordynację i orkiestrację wielu usług AWS w bezserwerowych przepływach pracy. Korzystając z AWS Step Functions, możesz projektować i uruchamiać przepływy pracy, które łączą różne usługi AWS, takie jak AWS Lambda, Amazon S3, Amazon DynamoDB i wiele innych, w sekwencji kroków. Ta usługa orkiestracji oferuje wizualny interfejs przepływu pracy i zapewnia możliwości maszyny stanów, umożliwiając definiowanie każdego kroku przepływu pracy w sposób deklaratywny przy użyciu opartego na JSON Amazon States Language (ASL).
AWS Step Functions oferuje dwa typy przepływów pracy maszyny stanów: Standard i Express.
Standard Workflow: Ten domyślny typ przepływu pracy jest zaprojektowany dla długoterminowych, trwałych i audytowalnych procesów. Obsługuje wykonanie dokładnie raz, zapewniając, że zadania są uruchamiane tylko raz, chyba że określono ponowne próby. Jest idealny dla przepływów pracy wymagających szczegółowej historii wykonania i może działać przez okres do jednego roku.
Express Workflow: Ten typ jest idealny dla zadań o dużej objętości i krótkim czasie trwania, działających do pięciu minut. Obsługują wykonanie przynajmniej raz, odpowiednie dla zadań idempotentnych, takich jak przetwarzanie danych. Te przepływy pracy są zoptymalizowane pod kątem kosztów i wydajności, naliczając opłaty na podstawie wykonania, czasu trwania i użycia pamięci.
Stany są podstawowymi jednostkami maszyn stanów. Definiują poszczególne kroki w przepływie pracy, mogąc wykonywać różnorodne funkcje w zależności od ich typu:
Task: Wykonuje zadanie, często korzystając z usługi AWS, takiej jak Lambda.
Choice: Podejmuje decyzje na podstawie wejścia.
Fail/Succeed: Kończy wykonanie z niepowodzeniem lub sukcesem.
Pass: Przekazuje dane wejściowe do wyjścia lub wstrzykuje dane.
Wait: Opóźnia wykonanie na określony czas.
Parallel: Inicjuje równoległe gałęzie.
Map: Dynamicznie iteruje kroki nad elementami.
Stan Task reprezentuje pojedynczą jednostkę pracy wykonywaną przez maszynę stanów. Zadania mogą wywoływać różne zasoby, w tym aktywności, funkcje Lambda, usługi AWS lub interfejsy API stron trzecich.
Activities: Niestandardowi pracownicy, którymi zarządzasz, odpowiedni dla długoterminowych procesów.
Zasób: arn:aws:states:region:account:activity:name
.
Lambda Functions: Wykonuje funkcje AWS Lambda.
Zasób: arn:aws:lambda:region:account:function:function-name
.
AWS Services: Integruje się bezpośrednio z innymi usługami AWS, takimi jak DynamoDB lub S3.
Zasób: arn:partition:states:region:account:servicename:APIname
.
HTTP Task: Wywołuje interfejsy API stron trzecich.
Pole zasobu: arn:aws:states:::http:invoke
. Następnie należy podać szczegóły konfiguracji punktu końcowego API, takie jak adres URL API, metoda i szczegóły uwierzytelnienia.
Poniższy przykład pokazuje definicję stanu Task, który wywołuje funkcję Lambda o nazwie HelloWorld:
Stan Choice dodaje logikę warunkową do przepływu pracy, umożliwiając podejmowanie decyzji na podstawie danych wejściowych. Ocenia określone warunki i przechodzi do odpowiedniego stanu na podstawie wyników.
Porównanie: Każda reguła wyboru zawiera operator porównania (np. NumericEquals
, StringEquals
), który porównuje zmienną wejściową z określoną wartością lub inną zmienną.
Pole Next: Stany wyboru nie obsługują pola End
, zamiast tego definiują stan Next
, do którego należy przejść, jeśli porównanie jest prawdziwe.
Przykład stanu Choice:
Stan Fail
zatrzymuje wykonanie maszyny stanów i oznacza ją jako niepowodzenie. Służy do określenia nazwy błędu i przyczyny, dostarczając szczegóły dotyczące niepowodzenia. Ten stan jest terminalny, co oznacza, że kończy przepływ wykonania.
Stan Succeed
zatrzymuje wykonanie pomyślnie. Zwykle jest używany do zakończenia przepływu pracy, gdy zakończy się pomyślnie. Ten stan nie wymaga pola Next
.
Stan Pass przekazuje swoje dane wejściowe do wyjścia, albo bez wykonywania jakiejkolwiek pracy, albo przekształcając dane wejściowe JSON za pomocą filtrów, a następnie przekazując przekształcone dane do następnego stanu. Jest przydatny do testowania i konstruowania maszyn stanowych, umożliwiając wstrzykiwanie statycznych danych lub ich przekształcanie.
Stan Wait opóźnia wykonanie maszyny stanów na określony czas. Istnieją trzy główne metody konfigurowania czasu oczekiwania:
X Sekund: Stała liczba sekund do oczekiwania.
Absolutny znacznik czasu: Dokładny czas, do którego należy czekać.
Dynamiczne oczekiwanie: Oparte na danych wejściowych przy użyciu SecondsPath
lub TimestampPath
.
Stan Parallel pozwala na jednoczesne wykonywanie wielu gałęzi zadań w ramach twojego przepływu pracy. Każda gałąź działa niezależnie i przetwarza swoją własną sekwencję stanów. Wykonanie czeka, aż wszystkie gałęzie zakończą się, zanim przejdzie do następnego stanu. Jego kluczowe pola to:
Branches: Tablica definiująca równoległe ścieżki wykonania. Każda gałąź to osobna maszyna stanów.
ResultPath: Definiuje, gdzie (w danych wejściowych) umieścić połączony wynik gałęzi.
Retry and Catch: Konfiguracje obsługi błędów dla stanu równoległego.
Stan Map umożliwia wykonanie zestawu kroków dla każdego elementu w zbiorze danych. Jest używany do równoległego przetwarzania danych. W zależności od tego, jak chcesz przetwarzać elementy zbioru danych, Step Functions oferuje następujące tryby:
Tryb Inline: Wykonuje podzbiór stanów dla każdego elementu tablicy JSON. Odpowiedni dla małych zadań z mniej niż 40 równoległymi iteracjami, uruchamiając każdy z nich w kontekście przepływu pracy, który zawiera stan Map
.
Tryb Rozproszony: Zaprojektowany do przetwarzania równoległego na dużą skalę z wysoką współbieżnością. Obsługuje przetwarzanie dużych zbiorów danych, takich jak te przechowywane w Amazon S3, umożliwiając wysoką współbieżność do 10 000 równoległych wykonania dziecięcych przepływów pracy, uruchamiając te dzieci jako osobne wykonania.
Step Functions umożliwia również zarządzanie wdrożeniami przepływów pracy za pomocą wersji i aliasów maszyn stanów. Wersja reprezentuje migawkę maszyny stanów, która może być wykonana. Aliasy służą jako wskaźniki do maksymalnie dwóch wersji maszyny stanów.
Wersje: Te niezmienne migawki maszyny stanów są tworzone z najnowszej rewizji tej maszyny stanów. Każda wersja jest identyfikowana przez unikalny ARN, który łączy ARN maszyny stanów z numerem wersji, oddzielonym dwukropkiem (arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number
). Wersje nie mogą być edytowane, ale możesz zaktualizować maszynę stanów i opublikować nową wersję lub użyć pożądanej wersji maszyny stanów.
Aliasy: Te wskaźniki mogą odnosić się do maksymalnie dwóch wersji tej samej maszyny stanów. Można utworzyć wiele aliasów dla jednej maszyny stanów, z których każdy jest identyfikowany przez unikalny ARN skonstruowany przez połączenie ARN maszyny stanów z nazwą aliasu, oddzielonym dwukropkiem (arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName
). Aliasy umożliwiają kierowanie ruchu między jedną z dwóch wersji maszyny stanów. Alternatywnie, alias może wskazywać na jedną konkretną wersję maszyny stanów, ale nie na inne aliasy. Mogą być aktualizowane, aby przekierować do innej wersji maszyny stanów w razie potrzeby, ułatwiając kontrolowane wdrożenia i zarządzanie przepływem pracy.
Aby uzyskać bardziej szczegółowe informacje na temat ASL, sprawdź: Amazon States Language.
AWS Step Functions wykorzystuje role AWS Identity and Access Management (IAM) do kontrolowania dostępu do zasobów i działań w ramach maszyn stanów. Oto kluczowe aspekty związane z bezpieczeństwem i rolami IAM w AWS Step Functions:
Rola Wykonawcza: Każda maszyna stanów w AWS Step Functions jest powiązana z rolą wykonawczą IAM. Ta rola definiuje, jakie działania maszyna stanów może wykonywać w Twoim imieniu. Gdy maszyna stanów przechodzi między stanami, które wchodzą w interakcję z usługami AWS (takimi jak wywoływanie funkcji Lambda, dostęp do DynamoDB itp.), przyjmuje tę rolę wykonawczą, aby wykonać te działania.
Uprawnienia: Rola wykonawcza IAM musi być skonfigurowana z uprawnieniami, które pozwalają na niezbędne działania w innych usługach AWS. Na przykład, jeśli Twoja maszyna stanów musi wywołać funkcje AWS Lambda, rola IAM musi mieć uprawnienia lambda:InvokeFunction
. Podobnie, jeśli musi zapisać do DynamoDB, odpowiednie uprawnienia (dynamodb:PutItem
, dynamodb:UpdateItem
, itp.) muszą być przyznane.
Polityka ReadOnlyAccess jest wystarczająca dla wszystkich poniższych działań enumeracyjnych.
Na poniższej stronie możesz sprawdzić, jak nadużyć uprawnień Step Functions, aby eskalować uprawnienia:
AWS - Step Functions PrivescUcz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)