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

跨账号使用AWS CLI调用API Gateway触发NotFoundException问题求助

问题根因

你遇到的报错是因为apigateway test-invoke-method属于AWS API Gateway的管理平面操作接口,设计上仅允许操作当前调用凭证所属账户下的API Gateway资源。你用B账户的EC2实例凭证调用时,AWS后台会自动将B账户ID与你传入的rest-api-id拼接为资源标识符检索,自然找不到A账户下的对应API,因此抛出NotFoundException。
test-invoke-method本身是为同账户下的API调试设计的,不适合跨账户的API调用场景。

解决方案

方案1:调用API Gateway运行时端点(推荐)

跨账户正常调用API直接使用API的运行时访问端点即可,无需使用测试调用接口:

  • 如果你的API未开启IAM授权,直接用curl调用对应URL即可:
curl https://<rest-api-id>.execute-api.us-east-1.amazonaws.com/<stage-name>/<resource-path>
  • 如果你的API开启了IAM授权,可使用aws cli的execute-api命令发起带SigV4签名的调用,只要A账户API Gateway的资源策略已允许B账户EC2实例角色的execute-api:Invoke权限即可成功调用:
aws --region us-east-1 execute-api invoke \
  --rest-api-id xxxxxxxxxx \
  --stage-name <你的API部署阶段名> \
  --resource-path <你的资源路径> \
  --http-method GET

方案2:需使用test-invoke-method调试的场景

如果你需要调试A账户下未部署的API配置,必须使用test-invoke-method,则需要配置跨账户角色 Assume:

  • 在A账户创建专用IAM测试角色,授予apigateway:TestInvokeMethod权限,信任实体设置为B账户EC2实例绑定的Instance Profile角色ARN
  • 在B账户的EC2 Instance Profile角色的权限策略中,添加允许sts:AssumeRole的规则,资源为A账户刚才创建的测试角色ARN
  • 在EC2实例上先Assume A账户的测试角色,获取临时凭证后再执行原来的test-invoke-method命令,此时调用凭证属于A账户,即可正常检索到对应API资源
注意事项

如果使用方案1调用,需确认A账户API Gateway的资源策略中,明确允许B账户EC2实例角色执行execute-api:Invoke操作,否则会出现权限拒绝报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:03