AWS:始终从需要 API 密钥的端点的 API 网关获取 `"message": "Forbidden"`
AWS: Always Getting `"message": "Forbidden"` from API Gateway for Endpoints that Require an API Key
我们已经将 Chalice 应用程序部署到 AWS,并且在调用需要 API 密钥的端点时收到以下响应:
{
"message": "Forbidden"
}
不需要 API 密钥的端点可以毫无问题地调用。
奇怪的是,我们过去能够毫无问题地调用需要 API 密钥的端点,因此我们也在考虑是否是 Chalice 或 AWS 更新导致了这个问题。
我们正在使用 Postman 在请求中将 API 密钥作为 Header 传递:
x-api-key: Our API Key's Value.
我们也没有在 CloudWatch 中获得任何日志,大概是因为由于该问题实际上并未调用端点。 AWS 甚至在请求到达我们的端点之前就阻止了该请求。
我们的API键配置如下:
API 键:
- ID:我们密钥的 ID。
- 名称:我们密钥的名称。
- API 键:我们键的值。
- 已启用:已启用
相关使用计划:
- ID:我们计划的 ID。
- 名称:我们计划的名称。
- 节流:不节流。
- 配额:没有配额。
API 密钥和使用计划看起来配置正确,因此我们假设问题不在于 API 密钥本身。
来自 "Troubleshoot API Gateway 403 Forbidden errors" 文档:
如果 API 密钥无效(或者,我们假设不正确),我们将收到以下消息:
"Invalid API Key identifier specified"
但是,我们收到的是一般性“禁止”错误:
"Forbidden"
文档仅列出了导致此错误的三个可能原因:
在 API.
中激活 AWS WAF 时,请求被 Web 应用程序防火墙 (WAF) 过滤阻止
使用 public DNS 名称从 Amazon Virtual Private Cloud (Amazon VPC) 中调用私有 API 时,“主机”或“x-apigw-api-id " 请求中缺少 header。
调用方在禁用默认端点后使用默认 execute-api 端点调用 REST API。
我们认为上述 none 个原因适用于我们,原因如下:
我们的 API 网关中没有配置 WAF(也没有 Web ACL)。
我们不会从 Amazon VPC 中调用私有 API。
我们没有禁用默认端点,而是使用默认调用 URL。
我们是否遗漏了什么,或者这可能是 Chalice 或 AWS 问题?
我们找到了问题的根源。
显然,我们的 API 密钥绑定的使用计划是为另一个 API 配置的。
我们所要做的就是将 API 添加到使用计划的 相关 API 阶段。
我们已经将 Chalice 应用程序部署到 AWS,并且在调用需要 API 密钥的端点时收到以下响应:
{
"message": "Forbidden"
}
不需要 API 密钥的端点可以毫无问题地调用。
奇怪的是,我们过去能够毫无问题地调用需要 API 密钥的端点,因此我们也在考虑是否是 Chalice 或 AWS 更新导致了这个问题。
我们正在使用 Postman 在请求中将 API 密钥作为 Header 传递:
x-api-key: Our API Key's Value.
我们也没有在 CloudWatch 中获得任何日志,大概是因为由于该问题实际上并未调用端点。 AWS 甚至在请求到达我们的端点之前就阻止了该请求。
我们的API键配置如下:
API 键:
- ID:我们密钥的 ID。
- 名称:我们密钥的名称。
- API 键:我们键的值。
- 已启用:已启用
相关使用计划:
- ID:我们计划的 ID。
- 名称:我们计划的名称。
- 节流:不节流。
- 配额:没有配额。
API 密钥和使用计划看起来配置正确,因此我们假设问题不在于 API 密钥本身。
来自 "Troubleshoot API Gateway 403 Forbidden errors" 文档:
如果 API 密钥无效(或者,我们假设不正确),我们将收到以下消息:
"Invalid API Key identifier specified"
但是,我们收到的是一般性“禁止”错误:
"Forbidden"
文档仅列出了导致此错误的三个可能原因:
在 API.
中激活 AWS WAF 时,请求被 Web 应用程序防火墙 (WAF) 过滤阻止使用 public DNS 名称从 Amazon Virtual Private Cloud (Amazon VPC) 中调用私有 API 时,“主机”或“x-apigw-api-id " 请求中缺少 header。
调用方在禁用默认端点后使用默认 execute-api 端点调用 REST API。
我们认为上述 none 个原因适用于我们,原因如下:
我们的 API 网关中没有配置 WAF(也没有 Web ACL)。
我们不会从 Amazon VPC 中调用私有 API。
我们没有禁用默认端点,而是使用默认调用 URL。
我们是否遗漏了什么,或者这可能是 Chalice 或 AWS 问题?
我们找到了问题的根源。
显然,我们的 API 密钥绑定的使用计划是为另一个 API 配置的。
我们所要做的就是将 API 添加到使用计划的 相关 API 阶段。