Terraform配置AWS API Gateway REST API时的权限问题
API Gateway调用Lambda返回403的Terraform权限解决方案
问题分析
你遇到的403错误核心原因是Lambda权限的source_arn格式不匹配API Gateway的请求路径规则,或是资源创建顺序导致权限未正确生效。手动在控制台添加权限时,系统会自动生成适配具体端点的source_arn,但通过单条Terraform语句即可覆盖所有端点,无需逐个配置。
单条权限语句修正方案
只需调整source_arn格式并添加正确的资源依赖:
resource "aws_lambda_permission" "api_gw" { statement_id = "AllowExecutionFromAPIGateway" action = "lambda:InvokeFunction" function_name = aws_lambda_function.theapilambda.function_name qualifier = aws_lambda_alias.devo_lambda_alias.name principal = "apigateway.amazonaws.com" # 匹配所有阶段、HTTP方法、资源路径的通配符格式 source_arn = "${aws_api_gateway_rest_api.MyApi.execution_arn}/*/*/*" # 确保权限在API部署完成后创建,避免路径未生成导致的不匹配 depends_on = [aws_api_gateway_deployment.MyApiDeployment] }
关键要点说明
- source_arn通配符规则:
/*/*/*分别对应/{部署阶段}/{HTTP方法}/{资源路径},可以覆盖API Gateway下所有端点的请求,无需为每个端点单独设置权限。 - 资源依赖必要性:添加
depends_on关联你的API部署资源(比如aws_api_gateway_deployment.MyApiDeployment),确保API的端点结构完全部署后再创建Lambda权限,避免权限配置时API路径还未生成导致的规则不匹配。 - qualifier验证:确认
aws_lambda_alias.devo_lambda_alias.name指向正确的Lambda别名,权限需精准匹配到对应的Lambda版本/别名才能生效。
内容的提问来源于stack exchange,提问作者Alterino
相关产品推荐
相关产品推荐

