AWS - Step Functions Enum

Reading time: 13 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Step Functions

AWS Step Functions एक वर्कफ़्लो सेवा है जो आपको कई AWS सेवाओं को सर्वरलेस वर्कफ़्लो में समन्वयित और व्यवस्थित करने की अनुमति देती है। AWS Step Functions का उपयोग करके, आप विभिन्न AWS सेवाओं जैसे AWS Lambda, Amazon S3, Amazon DynamoDB, और कई अन्य को एक क्रम में जोड़ने वाले वर्कफ़्लो को डिज़ाइन और चलाने के लिए कर सकते हैं। यह ऑर्केस्ट्रेशन सेवा एक दृश्य वर्कफ़्लो इंटरफ़ेस प्रदान करती है और state machine क्षमताएँ प्रदान करती है, जिससे आप JSON-आधारित Amazon States Language (ASL) का उपयोग करके वर्कफ़्लो के प्रत्येक चरण को एक घोषणात्मक तरीके से परिभाषित कर सकते हैं।

Key concepts

Standard vs. Express Workflows

AWS Step Functions दो प्रकार के state machine workflows प्रदान करता है: Standard और Express।

  • Standard Workflow: यह डिफ़ॉल्ट वर्कफ़्लो प्रकार लंबे समय तक चलने वाली, टिकाऊ, और ऑडिट करने योग्य प्रक्रियाओं के लिए डिज़ाइन किया गया है। यह exactly-once execution का समर्थन करता है, यह सुनिश्चित करते हुए कि कार्य केवल एक बार चलते हैं जब तक कि पुनः प्रयास निर्दिष्ट न किए जाएं। यह उन वर्कफ़्लो के लिए आदर्श है जिन्हें विस्तृत निष्पादन इतिहास की आवश्यकता होती है और यह एक वर्ष तक चल सकता है।
  • Express Workflow: यह प्रकार उच्च मात्रा, छोटे समयावधि के कार्यों के लिए आदर्श है, जो पांच मिनट तक चलते हैं। वे at-least-once execution का समर्थन करते हैं, जो डेटा प्रोसेसिंग जैसे idempotent कार्यों के लिए उपयुक्त है। ये वर्कफ़्लो लागत और प्रदर्शन के लिए अनुकूलित होते हैं, निष्पादन, अवधि, और मेमोरी उपयोग के आधार पर चार्ज करते हैं।

States

States state machines के आवश्यक इकाइयाँ हैं। वे वर्कफ़्लो के भीतर व्यक्तिगत चरणों को परिभाषित करते हैं, जो इसके प्रकार के आधार पर विभिन्न कार्य कर सकते हैं:

  • Task: एक कार्य को निष्पादित करता है, अक्सर AWS सेवा जैसे Lambda का उपयोग करते हुए।
  • Choice: इनपुट के आधार पर निर्णय लेता है।
  • Fail/Succeed: निष्पादन को विफलता या सफलता के साथ समाप्त करता है।
  • Pass: इनपुट को आउटपुट में पास करता है या डेटा इंजेक्ट करता है।
  • Wait: सेट समय के लिए निष्पादन में देरी करता है।
  • Parallel: समानांतर शाखाएँ आरंभ करता है।
  • Map: आइटम पर चरणों को गतिशील रूप से दोहराता है।

Task

एक Task state एक state machine द्वारा निष्पादित कार्य की एकल इकाई का प्रतिनिधित्व करता है। कार्य विभिन्न संसाधनों को आमंत्रित कर सकते हैं, जिसमें गतिविधियाँ, 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, विधि, और प्रमाणीकरण विवरण।

निम्नलिखित उदाहरण एक Task state परिभाषा को दर्शाता है जो HelloWorld नामक Lambda फ़ंक्शन को आमंत्रित करता है:

json
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:<region>:<account-id>:function:HelloWorld"
},
"End": true
}

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: प्रत्येक चयन नियम में एक तुलना ऑपरेटर शामिल होता है (जैसे, NumericEquals, StringEquals) जो एक इनपुट वेरिएबल की तुलना एक निर्दिष्ट मान या दूसरे वेरिएबल से करता है।
  • Next Field: Choice states End फ़ील्ड का समर्थन नहीं करते हैं, इसके बजाय, वे उस Next राज्य को परिभाषित करते हैं जिसमें संक्रमण करना है यदि तुलना सत्य है।

