AWS - Step Functions Enum
Step Functions
AWS Step Functions рдПрдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрдИ AWS рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕рд░реНрд╡рд░рд▓реЗрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рд╕рдордиреНрд╡рдпрд┐рдд рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред AWS Step Functions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди AWS рд╕реЗрд╡рд╛рдУрдВ рдЬреИрд╕реЗ AWS Lambda, Amazon S3, Amazon DynamoDB, рдФрд░ рдХрдИ рдЕрдиреНрдп рдХреЛ рдПрдХ рдХреНрд░рдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕реЗрд╡рд╛ рдПрдХ рджреГрд╢реНрдп рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдФрд░ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХреНрд╖рдорддрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк JSON-рдЖрдзрд╛рд░рд┐рдд Amazon States Language (ASL) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Key concepts
Standard vs. Express Workflows
AWS Step Functions рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: Standard рдФрд░ Expressред
Standard Workflow: рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкреНрд░рдХрд╛рд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА, рдЯрд┐рдХрд╛рдК, рдФрд░ рдСрдбрд┐рдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ exactly-once execution рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЪрд▓рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХрд┐рдП рдЬрд╛рдПрдВред рдпрд╣ рдЙрди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд╖реНрдкрд╛рджрди рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рд╡рд░реНрд╖ рддрдХ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред
Express Workflow: рдпрд╣ рдкреНрд░рдХрд╛рд░ рдЙрдЪреНрдЪ рдорд╛рддреНрд░рд╛, рдЫреЛрдЯреЗ рд╕рдордпрд╛рд╡рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИ, рдЬреЛ рдкрд╛рдВрдЪ рдорд┐рдирдЯ рддрдХ рдЪрд▓рддреЗ рд╣реИрдВред рд╡реЗ at-least-once execution рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреИрд╕реЗ idempotent рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдпреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд▓рд╛рдЧрдд рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдирд┐рд╖реНрдкрд╛рджрди, рдЕрд╡рдзрд┐, рдФрд░ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрд╛рд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред
States
States рд╕реНрдЯреЗрдЯ рдорд╢реАрдиреЛрдВ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВред рд╡реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рднреАрддрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЪрд░рдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Task: рдПрдХ рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдХреНрд╕рд░ AWS рд╕реЗрд╡рд╛ рдЬреИрд╕реЗ Lambda рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред
Choice: рдЗрдирдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИред
Fail/Succeed: рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдпрд╛ рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
Pass: рдЗрдирдкреБрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдбреЗрдЯрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред
Wait: рд╕реЗрдЯ рд╕рдордп рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХрд░рддрд╛ рд╣реИред
Parallel: рд╕рдорд╛рдирд╛рдВрддрд░ рд╢рд╛рдЦрд╛рдПрдБ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред
Map: рдЖрдЗрдЯрдо рдкрд░ рдЪрд░рдгреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред
Task
рдПрдХ Task рд╕реНрдЯреЗрдЯ рдПрдХ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдп рдХреА рдПрдХрд▓ рдЗрдХрд╛рдИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ, Lambda рдлрд╝рдВрдХреНрд╢рди, AWS рд╕реЗрд╡рд╛рдПрдБ, рдпрд╛ рддреГрддреАрдп-рдкрдХреНрд╖ APIs рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
Activities: рдХрд╕реНрдЯрдо рд╢реНрд░рдорд┐рдХ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрддред
Resource:
arn:aws:states:region:account:activity:name
.Lambda Functions: AWS Lambda рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
Resource:
arn:aws:lambda:region:account:function:function-name
.AWS Services: рдЕрдиреНрдп AWS рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ DynamoDB рдпрд╛ S3ред
Resource:
arn:partition:states:region:account:servicename:APIname
.HTTP Task: рддреГрддреАрдп-рдкрдХреНрд╖ APIs рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
Resource field:
arn:aws:states:::http:invoke
. рдлрд┐рд░, рдЖрдкрдХреЛ API рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ API URL, рд╡рд┐рдзрд┐, рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рд╡рд░рдгред
The following example shows a Task state definition that invokes a Lambda function called HelloWorld:
Choice
A Choice state adds conditional logic to a workflow, enabling decisions based on input data. It evaluates the specified conditions and transitions to the corresponding state based on the results.
Comparison: Each choice rule includes a comparison operator (e.g.,
NumericEquals
,StringEquals
) that compares an input variable to a specified value or another variable.Next Field: Choice states don't support the
End
field, instead, they define theNext
state to transition to if the comparison is true.
Example of Choice state:
Fail/Succeed
A Fail
state stops the execution of a state machine and marks it as a failure. It is used to specify an error name and a cause, providing details about the failure. This state is terminal, meaning it ends the execution flow.
A Succeed
state stops the execution successfully. It is typically used to terminate the workflow when it completes successfully. This state does not require a Next
field.
Pass
рдПрдХ Pass рд╕реНрдерд┐рддрд┐ рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЕрдкрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдмрд┐рдирд╛ рдХреЛрдИ рдХрд╛рд░реНрдп рдХрд┐рдП рдпрд╛ JSON рд╕реНрдерд┐рддрд┐ рдЗрдирдкреБрдЯ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдкрд╛рд╕ рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдЕрдЧрд▓реЗ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреА рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕реНрдерд┐рддрд┐ рдорд╢реАрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Wait
A Wait state delays the execution of the state machine for a specified duration. There are three primary methods to configure the wait time:
X Seconds: рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реЗрдХрдВрдбред
Absolute Timestamp: рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдЯреАрдХ рд╕рдордпред
Dynamic Wait: рдЗрдирдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░
SecondsPath
рдпрд╛TimestampPath
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
Parallel
A Parallel state allows you to execute multiple branches of tasks concurrently within your workflow. Each branch runs independently and processes its own sequence of states. The execution waits until all branches complete before proceeding to the next state. Its key fields are:
Branches: рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкрдереЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдРрд░реЗред рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдПрдХ рдЕрд▓рдЧ рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реИред
ResultPath: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ (рдЗрдирдкреБрдЯ рдореЗрдВ) рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рдВрдпреБрдХреНрдд рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХрд╣рд╛рдБ рд░рдЦрд╛ рдЬрд╛рдПред
Retry and Catch: рд╕рдорд╛рдирд╛рдВрддрд░ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред
Map
A Map state enables the execution of a set of steps for each item in an dataset. It's used for parallel processing of data. Depending on how you want to process the items of the dataset, Step Functions provides the following modes:
Inline Mode: Executes a subset of states for each JSON array item. Suitable for small-scale tasks with less than 40 parallel iterations, running each of them in the context of the workflow that contains the
Map
state.
Distributed Mode: Designed for large-scale parallel processing with high concurrency. Supports processing large datasets, such as those stored in Amazon S3, enabling a high concurrency of up 10,000 parallel child workflow executions, running these child as a separate child execution.
Versions and aliases
Step Functions also lets you manage workflow deployments through versions and aliases of state machines. A version represents a snapshot of a state machine that can be executed. Aliases serve as pointers to up to two versions of a state machine.
Versions: These immutable snapshots of a state machine are created from the most recent revision of that state machine. Each version is identified by a unique ARN that combines the state machine ARN with the version number, separated by a colon (
arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number
). Versions cannot be edited, but you can update the state machine and publish a new version, or use the desired state machine version.Aliases: These pointers can reference up to two versions of the same state machine. Multiple aliases can be created for a single state machine, each identified by a unique ARN constructed by combining the state machine ARN with the alias name, separated by a colon (
arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName
). Aliases enable routing of traffic between one of the two versions of a state machine. Alternatively, an alias can point to a single specific version of the state machine, but not to other aliases. They can be updated to redirect to a different version of the state machine as needed, facilitating controlled deployments and workflow management.
For more detailed information about ASL, check: Amazon States Language.
IAM Roles for State machines
AWS Step Functions utilizes AWS Identity and Access Management (IAM) roles to control access to resources and actions within state machines. Here are the key aspects related to security and IAM roles in AWS Step Functions:
Execution Role: Each state machine in AWS Step Functions is associated with an IAM execution role. This role defines what actions the state machine can perform on your behalf. When a state machine transitions between states that interact with AWS services (like invoking Lambda functions, accessing DynamoDB, etc.), it assumes this execution role to carry out those actions.
Permissions: The IAM execution role must be configured with permissions that allow the necessary actions on other AWS services. For example, if your state machine needs to invoke AWS Lambda functions, the IAM role must have
lambda:InvokeFunction
permissions. Similarly, if it needs to write to DynamoDB, appropriate permissions (dynamodb:PutItem
,dynamodb:UpdateItem
, etc.) must be granted.
Enumeration
ReadOnlyAccess рдиреАрддрд┐ рд╕рднреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд enumeration рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
Privesc
In the following page, you can check how to Step Functions рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛рдирд╛:
AWS - Step Functions PrivescPost Exploitation
AWS - Step Functions Post ExploitationPersistence
AWS - Step Functions PersistenceReferences
Last updated