【问题标题】:AWS API Gateway 403 Forbidden when calling from Lambda从 Lambda 调用时,AWS API Gateway 403 被禁止
【发布时间】:2020-06-10 09:17:26
【问题描述】:

我有一个带有 IAM 身份验证的 API Gateway 端点,没有自定义域名,没有 API 密钥,API 部署到 Prod 并且没有启用 AWS WAF (TBMK) 和 VPC 代理集成请求方法。

我正在从 Lambda 调用此端点(附加了 execute-api:Invoke 调用 API 的权限),但是我收到了带有消息 Forbidden 的 403 错误。 请注意,如果我删除 IAM 身份验证方法,来自 Lambda 的调用可以正常工作

我已经看过 thisthis SO questions + AWS Doc on the topic 但我已经尝试过这些解决方案(如前所述)。

在 Lambda 中调用 API Gateway 的示例代码:

final HttpURLConnection connection = (HttpURLConnection) new URL(postApiUrl).openConnection();
connection.setRequestMethod("POST");
final int responseCode = connection.getResponseCode();
//...

我如何将 API Gateway ARN 附加到 CDK 中的 Lambda 角色:

this.addToRolePolicy(
      new PolicyStatement({
          actions: [execute-api:Invoke],
          effect: Effect.ALLOW,
          resources: [postMethod.methodArn],
      }),
);

【问题讨论】:

  • 你能展示你的 lambda 代码的相关部分吗?
  • 另外,您是如何将您的 api 与 vpc 链接集成的?
  • 只是为了给您更多的上下文,使用 API Gateway Web 控制台中的测试功能可以正常工作。它只是不适用于 Lambda。 TBH,我不认为身份验证问题是因为 VPC 链接和资源(Lambda 需要经过身份验证才能调用 API 网关,VPC 资源不需要权限)。
  • Lambda 结构通过 CDK 进行管理。如前所述,Lambda 作为附加到它的必要调用角色。
  • 您是否为 API 网关设置了资源策略?您的 Lambda 函数是否在 VPC 中?

标签: amazon-web-services aws-api-gateway http-status-code-403


【解决方案1】:

您已为您的 API GW 方法设置 IAM 身份验证,但您的 Lambda 函数代码未签署对 API GW 的请求。注意:简单地将execute-api:Invoke 权限添加到 Lambda 函数执行角色不会对请求进行签名。

您需要使用 AWS SigV4 签名流程添加身份验证信息,然后在 API GW 端进行验证。这个doc 列出了涉及的步骤,基本上是:

  1. 创建规范请求。
  2. 使用规范请求和其他元数据创建用于签名的字符串。
  3. 从您的 AWS 秘密访问密钥派生一个签名密钥。然后使用签名密钥和上一步中的字符串来创建签名。
  4. 将生成的签名添加到 HTTP 请求的标头中或作为查询字符串参数。

由于您使用的是 Java,this blog post 还提供了一些示例代码,您可以参考。

【讨论】:

    【解决方案2】:

    APIG 有一个授权缓存,检查一下。

    https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-403-error-lambda-authorizer/

    如果您可以阅读并详细说明,我将提供正确的解决方案。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • @Dunedan 谢谢你,我明白了,所以问题是有限的信息,有很多原因之一来自长文档,我已经修改了我的答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2016-04-23
    • 2018-11-09
    • 2017-12-23
    • 2019-03-01
    • 2020-08-21
    • 2019-07-08
    相关资源
    最近更新 更多