Step Function调用SAM内嵌Lambda函数时遇权限错误求助
解决Step Functions调用SAM部署Lambda的403权限错误
错误分析
你遇到的AccessDeniedException明确指出:状态机的IAM角色没有权限调用这个SAM部署的Lambda函数,尽管该角色能调用其他独立Lambda。核心问题大概率是权限范围不匹配或Lambda资源策略限制。
排查与解决步骤
1. 检查状态机IAM角色的权限覆盖范围
- 登录IAM控制台,找到状态机关联的角色
StepFunctions-MyStateMachine-vaf8oae6r-role-3fb3les3x - 查看该角色附加的权限策略,确认
lambda:InvokeFunction动作对应的Resource是否包含目标Lambda的完整ARN:arn:aws:lambda:us-west-2:049597339122:function:aws-cloud9-USWestEnvironment-d2-HelloWorldFunction-Xi1bJn9QghrZ:$LATEST - 如果之前的权限仅指定了另外两个Lambda的ARN,需将这个SAM Lambda的ARN添加进去;生产环境建议指定具体ARN,测试阶段可临时用通配符
*覆盖。
2. 检查Lambda的资源级权限策略
SAM部署的Lambda可能默认未开放给状态机的调用权限,需手动添加:
- 打开Lambda控制台,找到目标函数
aws-cloud9-USWestEnvironment-d2-HelloWorldFunction-Xi1bJn9QghrZ - 进入「配置」>「权限」>「资源-based策略」,添加以下策略(替换对应ARN):
{ "Version": "2012-10-17", "Id": "StepFunctionInvokeAccess", "Statement": [ { "Sid": "AllowStateMachineInvoke", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::049597339122:role/StepFunctions-MyStateMachine-vaf8oae6r-role-3fb3les3x" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:049597339122:function:aws-cloud9-USWestEnvironment-d2-HelloWorldFunction-Xi1bJn9QghrZ:$LATEST" } ] }
3. 通过SAM模板固化权限(推荐)
如果后续还要重新部署SAM应用,建议在SAM模板中添加AWS::Lambda::Permission资源,自动配置状态机的调用权限:
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # 你的Lambda配置(代码、运行时等) StateMachineInvokeLambdaPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref HelloWorldFunction Action: lambda:InvokeFunction Principal: states.us-west-2.amazonaws.com SourceArn: "arn:aws:states:us-west-2:049597339122:stateMachine:MyStateMachine" # 替换为你的状态机ARN
4. 确认Lambda版本/别名的权限匹配
报错中的资源包含:$LATEST版本后缀,如果状态机调用的是特定版本/别名,需确保权限策略中的Resource包含该版本标识,或用*覆盖所有版本(如arn:aws:lambda:us-west-2:049597339122:function:aws-cloud9-USWestEnvironment-d2-HelloWorldFunction-Xi1bJn9QghrZ:*)。
内容的提问来源于stack exchange,提问作者user1068378
相关产品推荐
相关产品推荐

