私有子网EC2访问AWS API Gateway出现403错误求助
排查私有子网EC2通过VPC端点访问API Gateway的403错误
从你的操作和报错信息来看,核心问题大概率出在API Gateway资源策略的配置逻辑以及VPC端点的流量路径验证上,我帮你梳理几个关键排查和修复步骤:
1. 修正资源策略的致命错误
你当前的资源策略存在两个逻辑错误,直接导致了403拒绝:
- 错误使用条件键:针对VPC端点的访问控制,应该用
aws:sourceVpce(对应VPC端点ID),而非aws:sourceVpc(对应VPC的ID)。 - 错误的条件运算符:你用了
StringNotEquals,这意味着拒绝来自指定VPCE的请求,但你需要的是只允许该VPCE的请求,所以要改成StringEquals。
修正后的策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:eu-west-1:{{MY_ACCOUNT}}:{{MYAPI}}/*", "Condition": { "StringEquals": { "aws:sourceVpce": "vpce-{{ID}}" } } } ] }
修改后记得重新部署API Gateway的DEV Stage,确保策略生效。
2. 验证VPC端点的配置正确性
- 子网与DNS配置:确认你的execute-api类型VPC端点,已经关联了EC2所在的私有子网,并且启用了DNS解析(默认开启,但建议手动确认)。
- 路由表检查:EC2所在子网的路由表中,必须添加指向该VPCE的路由,目标前缀为
com.amazonaws.eu-west-1.execute-api,这样流量才会走VPC端点而非公网。 - 安全组规则:
- EC2实例的安全组要允许出站HTTPS(443)流量到VPCE的安全组。
- VPCE的安全组要允许来自EC2安全组的HTTPS(443)入站流量。
3. 确认流量确实走VPC端点
在EC2实例上执行以下命令,验证API Gateway域名是否解析到VPCE的私有IP:
nslookup {{MYAPI}}.execute-api.eu-west-1.amazonaws.com
如果解析结果是VPCE的私有IP,说明流量路径正确;如果是公网IP,说明路由表或VPCE的DNS配置有问题。
4. 排查API Gateway基础配置
- 确认API类型:你的API必须是区域型(Regional),边缘优化型(Edge-optimized)API的VPC端点访问需要额外配置,不适合私有子网场景。
- 验证请求路径匹配:检查你调用的
/DEV/CustomerInfo/?customerId={{CUST_ID}},是否和API Gateway中定义的资源路径、HTTP方法(比如GET)完全匹配,且该方法已在DEV Stage部署。
5. 临时排除策略干扰测试
如果以上步骤都没问题,可以临时移除API Gateway的资源策略,再从EC2访问测试。如果能成功,说明还是策略配置的细节问题;如果依然403,需要检查API集成后端的权限,或者是否有WAF、认证机制拦截了请求。
内容的提问来源于stack exchange,提问作者ANUJ AGARWAL
相关产品推荐
相关产品推荐

