API 网关配置 returns 403

API Gateway configuration returns 403

我配置并部署了 API Gateway。如果我向其暂存端点之一发出 GET 请求,例如 https://1234567890.execute-api.us-east-1.amazonaws.com/dev/doc,我会收到 200 OK 响应。

如果我查看 Custom Domain Names 部分并将那里找到的 URL 替换到我的请求中,例如 abcdefghijkl-f4cwy0d1u5.execute-api.us-east-1.amazonaws.com 生成 https://abcdefghijkl-f4cwy0d1u5.execute-api.us-east-1.amazonaws.com/dev/doc,我得到 403 Forbidden.

我是否认为我应该能够向域名发出请求 - 从而在 CNAME 记录中使用 API 的自定义域名 - 或者 403 是否表明缺少特定的配置项?

您可以在此处找到一些与您的 403 错误一起出现的响应 headers:https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-troubleshoot-403-forbidden/

这可能会帮助您找出您遇到的错误!

TL;DR: 当使用 API 网关获取 403 Forbidden 并使用 Custom domain name 时,重要的是 trim阶段名称,因为 API 网关将自定义名称路由到该阶段。

使用@leoandreotti 提供的 the documentation 我能够识别响应 header:

x-amzn-ErrorType: ForbiddenException

为此,文档指出:

Invoking a REST API that has a custom domain name using the default execute-api endpoint - The caller uses the default execute-api endpoint to invoke a REST API after disabling the default endpoint.

这让我想起了 header 同事推荐我使用的 Host header.

所以,我将 header 添加回请求并得到:

x-amzn-ErrorType: MissingAuthenticationTokenException

文档说明:

Resource path doesn't exist - A request with no "Authorization" header is sent to an API resource path that doesn't exist.

但是路径/dev/doc绝对存在。然后我意识到 /dev 部分实际上是 stage 名称。

所以我 trim 从路径中提取 /dev 部分并得到 200 OK - 然后我删除了 Host header 并且还得到了 200 OK!

谢谢@leoandreotti