AWS - Step Functions Enum
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AWS Step Functions ist ein Workflow-Dienst, der es Ihnen ermöglicht, mehrere AWS-Dienste in serverlosen Workflows zu koordinieren und zu orchestrieren. Mit AWS Step Functions können Sie Workflows entwerfen und ausführen, die verschiedene AWS-Dienste wie AWS Lambda, Amazon S3, Amazon DynamoDB und viele mehr in einer Abfolge von Schritten verbinden. Dieser Orchestrierungsdienst bietet eine visuelle Workflow-Oberfläche und bietet Zustandsmaschinen-Funktionen, die es Ihnen ermöglichen, jeden Schritt des Workflows in deklarativer Weise mit der JSON-basierten Amazon States Language (ASL) zu definieren.
AWS Step Functions bietet zwei Arten von Zustandsmaschinen-Workflows: Standard und Express.
Standard-Workflow: Dieser Standard-Workflow-Typ ist für langlaufende, langlebige und prüfbare Prozesse konzipiert. Er unterstützt exactly-once execution, was sicherstellt, dass Aufgaben nur einmal ausgeführt werden, es sei denn, Wiederholungen sind angegeben. Er ist ideal für Workflows, die eine detaillierte Ausführungshistorie benötigen, und kann bis zu einem Jahr laufen.
Express-Workflow: Dieser Typ ist ideal für hochvolumige, kurzzeitige Aufgaben, die bis zu fünf Minuten laufen. Sie unterstützen at-least-once execution, geeignet für idempotente Aufgaben wie Datenverarbeitung. Diese Workflows sind auf Kosten und Leistung optimiert und berechnen Gebühren basierend auf Ausführungen, Dauer und Speicherverbrauch.
Zustände sind die wesentlichen Einheiten von Zustandsmaschinen. Sie definieren die einzelnen Schritte innerhalb eines Workflows und können je nach Typ eine Vielzahl von Funktionen ausführen:
Aufgabe: Führt einen Job aus, oft unter Verwendung eines AWS-Dienstes wie Lambda.
Wahl: Trifft Entscheidungen basierend auf Eingaben.
Fehler/Erfolg: Beendet die Ausführung mit einem Fehler oder Erfolg.
Pass: Gibt Eingaben an Ausgaben weiter oder injiziert Daten.
Warten: Verzögert die Ausführung für eine festgelegte Zeit.
Parallel: Initiert parallele Zweige.
Karte: Iteriert dynamisch über Schritte über Elemente.
Ein Aufgaben-Zustand stellt eine einzelne Arbeitseinheit dar, die von einer Zustandsmaschine ausgeführt wird. Aufgaben können verschiedene Ressourcen aufrufen, einschließlich Aktivitäten, Lambda-Funktionen, AWS-Dienste oder Drittanbieter-APIs.
Aktivitäten: Benutzerdefinierte Arbeiter, die Sie verwalten, geeignet für langlaufende Prozesse.
Ressource: arn:aws:states:region:account:activity:name
.
Lambda-Funktionen: Führt AWS Lambda-Funktionen aus.
Ressource: arn:aws:lambda:region:account:function:function-name
.
AWS-Dienste: Integriert sich direkt mit anderen AWS-Diensten, wie DynamoDB oder S3.
Ressource: arn:partition:states:region:account:servicename:APIname
.
HTTP-Aufgabe: Ruft Drittanbieter-APIs auf.
Ressourcenfeld: arn:aws:states:::http:invoke
. Dann sollten Sie die Konfigurationsdetails des API-Endpunkts bereitstellen, wie die API-URL, Methode und Authentifizierungsdetails.
Das folgende Beispiel zeigt eine Aufgaben-Zustandsdefinition, die eine Lambda-Funktion namens HelloWorld aufruft:
Ein Choice-Zustand fügt einer Arbeitsablaufbedingung Logik hinzu, die Entscheidungen basierend auf Eingabedaten ermöglicht. Er bewertet die angegebenen Bedingungen und wechselt zum entsprechenden Zustand basierend auf den Ergebnissen.
Comparison: Jede Wahlregel enthält einen Vergleichsoperator (z. B. NumericEquals
, StringEquals
), der eine Eingabevariable mit einem angegebenen Wert oder einer anderen Variablen vergleicht.
Next Field: Choice-Zustände unterstützen nicht das End
-Feld, stattdessen definieren sie den Next
-Zustand, zu dem gewechselt wird, wenn der Vergleich wahr ist.
Beispiel für einen Choice-Zustand:
Ein Fail
-Zustand stoppt die Ausführung einer Zustandsmaschine und markiert sie als Fehler. Er wird verwendet, um einen Fehlernamen und eine Ursache anzugeben, die Details über den Fehler bereitstellen. Dieser Zustand ist terminal, was bedeutet, dass er den Ausführungsfluss beendet.
Ein Succeed
-Zustand stoppt die Ausführung erfolgreich. Er wird typischerweise verwendet, um den Workflow zu beenden, wenn er erfolgreich abgeschlossen ist. Dieser Zustand benötigt kein Next
-Feld.
Ein Pass-Zustand überträgt seine Eingabe an seine Ausgabe, entweder ohne Arbeit zu verrichten oder indem er die JSON-Zustandeingabe mithilfe von Filtern transformiert und dann die transformierten Daten an den nächsten Zustand übergibt. Es ist nützlich zum Testen und Konstruieren von Zustandsmaschinen, da es Ihnen ermöglicht, statische Daten einzufügen oder sie zu transformieren.
Ein Wait-Zustand verzögert die Ausführung der Zustandsmaschine für eine bestimmte Dauer. Es gibt drei Hauptmethoden, um die Wartezeit zu konfigurieren:
X Sekunden: Eine feste Anzahl von Sekunden zu warten.
Absolute Zeitstempel: Eine genaue Zeit, bis zu der gewartet werden soll.
Dynamisches Warten: Basierend auf Eingaben mit SecondsPath
oder TimestampPath
.
Ein Parallel-Zustand ermöglicht es Ihnen, mehrere Aufgabenäste gleichzeitig innerhalb Ihres Workflows auszuführen. Jeder Ast läuft unabhängig und verarbeitet seine eigene Sequenz von Zuständen. Die Ausführung wartet, bis alle Äste abgeschlossen sind, bevor sie zum nächsten Zustand übergeht. Die wichtigsten Felder sind:
Branches: Ein Array, das die parallelen Ausführungspfade definiert. Jeder Ast ist eine separate Zustandsmaschine.
ResultPath: Definiert, wo (in der Eingabe) die kombinierte Ausgabe der Äste platziert werden soll.
Retry und Catch: Fehlerbehandlungs-Konfigurationen für den parallelen Zustand.
Ein Map-Zustand ermöglicht die Ausführung einer Reihe von Schritten für jedes Element in einem Datensatz. Es wird für die parallele Verarbeitung von Daten verwendet. Je nachdem, wie Sie die Elemente des Datensatzes verarbeiten möchten, bietet Step Functions die folgenden Modi an:
Inline-Modus: Führt eine Teilmenge von Zuständen für jedes JSON-Array-Element aus. Geeignet für Aufgaben im kleinen Maßstab mit weniger als 40 parallelen Iterationen, die jeweils im Kontext des Workflows ausgeführt werden, der den Map
-Zustand enthält.
Verteilter Modus: Entwickelt für die parallele Verarbeitung im großen Maßstab mit hoher Parallelität. Unterstützt die Verarbeitung großer Datensätze, wie sie in Amazon S3 gespeichert sind, und ermöglicht eine hohe Parallelität von bis zu 10.000 parallelen Kind-Workflow-Ausführungen, die als separate Kind-Ausführung ausgeführt werden.
Step Functions ermöglicht es Ihnen auch, Workflow-Bereitstellungen durch Versionen und Aliase von Zustandsmaschinen zu verwalten. Eine Version stellt einen Snapshot einer Zustandsmaschine dar, die ausgeführt werden kann. Aliase dienen als Zeiger auf bis zu zwei Versionen einer Zustandsmaschine.
Versionen: Diese unveränderlichen Snapshots einer Zustandsmaschine werden aus der neuesten Revision dieser Zustandsmaschine erstellt. Jede Version wird durch eine eindeutige ARN identifiziert, die die ARN der Zustandsmaschine mit der Versionsnummer kombiniert, getrennt durch einen Doppelpunkt (arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number
). Versionen können nicht bearbeitet werden, aber Sie können die Zustandsmaschine aktualisieren und eine neue Version veröffentlichen oder die gewünschte Version der Zustandsmaschine verwenden.
Aliase: Diese Zeiger können auf bis zu zwei Versionen derselben Zustandsmaschine verweisen. Mehrere Aliase können für eine einzelne Zustandsmaschine erstellt werden, die jeweils durch eine eindeutige ARN identifiziert werden, die die ARN der Zustandsmaschine mit dem Aliasnamen kombiniert, getrennt durch einen Doppelpunkt (arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName
). Aliase ermöglichen das Routing des Datenverkehrs zwischen einer der beiden Versionen einer Zustandsmaschine. Alternativ kann ein Alias auf eine bestimmte Version der Zustandsmaschine verweisen, jedoch nicht auf andere Aliase. Sie können aktualisiert werden, um auf eine andere Version der Zustandsmaschine umzuleiten, wenn dies erforderlich ist, was kontrollierte Bereitstellungen und Workflow-Management erleichtert.
Für detailliertere Informationen über ASL siehe: Amazon States Language.
AWS Step Functions nutzt AWS Identity and Access Management (IAM)-Rollen, um den Zugriff auf Ressourcen und Aktionen innerhalb von Zustandsmaschinen zu steuern. Hier sind die wichtigsten Aspekte in Bezug auf Sicherheit und IAM-Rollen in AWS Step Functions:
Ausführungsrolle: Jede Zustandsmaschine in AWS Step Functions ist mit einer IAM-Ausführungsrolle verknüpft. Diese Rolle definiert, welche Aktionen die Zustandsmaschine in Ihrem Namen ausführen kann. Wenn eine Zustandsmaschine zwischen Zuständen wechselt, die mit AWS-Diensten interagieren (wie das Aufrufen von Lambda-Funktionen, den Zugriff auf DynamoDB usw.), übernimmt sie diese Ausführungsrolle, um diese Aktionen durchzuführen.
Berechtigungen: Die IAM-Ausführungsrolle muss mit Berechtigungen konfiguriert werden, die die erforderlichen Aktionen auf anderen AWS-Diensten zulassen. Wenn Ihre Zustandsmaschine beispielsweise AWS Lambda-Funktionen aufrufen muss, muss die IAM-Rolle über die Berechtigung lambda:InvokeFunction
verfügen. Ebenso müssen, wenn sie in DynamoDB schreiben muss, entsprechende Berechtigungen (dynamodb:PutItem
, dynamodb:UpdateItem
usw.) gewährt werden.
Die ReadOnlyAccess-Richtlinie reicht für alle folgenden Aufzählungsaktionen aus.
In der folgenden Seite können Sie überprüfen, wie Sie Step Functions-Berechtigungen missbrauchen können, um Privilegien zu eskalieren:
AWS - Step Functions PrivescLernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)