如何通过IAM策略配置让API Gateway拥有调用Lambda函数的权限
解决API Gateway调用Lambda的权限配置问题
核心原因
问题出在Lambda函数的资源权限策略上,而非API Gateway的IAM角色权限。控制台手动保存集成请求时,AWS会自动给Lambda添加一条允许API Gateway触发的权限规则,你需要把这条规则通过IAM策略手动配置,避免重复手动操作。
具体配置步骤
1. 编写Lambda的资源权限策略
直接给Lambda函数添加一条信任API Gateway的权限策略,允许API Gateway服务主体调用该Lambda函数。示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:你的账号ID:function:connect_api", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:execute-api:你的区域:你的账号ID:你的API ID/*/*/*" } } } ] }
- 替换占位符:
你的区域(比如us-east-1)、你的账号ID(12位数字)、你的API ID(API Gateway控制台里的API标识符) Condition里的SourceArn可按需调整路径,比如限制到特定阶段或资源路径,提升安全性
2. 应用该策略到Lambda函数
可通过以下方式配置:
- AWS CLI命令:
aws lambda add-permission \ --function-name connect_api \ --statement-id AllowAPIGatewayInvoke \ --action "lambda:InvokeFunction" \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:你的区域:你的账号ID:你的API ID/*/*/*"
- CloudFormation模板(基础设施即代码场景):在Lambda资源中添加
Permissions属性:
Resources: ConnectApiLambda: Type: AWS::Lambda::Function Properties: FunctionName: connect_api # 其他Lambda配置项... APIGatewayInvokeLambdaPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref ConnectApiLambda Action: lambda:InvokeFunction Principal: apigateway.amazonaws.com SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${YourApiId}/*/*/*"
3. 验证配置
配置完成后直接通过API Gateway调用测试,无需再手动保存集成请求。可在Lambda控制台的「配置」->「权限」->「基于资源的策略」中查看是否已添加该规则。
注意事项
- 确保API Gateway的IAM角色已具备调用Lambda的权限(你之前已配置,无需修改)
- 权限策略的
SourceArn尽量缩小范围,比如指定到具体HTTP方法和资源路径,避免过度授权 - 若使用API Gateway阶段变量,需确保
SourceArn的路径匹配实际调用路径
内容的提问来源于stack exchange,提问作者Gregory
相关产品推荐
相关产品推荐