Example of Choice state:

json
{
"Variable": "$.timeStamp",
"TimestampEquals": "2000-01-01T00:00:00Z",
"Next": "TimeState"
}

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.

json
"FailState": {
"Type": "Fail",
"Error": "ErrorName",
"Cause": "Error details"
}

Pass

एक Pass स्थिति अपने इनपुट को बिना कोई कार्य किए या JSON स्थिति इनपुट को फ़िल्टर का उपयोग करके परिवर्तित किए बिना अपने आउटपुट में पास करती है, और फिर परिवर्तित डेटा को अगली स्थिति में पास करती है। यह परीक्षण और स्थिति मशीनों का निर्माण करने के लिए उपयोगी है, जिससे आप स्थिर डेटा को इंजेक्ट या परिवर्तित कर सकते हैं।

json
"PassState": {
"Type": "Pass",
"Result": {"key": "value"},
"ResultPath": "$.newField",
"Next": "NextState"
}

Wait

A Wait state निर्दिष्ट अवधि के लिए राज्य मशीन के निष्पादन में देरी करता है। प्रतीक्षा समय को कॉन्फ़िगर करने के लिए तीन प्राथमिक विधियाँ हैं:

  • X Seconds: प्रतीक्षा करने के लिए निश्चित संख्या में सेकंड।
json
"WaitState": {
"Type": "Wait",
"Seconds": 10,
"Next": "NextState"
}
  • Absolute Timestamp: प्रतीक्षा करने के लिए एक सटीक समय।
json
"WaitState": {
"Type": "Wait",
"Timestamp": "2024-03-14T01:59:00Z",
"Next": "NextState"
}
  • Dynamic Wait: इनपुट के आधार पर SecondsPath या TimestampPath का उपयोग करके।
json
jsonCopiar código
"WaitState": {
"Type": "Wait",
"TimestampPath": "$.expirydate",
"Next": "NextState"
}

Parallel

A Parallel state आपको अपने कार्यप्रवाह के भीतर एक साथ कई कार्यों की शाखाओं को निष्पादित करने की अनुमति देता है। प्रत्येक शाखा स्वतंत्र रूप से चलती है और अपने स्वयं के राज्यों के अनुक्रम को संसाधित करती है। निष्पादन तब तक प्रतीक्षा करता है जब तक सभी शाखाएँ पूर्ण नहीं हो जातीं, फिर अगले राज्य पर आगे बढ़ता है। इसके प्रमुख क्षेत्र हैं:

  • Branches: समानांतर निष्पादन पथों को परिभाषित करने वाला एक ऐरे। प्रत्येक शाखा एक अलग राज्य मशीन है।
  • ResultPath: परिभाषित करता है कि (इनपुट में) शाखाओं के संयुक्त आउटपुट को कहाँ रखा जाए।
  • Retry and Catch: समानांतर राज्य के लिए त्रुटि प्रबंधन कॉन्फ़िगरेशन।
json
"ParallelState": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Task1",
"States": { ... }
},
{
"StartAt": "Task2",
"States": { ... }
}
],
"Next": "NextState"
}

Map

A Map state प्रत्येक आइटम के लिए एक सेट स्टेप्स को निष्पादित करने की अनुमति देता है। इसका उपयोग डेटा के समानांतर प्रसंस्करण के लिए किया जाता है। आप डेटा सेट के आइटम को कैसे संसाधित करना चाहते हैं, इस पर निर्भर करते हुए, Step Functions निम्नलिखित मोड प्रदान करता है:

  • Inline Mode: प्रत्येक JSON एरे आइटम के लिए राज्यों के एक उपसमुच्चय को निष्पादित करता है। छोटे पैमाने के कार्यों के लिए उपयुक्त है जिनमें 40 से कम समानांतर पुनरावृत्तियाँ हैं, प्रत्येक को उस कार्यप्रवाह के संदर्भ में चलाते हैं जिसमें Map राज्य होता है।
