【发布时间】: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 的调用可以正常工作。
我已经看过 this 和 this 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