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

AWS跨账号Lambda调用API Gateway返回403 Forbidden求助

排查建议

1. 核查Lambda的VPC网络配置

  • 若Lambda部署在VPC内,优先确认网络出口配置:
    • 若使用NAT网关:检查Lambda所在子网的路由表是否包含指向NAT网关的互联网路由条目,同时确认NAT网关处于正常运行状态。
    • 若使用API Gateway VPC端点:
      • 确保VPC端点已关联Lambda所在的子网和安全组。
      • 检查API Gateway的资源策略,是否添加了允许该VPC端点访问的规则。
  • 检查Lambda所属安全组的出站规则:确认是否允许HTTPS(443端口)访问目标API的IP段,或是否放开了全量出站流量。

2. 检查API Gateway的资源策略

  • 账号B的API Gateway可能配置了资源策略,限制了调用来源:
    • 进入API Gateway控制台查看「资源策略」,确认是否存在拒绝账号A Lambda所在IP/VPC的规则。
    • 若API Gateway为私有类型,需确保账号A Lambda的VPC可通过VPC端点访问,且资源策略允许该VPC的CIDR或VPC端点ID。
  • 注:Postman能正常调用说明公网IP未被限制,问题大概率出在Lambda的VPC来源被拦截。

3. 对比请求参数与头部

  • 对比Lambda发送的请求与Postman请求的头部、参数差异:
    • 在Lambda代码中用console.log打印完整请求信息(包括headers、body),和Postman的请求做逐一比对,重点检查Host、User-Agent等可能影响验证的字段。

4. 测试Lambda到API Gateway的连通性

  • 在Lambda中添加TCP连接测试代码,验证网络层面能否正常连通:
    const net = require('net');
    const testAPIConnection = () => {
      return new Promise((resolve, reject) => {
        const socket = net.createConnection(443, '*******.execute-api.ap-south-1.amazonaws.com');
        socket.on('connect', () => {
          resolve('TCP连接成功');
          socket.end();
        });
        socket.on('error', (err) => {
          reject(`连接失败:${err.message}`);
        });
      });
    };
    
  • 查看CloudWatch日志,确认连接结果,判断是否存在网络层面的阻断。

5. 查看API Gateway访问日志

  • 在账号B的API Gateway中开启访问日志功能,查看Lambda调用时的详细日志:
    • 日志会记录请求来源IP、身份验证结果、拒绝原因等关键信息,可直接定位是资源策略、WAF还是其他规则导致的Forbidden。

6. 排查WAF拦截规则(若API Gateway关联WAF)

  • 若账号B的API Gateway绑定了WAF,检查WAF规则:
    • 查看WAF日志,确认是否存在针对Lambda所在VPC IP的拦截记录。
    • 临时禁用WAF进行测试,验证是否为WAF规则导致的阻断。

内容的提问来源于stack exchange,提问作者HMT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:35:17