json
"MapState": {
"Type": "Map",
"ItemsPath": "$.arrayItems",
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "INLINE"
},
"StartAt": "AddState",
"States": {
"AddState": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "arn:aws:lambda:<region>:<account-id>:function:add-function"
},
"End": true
}
}
},
"End": true
"ResultPath": "$.detail.added",
"ItemsPath": "$.added"
}
  • Distributed Mode: उच्च समवर्तीता के साथ बड़े पैमाने पर समानांतर प्रसंस्करण के लिए डिज़ाइन किया गया है। यह बड़े डेटा सेट्स को संसाधित करने का समर्थन करता है, जैसे कि Amazon S3 में संग्रहीत डेटा, 10,000 समानांतर बाल कार्यप्रवाह निष्पादन की उच्च समवर्तीता की अनुमति देता है, इन बच्चों को एक अलग बाल निष्पादन के रूप में चलाते हैं।
json
"DistributedMapState": {
"Type": "Map",
"ItemReader": {
"Resource": "arn:aws:states:::s3:getObject",
"Parameters": {
"Bucket": "my-bucket",
"Key": "data.csv"
}
},
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "DISTRIBUTED",
"ExecutionType": "EXPRESS"
},
"StartAt": "ProcessItem",
"States": {
"ProcessItem": {
"Type": "Task",
"Resource": "arn:aws:lambda:region:account-id:function:my-function",
"End": true
}
}
},
"End": true
"ResultWriter": {
"Resource": "arn:aws:states:::s3:putObject",
"Parameters": {
"Bucket": "myOutputBucket",
"Prefix": "csvProcessJobs"
}
}
}

Versions and aliases

Step Functions आपको versions और aliases के माध्यम से कार्यप्रवाह तैनाती को प्रबंधित करने की भी अनुमति देता है। एक संस्करण एक राज्य मशीन का स्नैपशॉट दर्शाता है जिसे निष्पादित किया जा सकता है। उपनाम एक राज्य मशीन के दो संस्करणों की ओर संकेत करते हैं।

  • Versions: ये राज्य मशीन के सबसे हाल के संशोधन से बनाए गए अपरिवर्तनीय स्नैपशॉट हैं। प्रत्येक संस्करण को एक अद्वितीय ARN द्वारा पहचाना जाता है जो राज्य मशीन ARN को संस्करण संख्या के साथ जोड़ता है, जिसे एक कोलन द्वारा अलग किया जाता है (arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number)। संस्करणों को संपादित नहीं किया जा सकता है, लेकिन आप राज्य मशीन को अपडेट कर सकते हैं और एक नया संस्करण प्रकाशित कर सकते हैं, या इच्छित राज्य मशीन संस्करण का उपयोग कर सकते हैं।
  • Aliases: ये संकेतक एक ही राज्य मशीन के दो संस्करणों की ओर संदर्भित कर सकते हैं। एकल राज्य मशीन के लिए कई उपनाम बनाए जा सकते हैं, प्रत्येक को एक अद्वितीय ARN द्वारा पहचाना जाता है जो राज्य मशीन ARN को उपनाम नाम के साथ जोड़ता है, जिसे एक कोलन द्वारा अलग किया जाता है (arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName)। उपनाम एक राज्य मशीन के दो संस्करणों के बीच ट्रैफ़िक को रूट करने की अनुमति देते हैं। वैकल्पिक रूप से, एक उपनाम एक राज्य मशीन के एक विशिष्ट संस्करण की ओर इशारा कर सकता है, लेकिन अन्य उपनामों की ओर नहीं। इन्हें आवश्यकतानुसार राज्य मशीन के एक अलग संस्करण की ओर पुनर्निर्देशित करने के लिए अपडेट किया जा सकता है, जिससे नियंत्रित तैनाती और कार्यप्रवाह प्रबंधन को सुविधाजनक बनाया जा सके।

ASL के बारे में अधिक विस्तृत जानकारी के लिए, देखें: Amazon States Language

IAM Roles for State machines

