You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CloudFormation模板中授予API Gateway调用Lambda函数的权限?

API Gateway调用Lambda权限问题的解决办法

关键配置:Lambda权限资源

你必须在CloudFormation模板里添加AWS::Lambda::Permission资源,给API Gateway开调用Lambda的权限,核心参数不能错:

  • Action固定写lambda:InvokeFunction
  • FunctionName用!Ref引用你的Lambda函数逻辑ID
  • Principal必须是apigateway.amazonaws.com(指定API Gateway服务作为调用方)
  • SourceArn是重中之重,必须精准匹配你的API Gateway触发ARN,格式是:
    arn:aws:execute-api:<区域>:<账户ID>:<API网关ID>/<部署阶段>/<HTTP方法>/<资源路径>
    
    用CloudFormation的!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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:22:08