使用startExecution.sync:2启动嵌套Step Functions遇权限错误求助
问题原因与解决方案
这个错误的核心原因是 startExecution.sync:2 和旧版 startExecution.sync 在EventBridge规则的使用逻辑上存在差异:
旧版sync依赖你指定的StepFunctionsGetEventsForStepFunctionsExecutionRule自定义规则,但新版sync:2会自动创建一个AWS托管的EventBridge规则(这类规则的ARN格式通常是arn:aws:events:<region>:<account-id>:rule/aws/stepfunctions/*)。而你的当前IAM权限仅允许操作特定的自定义规则,没有覆盖托管规则的资源范围,因此触发了AccessDeniedException。
修复步骤:扩展IAM权限范围
修改你的内联IAM语句,把EventBridge相关操作的资源范围扩展到包含Step Functions的托管规则:
iamRoleStatements: # Event to start SF synchronous - Effect: Allow Action: - events:PutTargets - events:PutRule - events:DescribeRule - events:DeleteRule - events:DisableRule - events:EnableRule - events:ListRules # 建议添加上RemoveTargets,避免后续清理任务时出现权限问题 - events:RemoveTargets Resource: - arn:aws:events:eu-central-1:<MY_AWS_ACCOUNT_ID>:rule/StepFunctionsGetEventsForStepFunctionsExecutionRule # 新增:允许操作Step Functions的托管规则 - arn:aws:events:eu-central-1:<MY_AWS_ACCOUNT_ID>:rule/aws/stepfunctions/* - Effect: Allow Action: - states:StartExecution Resource: - <arn of other sf> - Effect: Allow Action: - states:DescribeExecution - states:StopExecution Resource: - "*"
额外说明
- Serverless Framework确实只是生成CloudFormation栈,但
sync:2的底层实现逻辑和旧版sync不同,需要的权限自然有变化,这和Serverless本身无关。 - 托管规则是AWS为
sync:2特性专门设计的,用于更可靠地同步执行结果回调,所以必须确保IAM角色有足够权限来创建、管理这类规则。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