AWS Step Functions संसाधनों और कार्यों तक पहुँच को नियंत्रित करने के लिए AWS पहचान और पहुँच प्रबंधन (IAM) भूमिकाओं का उपयोग करता है। AWS Step Functions में सुरक्षा और IAM भूमिकाओं से संबंधित प्रमुख पहलू यहाँ हैं:

  • Execution Role: AWS Step Functions में प्रत्येक राज्य मशीन एक IAM निष्पादन भूमिका से जुड़ी होती है। यह भूमिका परिभाषित करती है कि राज्य मशीन आपके पक्ष में कौन से कार्य कर सकती है। जब एक राज्य मशीन उन राज्यों के बीच संक्रमण करती है जो AWS सेवाओं के साथ इंटरैक्ट करते हैं (जैसे Lambda कार्यों को कॉल करना, DynamoDB तक पहुँचना, आदि), तो यह उन कार्यों को करने के लिए इस निष्पादन भूमिका को ग्रहण करती है।
  • Permissions: IAM निष्पादन भूमिका को अन्य AWS सेवाओं पर आवश्यक कार्यों की अनुमति देने के लिए कॉन्फ़िगर किया जाना चाहिए। उदाहरण के लिए, यदि आपकी राज्य मशीन को AWS Lambda कार्यों को कॉल करने की आवश्यकता है, तो IAM भूमिका को lambda:InvokeFunction अनुमतियाँ होनी चाहिए। इसी तरह, यदि इसे DynamoDB में लिखने की आवश्यकता है, तो उचित अनुमतियाँ (dynamodb:PutItem, dynamodb:UpdateItem, आदि) दी जानी चाहिए।

Enumeration

ReadOnlyAccess नीति सभी निम्नलिखित गणना क्रियाओं के लिए पर्याप्त है।

bash
# State machines #

## List state machines
aws stepfunctions list-state-machines
## Retrieve informatio about the specified state machine
aws stepfunctions describe-state-machine --state-machine-arn <value>

## List versions for the specified state machine
aws stepfunctions list-state-machine-versions --state-machine-arn <value>
## List aliases for the specified state machine
aws stepfunctions list-state-machine-aliases --state-machine-arn <value>
## Retrieve information about the specified state machine alias
aws stepfunctions describe-state-machine-alias --state-machine-alias-arn <value>

## List executions of a state machine
aws stepfunctions list-executions --state-machine-arn <value> [--status-filter <RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE>] [--redrive-filter <REDRIVEN | NOT_REDRIVEN>]
## Retrieve information and relevant metadata about a state machine execution (output included)
aws stepfunctions describe-execution --execution-arn <value>
## Retrieve information about the state machine associated to the specified execution
aws stepfunctions describe-state-machine-for-execution --execution-arn <value>
## Retrieve the history of the specified execution as a list of events
aws stepfunctions get-execution-history --execution-arn <value> [--reverse-order | --no-reverse-order] [--include-execution-data | --no-include-execution-data]

## List tags for the specified step Functions resource
aws stepfunctions list-tags-for-resource --resource-arn <value>

## Validate the definition of a state machine without creating the resource
aws stepfunctions validate-state-machine-definition --definition <value> [--type <STANDARD | EXPRESS>]

# Activities #

## List existing activities
aws stepfunctions list-activities
## Retrieve information about the specified activity
aws stepfunctions describe-activity --activity-arn <value>

# Map Runs #

## List map runs of an execution
aws stepfunctions list-map-runs --execution-arn <value>
## Provide information about the configuration, progress and results of a Map Run
aws stepfunctions describe-map-run --map-run-arn <value>
## Lists executions of a Map Run
aws stepfunctions list-executions --map-run-arn <value> [--status-filter <RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE>] [--redrive-filter <REDRIVEN | NOT_REDRIVEN>]

प्रिवेस्क

In the following page, you can check how to abuse Step Functions permissions to escalate privileges:

AWS - Step Functions Privesc

पोस्ट एक्सप्लोइटेशन

AWS - Step Functions Post Exploitation

पर्सिस्टेंस

AWS - Step Functions Persistence

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें