Terraform多区域部署API Gateway出现AccessDeniedException错误求助
问题根因定位(按优先级排序)
1. IAM执行身份缺少次区域APIGW创建权限
你运行Terraform的身份(IAM用户/角色)的权限策略大概率只配置了主区域的APIGW操作权限,没有覆盖次区域:
- 检查权限策略中是否存在按区域限制的资源ARN,例如仅允许操作
arn:aws:apigateway:<主区域>::/restapis,需要补充次区域的对应ARN - 确认权限策略包含
apigateway:CreateRestApi、apigateway:GetRestApi、apigateway:UpdateRestApi等基础操作权限,没有按区域过滤
2. 次区域模块引用存在笔误
你声明的次区域APIGW模块名是module "test_secondary",但后续所有依赖该模块的资源(如authorizer、endpoint、deployment等)都错误引用了不存在的module.test_api_secondary,会导致参数传递异常,触发意外的权限校验失败,需要把所有test_api_secondary替换为test_secondary。
3. 模块内Provider未正确继承
检查./modules/api-gateway模块的代码,确认模块内部没有硬编码provider = aws(默认主区域provider),也没有额外声明aws provider,确保模块完全继承调用时传入的aws = aws.secondaryprovider配置。
4. 组织SCP/区域权限限制
检查AWS账号所在的组织单元是否配置了SCP(服务控制策略),禁止在次区域创建API Gateway资源;同时确认次区域没有被AWS账号封禁,处于正常可用状态。
5. 次区域VPC Endpoint配置异常
PRIVATE类型的API Gateway创建时会校验关联的VPC Endpoint有效性,确认data.aws_vpc_endpoint.execute_api_endpoint_secondary返回的端点是正常可用状态,端点所属的安全组放行443端口入站流量。
快速验证排查步骤
- 用相同的AWS身份,在次区域控制台手动创建一个PRIVATE类型的API Gateway,如果手动创建也报权限错误,直接定位为IAM权限/ SCP策略问题
- 执行
terraform plan,检查次区域APIGW资源的provider归属是否显示为aws.secondary,确认没有用错主区域provider - 先注释掉次区域APIGW的所有依赖资源(authorizer、endpoint、deployment等),仅保留
module "test_secondary"和VPC Endpoint数据源,单独执行apply验证是否能成功创建APIGW,排除下游资源依赖导致的异常
内容的提问来源于stack exchange,提问作者A.Lopez
相关产品推荐
相关产品推荐

