SAM/CloudFormationテンプレートで作成されたStep Function(Parent)があり、それは、とりわけ、別のStep Function(Child)を呼び出します。 サービス統合パターン を使用して、親から子を呼び出す手順に従っています。しかし、CLI経由でデプロイするときに解決できないIAM関連の(私は思う)エラーが発生します。 (エラーはCLI出力に表示されるため、実際にはAWSに到達しません。以前のデプロイがたくさんあるため、changeset
はステップを変更しようとしていますこのデプロイメントで機能します。)
'arn:aws:iam::{Account-Number}:role/{Parent-Step-Function-Role-Name}' is not authorized to create managed-rule. (Service: AWSStepFunctions; Status Code: 400; Error Code: AccessDeniedException; Request ID: {Long-Id-Number})
必要な同期動作を取得するには(親が子を呼び出し、子の実行が完了するのを待ってから、次の状態に移動します)提案を使用して(上記のサービス統合パターンのリンクから)、タスクを作成します(SAMテンプレート内)次のようになります。
...More States...
"Call Child State": {
"Type": "Task",
"Next": "The Next State",
"Resource": "arn:aws:states:::states:startExecution.sync",
"Parameters": {
"Input": {
"comment": "Hello World!"
},
"StateMachineArn": "${ChildStepFunction}",
"Name": "ChildExecutionFromParent"
}
},
...More States...
ParentのIAMロールを次のように定義しました。これには、ParentのLambda関数に対するLambda実行権限のみがあり、問題にさらに当てはまるのは、子のStartExecution
へのアクセス許可があることです。サービス統合パターンを使用するときに必要な権限はStartExecutionのみであると述べた、以下のリンクの指示に従いました。
https://docs.aws.Amazon.com/step-functions/latest/dg/stepfunctions-iam.html
ParentStepFunctionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- !Sub states.${AWS::Region}.amazonaws.com
Action: sts:AssumeRole
Policies:
-
PolicyName: ChildStepFunctionExecution
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action: states:StartExecution
Resource: !Ref ChildStepFunction
-
Effect: Allow
Action: lambda:InvokeFunction
Resource:
- !GetAtt Function1.Arn
...
- !GetAtt FunctionX.Arn
上記の状態を単純なPass
状態に置き換えて、デプロイメントをブロックしているステップ関数に他のエラーがないことを確認しましたが、正常にデプロイされました。だから私はそれがその州と関係があることを知っています。 (また、テストのためにPass
状態で展開する場合、私は役割を上記の定義のままにしたので、これは、これを引き起こしているポリシーの構文エラーではないことを知っています。明らかに、それはwrongまたはmissingポリシーを持っていると同じではありません。)
ちょっと待って。これは少し異なり、インラインポリシーであり、StepFunctionsGetEventsForStepFunctionsExecutionRule
管理ルールリソースに対するevents:PutRule
アクションを承認します。
StateMachine:
Type: AWS::Serverless::StateMachine
Properties:
DefinitionUri: statemachine/parentstatemachine.asl.json
DefinitionSubstitutions:
ChildWorkflowArn: !Ref ChildStateMachine
Policies:
- Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- events:PutTargets
- events:PutRule
- events:DescribeRule
Resource: !Sub arn:${AWS::Partition}:events:${AWS::Region}:${AWS::AccountId}:rule/StepFunctionsGetEventsForStepFunctionsExecutionRule
- StepFunctionsExecutionPolicy:
StateMachineName: !Ref ChildStateMachine
ワイヤーが交差していないことを確認するために、以下はCloudFormationがインラインポリシーステートメントなしで報告するエラーに似ていますが、正確ではありません。
'arn:aws:iam::xxxxxxxx:role/xxxxxxxx' is not authorized to create managed-rule.
(
Service: AWSStepFunctions;
Status Code: 400;
Error Code: AccessDeniedException;
Request ID: xxxxxxx;
Proxy: null
)
role/xxxxxxxx
は、AWS::Serverless::StateMachine
リソースのSAM CloudFormation変換によって生成されます。それは露骨な自動化です。