【发布时间】:2020-06-22 01:39:18
【问题描述】:
我在 SAM/CloudFormation 模板中创建了一个 Step Function(父级),除其他外,它调用另一个 Step Function(子级)。我正在按照使用service integration pattern 从父级调用子级的说明进行操作。但是我遇到了一个与 IAM 相关的(我认为)错误,我在通过 CLI 部署时无法解决。 (错误显示在 CLI 输出中,因此它从未真正进入 AWS。之前已经进行了大量部署,因此 changeset 只是尝试使用此部署修改 Step Function。)
'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-role 如下,确保它仅对 Parent 中的 Lambda 函数具有 Lambda 执行权限,并且更适用于该问题,具有 Child 的 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 状态,以确保 Step Function 中没有其他错误阻止部署,并且部署正常。所以我知道这与那个州有关。 (另外值得注意的是,当使用Pass 状态进行部署以进行测试时,我离开了上面定义的角色,所以,我再次知道,这不是导致这种情况的策略的语法错误。显然,这不一样可能有错误或缺少政策。)
【问题讨论】:
-
在权限修复后我仍然遇到这个问题,它也是间歇性的。尝试添加一堆
DependsOn,但没有帮助!
标签: amazon-web-services amazon-cloudformation amazon-iam aws-step-functions aws-sam