获取消息:来自AWS API网关的禁止回复

Fab*_*Fab 43 amazon-web-services aws-api-gateway

[已解决] AWS(和StackOverflow)新手.我正在尝试在AWS上创建一个lambda服务,并通过API网关从外部访问它,无需身份验证或限制.

为了方便起见,我现在将网关设置为模拟.

在API的Get方法上,Authorization设置为None,API Key为not required.

当我尝试这个时,我得到{"message":"Forbidden"} (如果我将它连接到实际的lambda服务,则相同的消息).

有关如何使其可访问的任何建议?谢谢

小智 61

如果您将"API Key Required"选项设置为true,请检查以下内容.

  1. 您必须将'x-api-key'HTTP标头参数传递给API网关.
  2. 必须创建API密钥.
  3. 此外,您需要在API网关控制台上检查API密钥的使用计划.

  • 这对我有用,但它必须是'X-Api-Key'看起来像资本化很重要 (4认同)
  • 感谢Daniel,您的第三步使我可以纠正我的错误。 (2认同)
  • 这三个步骤都是为我做的.我已经创建了一个API密钥,但没有将它与使用计划或任何东西相关联.非常感谢! (2认同)
  • 答案中的第3点通常被忽略。原来是我的问题。 (2认同)

小智 48

在API Gateway仪表板上,选择Resources,单击Actions并选择Deploy API.在您第一次部署之前,您将获得的唯一响应是{"message":"Forbidden"}.

  • 我要补充一点,部署后请确保将您的阶段名称添加到URL:abcdefg.execute-api.us-east-2.amazonaws.com/STAGE_NAME/ (7认同)

kon*_*ten 23

如果您使用自定义域名并忘记选择目标登台,您将收到Forbidden消息.

只需转到Custom Domain NamesEdit在您的域下单击,然后选择下面的阶段Base Path Mappings.

  • 这对我来说也是如此。尽管他们在这里稍微更新了 GUI。现在正确的区域是进入自定义域名 > API 映射 (8认同)
  • 效果很好,请确保遵循 @jneves 的答案并(重新)部署。设置映射后,直到我重新部署从基本路径映射中选择的阶段后,它才显示出来。 (2认同)

小智 8

我可能为时已晚,但 API 网关会给出“禁止”消息的原因之一是当您在 GET 操作的请求正文中传递数据时。要解决该问题,要么使您的资源 POST,要么不在请求正文中传递数据。

  • 你救了我的命! (2认同)

mad*_*ead 7

这可能并不明显,但在使用 AWS API Gateway 时看到“禁止”错误的另一个原因可能是调用了与任何部署的 API 方法都不对应的错误 URL。如果您实际上访问了错误的 URL(例如,而不是调用https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users(注意dev阶段之前users)您调用了https://9999xx9x99.execute-api.us-east-1.amazonaws.com/users(没有阶段),则可能会发生这种情况。您希望得到 404,但您会得到 403。

顺便说一句:在您对https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users调用进行部署后https://9999xx9x99.execute-api.us-east-1.amazonaws.com/user(注意这里的单数名词形式),您也会得到... 403,但带有“缺少身份验证令牌”消息!


Job*_*gan 6

我有类似的问题,我有以下几点:

  1. 自定义域(边缘优化)
  2. 多阶段(开发,分期,生产)

我也没有设置任何授权或限制来简化操作.

我能够通过为每个阶段(dev,staging,prod)添加Base Path Mappings来解决问题.

  • 我有相同的基本设置和多个 API。有趣的是,尽管实际上“仅部署了一个”API,但我收到“禁止”消息,直到我为未部署的 API 设置基本路径映射。 (2认同)

vaq*_*han 6

您需要在舞台上部署您的api,并使用舞台URL转到“资源”,单击“操作”,然后选择“部署API”

现在,如果您遇到错误

{“消息”:“禁止”}。

请检查以下步骤

1)如果启用api密钥复制并在邮递员中传递密钥

在此处输入图片说明

2)现在您仍然遇到相同的错误,这意味着您需要创建使用计划

在此处输入图片说明

3)设置限制并将计划分配给您的api

在此处输入图片说明


tgm*_*itt 6

我经历过但这里没有提到的唯一另一个原因是,您在发布后太快地尝试访问 API。我点击发布并看到“您的 API 可以通过以下方式访问”域名,然后立即将其复制并粘贴到 Postman 中进行检查。

我收到了禁止的消息。什么都不改变。检查所有设置以确保我没有执行任何操作 - 一切都正确。有点扯我的头发。

几分钟后返回尝试,因为我很确定我做的一切都是正确的 - 它有效。

DNS 人。无论互联网有多快 - 它都不是即时的:)


小智 6

就我而言,这是因为我使用了

托管AllViewer

来源请求政策。切换到

托管用户代理RefererHeaders

解决了问题。

我的客户发送了Accept-EncodingCloudFront 不喜欢的标头。您可以通过创建类型为“白名单”的自定义源请求策略来验证这一点,尽管Accept-Encoding可以从列表中选择,但在创建策略时您会收到错误:"The parameter Headers contains Accept-Encoding that is not allowed."

不幸的是我没有找到相关文档。也不知道为什么不允许这样一个不显眼的标题。


bis*_*isw 5

如果将必需的“ API”密钥设置为true,则需要将api密钥作为标头传递。

API密钥作为标头字段“ x-api-key”传递。即使在标头中添加此字段后,也可能会出现此问题。在这种情况下,请验证以下几点

  • 您有使用计划吗?如果不需要创建一个。
  • 将您的API与使用计划链接。为此添加一个阶段,它将链接您的API。
  • 您有API密钥吗?如果不是,则需要创建一个API密钥并启用它。
  • 将与您的API链接的使用计划添加到此API密钥。为此,添加使用计划。