测试环境嵌套AWS Step Functions执行时持续触发AccessDeniedException
问题
在测试环境中执行嵌套AWS Step Functions时,持续遇到AccessDeniedException异常,但相同配置在集成环境中运行正常。child-state-machine-1和child-state-machine-2作为并行步骤均出现该错误,错误信息如下:
{ "cause": "User: arn:aws:sts::1234556:assumed-role/SomeRole/xyz is not authorized to access this resource (Service: AWSStepFunctions; Status Code: 400; Error Code: AccessDeniedException; Request ID: SomeID; Proxy: null)", "error": "StepFunctions.AWSStepFunctionsException", "resource": "startExecution.sync", "resourceType": "states" }
配置详情:
主状态机(main-state-machine)通过states:StartExecution或states:StartSyncExecution启动其他子状态机,使用IAM角色main-state-machine-role,已通过Terraform和AWS控制台附加如下策略:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "states:StartExecution", "states:StartSyncExecution" ], "Effect": "Allow", "Resource": [ "arn:aws:states:REGION:ACCOUNT_ID:stateMachine:child-state-machine-1", "arn:aws:states:REGION:ACCOUNT_ID:stateMachine:child-state-machine-2", "arn:aws:states:REGION:ACCOUNT_ID:stateMachine:child-state-machine-3" ] } ] }
已检查内容:
- 确认IAM策略已正确附加到测试环境的对应角色(通过AWS控制台验证);
- 策略中的状态机ARN与实际ARN完全匹配;
- 开发环境采用相同的策略和角色配置,运行正常。
请问在已验证策略和ARN正确且集成环境正常的情况下,测试环境出现该AccessDeniedException的原因可能是什么?
可能的原因分析
- 子状态机资源策略限制:测试环境的子状态机可能配置了资源策略,未授权主状态机角色访问,而集成环境中已放开该限制。AWS Step Functions的资源策略会叠加IAM权限,只要其中一方拒绝,就会触发
AccessDeniedException。 - IAM角色权限边界约束:测试环境的
main-state-machine-role可能设置了权限边界,该边界未包含states:StartExecution/states:StartSyncExecution操作,或未覆盖子状态机的ARN范围。集成环境的角色可能无权限边界,或边界配置更宽松。 - 主状态机执行角色配置错误:错误信息中显示的STS假设角色(
arn:aws:sts::1234556:assumed-role/SomeRole/xyz)可能并非main-state-machine-role,需确认测试环境主状态机的执行角色是否配置正确,是否误用了其他受限角色。 - 组织SCP限制:若测试环境属于AWS Organizations成员账户,组织级别的服务控制策略(SCP)可能限制了
states:StartExecution类操作,或禁止访问特定子状态机资源,而集成环境所在账户不受该SCP约束。 - IAM策略生效延迟:尽管控制台显示策略已附加,但IAM权限同步可能存在几分钟延迟,尤其是Terraform批量部署后。可等待一段时间重试,或用
aws iam simulate-principal-policy命令直接验证权限是否生效。 - 子状态机状态异常:测试环境的子状态机可能处于禁用状态,部分场景下AWS会用
AccessDeniedException而非明确的禁用错误码返回,需检查子状态机的运行状态是否为启用(Active)。
内容的提问来源于stack exchange,提问作者Yasin Türk
相关产品推荐
相关产品推荐

