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は、複数のAWSサービスをサーバーレスワークフローに調整および編成するためのワークフローサービスです。AWS Step Functionsを使用することで、AWS Lambda、Amazon S3、Amazon DynamoDBなどのさまざまなAWSサービスを接続するワークフローを設計および実行できます。このオーケストレーションサービスは、視覚的なワークフローインターフェースを提供し、状態マシン機能を提供します。これにより、JSONベースのAmazon States Language(ASL)を使用して、ワークフローの各ステップを宣言的に定義できます。
AWS Step Functionsは、2種類の状態マシンワークフローを提供します:StandardとExpress。
Standard Workflow: このデフォルトのワークフロータイプは、長時間実行される耐久性のある監査可能なプロセス向けに設計されています。正確に1回の実行をサポートし、リトライが指定されない限り、タスクは1回だけ実行されます。詳細な実行履歴が必要なワークフローに最適で、最大1年間実行できます。
Express Workflow: このタイプは、高ボリュームの短期間のタスクに最適で、最大5分間実行されます。少なくとも1回の実行をサポートし、データ処理のような冪等性のあるタスクに適しています。これらのワークフローは、コストとパフォーマンスの最適化が行われており、実行、期間、メモリ使用量に基づいて課金されます。
状態は、状態マシンの基本単位です。ワークフロー内の個々のステップを定義し、そのタイプに応じてさまざまな機能を実行できます:
Task: ジョブを実行し、通常はLambdaのようなAWSサービスを使用します。
Choice: 入力に基づいて決定を下します。
Fail/Succeed: 実行を失敗または成功で終了します。
Pass: 入力を出力に渡すか、データを注入します。
Wait: 設定された時間だけ実行を遅延させます。
Parallel: 並列ブランチを開始します。
Map: アイテムに対して動的にステップを反復します。
Task状態は、状態マシンによって実行される単一の作業単位を表します。タスクは、アクティビティ、Lambda関数、AWSサービス、またはサードパーティAPIなど、さまざまなリソースを呼び出すことができます。
Activities: あなたが管理するカスタムワーカーで、長時間実行されるプロセスに適しています。
リソース: arn:aws:states:region:account:activity:name
。
Lambda Functions: AWS Lambda関数を実行します。
リソース: arn:aws:lambda:region:account:function:function-name
。
AWS Services: DynamoDBやS3など、他のAWSサービスと直接統合します。
リソース: arn:partition:states:region:account:servicename:APIname
。
HTTP Task: サードパーティAPIを呼び出します。
リソースフィールド: arn:aws:states:::http:invoke
。次に、APIエンドポイントの構成詳細(API URL、メソッド、認証詳細など)を提供する必要があります。
以下の例は、HelloWorldというLambda関数を呼び出すTask状態の定義を示しています:
Choice ステートは、ワークフローに条件付きロジックを追加し、入力データに基づいて決定を可能にします。指定された条件を評価し、結果に基づいて対応するステートに遷移します。
Comparison: 各選択ルールには、入力変数を指定された値または別の変数と比較する比較演算子(例:NumericEquals
、StringEquals
)が含まれています。
Next Field: Choice ステートは End
フィールドをサポートしていません。代わりに、比較が真である場合に遷移する Next
ステートを定義します。
Example of Choice state:
Fail
ステートは、ステートマシンの実行を停止し、それを失敗としてマークします。エラー名と原因を指定し、失敗に関する詳細を提供するために使用されます。このステートは終端であり、実行フローを終了します。
Succeed
ステートは、実行を成功裏に停止します。通常、ワークフローが成功裏に完了したときに終了するために使用されます。このステートは Next
フィールドを必要としません。
Passステートは、作業を行うことなく、またはフィルターを使用してJSONステート入力を変換することによって、その入力を出力に渡し、変換されたデータを次のステートに渡します。これは、静的データを注入したり変換したりすることを可能にし、ステートマシンのテストや構築に役立ちます。
Waitステートは、指定された期間、ステートマシンの実行を遅延させます。待機時間を設定するための主な方法は3つあります:
X秒: 待機する固定の秒数。
絶対タイムスタンプ: 待機する正確な時間。
動的待機: **SecondsPath
またはTimestampPath
**を使用して入力に基づく。
Parallelステートは、ワークフロー内で複数のタスクのブランチを同時に実行することを可能にします。各ブランチは独立して実行され、それぞれのステートのシーケンスを処理します。実行は、すべてのブランチが完了するまで待機し、その後次のステートに進みます。主なフィールドは次のとおりです:
Branches: 並列実行パスを定義する配列。各ブランチは別々のステートマシンです。
ResultPath: ブランチの結合出力をどこに(入力内で)配置するかを定義します。
Retry and Catch: 並列ステートのエラーハンドリング設定。
Map ステートは、データセット内の各アイテムに対して一連のステップを実行することを可能にします。データの並列処理に使用されます。データセットのアイテムをどのように処理したいかに応じて、Step Functions は以下のモードを提供します。
インラインモード: 各 JSON 配列アイテムに対してステートのサブセットを実行します。40 未満の並列反復を持つ小規模タスクに適しており、Map
ステートを含むワークフローのコンテキスト内でそれぞれを実行します。
分散モード: 高い同時実行性を持つ大規模な並列処理のために設計されています。Amazon S3 に保存されているような大規模データセットの処理をサポートし、最大 10,000 の並列子ワークフロー実行を実行し、これらの子を別の子実行として実行します。
Step Functions は、バージョン と エイリアス を通じてワークフローデプロイメントを管理することもできます。バージョンは、実行可能なステートマシンのスナップショットを表します。エイリアスは、ステートマシンの最大 2 つのバージョンへのポインタとして機能します。
バージョン: これらの不変のステートマシンのスナップショットは、そのステートマシンの最新の改訂から作成されます。各バージョンは、ステートマシン ARN とバージョン番号をコロンで区切って組み合わせた一意の ARN によって識別されます (arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number
)。バージョンは編集できませんが、ステートマシンを更新して新しいバージョンを公開するか、希望するステートマシンバージョンを使用できます。
エイリアス: これらのポインタは、同じステートマシンの最大 2 つのバージョンを参照できます。単一のステートマシンに対して複数のエイリアスを作成でき、それぞれはエイリアス名とコロンで区切られたステートマシン ARN を組み合わせた一意の ARN によって識別されます (arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName
)。エイリアスは、ステートマシンの 2 つのバージョンのいずれかの間でトラフィックをルーティングすることを可能にします。あるいは、エイリアスはステートマシンの特定のバージョンを指すことができますが、他のエイリアスには指しません。必要に応じて、異なるバージョンのステートマシンにリダイレクトするように更新でき、制御されたデプロイメントとワークフロー管理を促進します。
ASL に関する詳細情報については、次を確認してください: Amazon States Language。
AWS Step Functions は、AWS Identity and Access Management (IAM) ロールを利用して、ステートマシン内のリソースとアクションへのアクセスを制御します。AWS Step Functions におけるセキュリティと IAM ロールに関連する重要な側面は以下の通りです。
実行ロール: AWS Step Functions の各ステートマシンは、IAM 実行ロールに関連付けられています。このロールは、ステートマシンがあなたの代わりに実行できるアクションを定義します。ステートマシンが AWS サービスと相互作用するステート間を遷移する際(Lambda 関数の呼び出し、DynamoDB へのアクセスなど)、この実行ロールを引き受けてそれらのアクションを実行します。
権限: IAM 実行ロールは、他の AWS サービスに対する必要なアクションを許可する権限で構成する必要があります。たとえば、ステートマシンが AWS Lambda 関数を呼び出す必要がある場合、IAM ロールには lambda:InvokeFunction
権限が必要です。同様に、DynamoDB に書き込む必要がある場合、適切な権限(dynamodb:PutItem
, dynamodb:UpdateItem
など)を付与する必要があります。
ReadOnlyAccess ポリシーは、以下のすべての列挙アクションに対して十分です。
次のページでは、Step Functionsの権限を悪用して特権を昇格させる方法を確認できます:
AWS - Step Functions PrivescAWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)