如何在CloudFormation模板中授予API Gateway调用Lambda函数的权限?
API Gateway调用Lambda权限问题的解决办法
关键配置:Lambda权限资源
你必须在CloudFormation模板里添加AWS::Lambda::Permission资源,给API Gateway开调用Lambda的权限,核心参数不能错:
Action固定写lambda:InvokeFunctionFunctionName用!Ref引用你的Lambda函数逻辑IDPrincipal必须是apigateway.amazonaws.com(指定API Gateway服务作为调用方)SourceArn是重中之重,必须精准匹配你的API Gateway触发ARN,格式是:
用CloudFormation的arn:aws:execute-api:<区域>:<账户ID>:<API网关ID>/<部署阶段>/<HTTP方法>/<资源路径>!Sub函数拼接最稳妥,避免手动输入错误:!Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${你的API网关逻辑ID}/${部署阶段名}/${HTTP方法}/${资源路径}"
完整示例
假设你的API网关逻辑ID是MyDemoApi,部署阶段是Prod,Lambda函数是MyDemoLambda,接口是POST /test,对应的权限资源写法:
ApiGatewayLambdaPermission: Type: AWS::Lambda::Permission DependsOn: MyDemoApiDeployment # 必须等API部署完成再创建权限 Properties: Action: lambda:InvokeFunction FunctionName: !Ref MyDemoLambda Principal: apigateway.amazonaws.com SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${MyDemoApi}/Prod/POST/test"
踩坑排查
SourceArn里的所有字段必须和实际配置完全一致,HTTP方法、资源路径大小写都不能错- 如果用了API代理集成,资源路径是
/*,要把SourceArn里的路径改成* - 一定要加
DependsOn关联API网关的部署资源,不然权限可能在API部署前创建,导致不生效
内容的提问来源于stack exchange,提问作者Aodhan
相关产品推荐
相关产品推荐

