在CloudFormation目标组配置Lambda版本遇403权限错误的原因排查
问题原因及解决方法
你遇到的权限错误:
Resource handler returned message: "elasticloadbalancing principal does not have permission to invoke arn:aws:lambda:us-east-1:336381469992:function:my-api-v1-dev-handler:13 from target group arn:aws:elasticloadbalancing:us-east-1:targetgroup/my-apis-v1-dev/f811183d66a6a480 (Service: ElasticLoadBalancingV2, Status Code: 403, Request ID: ee4741b2-bd5e-4d61-aa22-601d0232c670)"
核心原因
你的lambdaInvokePermission资源仅授权了Lambda函数本身(不带版本号的ARN)的调用权限,但目标组绑定的是具体的Lambda版本ARN。ELB尝试调用带版本号的Lambda资源时,由于权限未覆盖到该版本,触发403权限错误。
具体配置问题
在当前的Serverless.yaml中:
lambdaInvokePermission的FunctionName字段使用!Ref HandlerLambdaFunction,指向的是Lambda函数的基础ARN(无版本号)- 但
targetGroup的Targets.Id使用!Ref functionVersion,指向的是带版本号的Lambda资源ARN
Lambda的权限是独立作用于版本/别名的,基础函数的调用权限不会自动传递给其发布的版本,因此ELB调用指定版本时会被拒绝。
修正步骤
- 修改
lambdaInvokePermission的FunctionName,指向具体的Lambda版本资源:
lambdaInvokePermission: Type: "AWS::Lambda::Permission" Properties: FunctionName: !Ref functionVersion # 替换为版本资源引用 Action: "lambda:InvokeFunction" Principal: "elasticloadbalancing.amazonaws.com" SourceArn: !Ref targetGroup
- (可选但推荐)显式声明依赖关系,确保资源创建顺序正确:
lambdaInvokePermission: Type: "AWS::Lambda::Permission" DependsOn: - functionVersion - targetGroup Properties: FunctionName: !Ref functionVersion Action: "lambda:InvokeFunction" Principal: "elasticloadbalancing.amazonaws.com" SourceArn: !Ref targetGroup
内容的提问来源于stack exchange,提问作者Thisun
相关产品推荐
相关产品推荐

