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

无法通过API Gateway代理调用带AWS_IAM认证的Lambda端点

问题原因
  • IAM认证的签名是基于请求的目标URL生成的:客户端直接调用后端REST API时,签名针对后端API的域名和路径生成;通过代理调用时,客户端签名是针对代理API的URL生成的,后端API收到请求后会验证请求URL对应的签名,自然无法匹配,返回Missing Authentication Token。
  • 代理默认不会转换客户端的IAM签名,后端API无法识别针对代理URL的签名,导致认证失败。
解决方案

方案1:让代理使用IAM角色转发请求(推荐)

这是最标准的实现方式,由代理API Gateway承担访问后端API的身份:

  • 创建一个IAM角色,信任关系配置为允许apigateway.amazonaws.com调用sts:AssumeRole。
  • 给该角色添加权限策略,允许执行execute-api:Invoke操作,资源指定为后端REST API的完整ARN(格式:arn:aws:execute-api:<区域>:<账号ID>:<后端API ID>/*/*/*)。
  • 在代理API的集成请求设置中:
    1. 选择AWS Service类型,服务选API Gateway,填写后端API所在区域。
    2. 路径填写后端API的部署阶段+资源路径(比如/prod/my-protected-endpoint)。
    3. 在Credentials选项中选择刚才创建的IAM角色。
  • 代理API的方法请求无需启用AWS_IAM认证(按需调整),由代理负责用自身角色完成后端API的认证。

方案2:调整客户端签名逻辑(不推荐)

如果必须传递客户端身份到后端,需要让客户端针对后端API的URL生成签名,但请求发送到代理API。同时要确保代理转发所有IAM签名相关的请求头(如Authorization、X-Amz-Date、X-Amz-Security-Token等)。但这种方式存在签名验证不通过的风险,因为实际请求URL和签名目标URL不一致,仅适用于特定场景。

方案3:给后端API添加资源策略

通过资源策略允许代理API访问后端受保护的端点:

  • 编辑后端REST API的资源策略,添加以下允许语句:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "代理API Gateway的执行角色ARN"
          },
          "Action": "execute-api:Invoke",
          "Resource": "后端API的资源ARN"
        }
      ]
    }
    
  • 同时在代理API的集成请求中配置使用自身执行角色转发请求,确保身份信息正确传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:26:09