在 AWS API Gateway 中,我可以在不附加 API 密钥的情况下使用使用计划吗?
Posted
技术标签:
【中文标题】在 AWS API Gateway 中,我可以在不附加 API 密钥的情况下使用使用计划吗?【英文标题】:In AWS API Gateway, can I use a Usage Plan without attaching an API Key? 【发布时间】:2020-02-13 18:19:19 【问题描述】:有关 API Gateway 使用计划的 AWS 文档都暗示它们是使用 API 密钥创建/附加到 API 密钥的,但没有说明没有 API 密钥将如何运行。我有一个未经授权的 API,我想对其应用限制。我可以创建使用计划,将其附加到资源,而不将 API 密钥关联到它吗?它会起作用吗?
上下文:我正在尝试使用 CloudFormation 的 Java SDK 来定义堆栈,但我无法弄清楚如何以编程方式指定特定于资源的限制。我也会接受一个答案,告诉我如何在不使用控制台的情况下执行此操作。
【问题讨论】:
我也想知道这个,我被这个弄糊涂了。我有一个应用程序,我想为所有用户应用油门设置(burstlimit、ratelimit)。为什么我需要一个 api 密钥? 【参考方案1】:我可以创建一个使用计划,将其附加到资源,而无需 将 API 密钥与它相关联?它会起作用吗?
不,但根据您的用例,我认为您需要服务器端限制而不是每个客户端限制。 The docs概述区别:
Amazon API Gateway 提供两种与节流相关的基本类型 设置:
服务器端节流限制适用于所有客户端。这些限制设置的存在是为了防止您的 API(以及您的帐户)被 被太多的请求淹没了。
每客户端限制适用于使用与您的使用策略关联的 API 密钥作为客户端标识符的客户端。
在 AWS 控制台中设置服务器端方法限制
您可以为每个阶段的所有方法设置默认速率和突发限制。在 AWS 控制台中,这可以通过转到 Stages > your_stage > Settings > Default Method Throttling 来完成。
在 Cloudformation 模板中设置服务器端方法限制
我不知道如何指定特定于资源的限制 以编程方式。
请参阅下面的 Cloudformation 模板 sn-p 以使用方法设置创建阶段,来自 here:
Resources:
Prod:
Type: AWS::ApiGateway::Stage
Properties:
StageName: Prod
Description: Prod Stage
RestApiId: !Ref MyRestApi
DeploymentId: !Ref TestDeployment
DocumentationVersion: !Ref MyDocumentationVersion
ClientCertificateId: !Ref ClientCertificate
Variables:
Stack: Prod
MethodSettings:
- ResourcePath: /
HttpMethod: GET
MetricsEnabled: 'true'
DataTraceEnabled: 'false'
- ResourcePath: /stack
HttpMethod: POST
MetricsEnabled: 'true'
DataTraceEnabled: 'false'
ThrottlingBurstLimit: '999'
- ResourcePath: /stack
HttpMethod: GET
MetricsEnabled: 'true'
DataTraceEnabled: 'false'
ThrottlingBurstLimit: '555'
【讨论】:
【参考方案2】:很遗憾,如果没有 api 密钥,使用计划将无法运行。来自官方documentation。
使用计划指定谁可以访问一个或多个已部署的 API 阶段和方法,以及他们可以访问它们的数量和速度。该计划使用 API 密钥来识别 API 客户端并计量对每个密钥的相关 API 阶段的访问。它还允许您配置对单个客户端 API 密钥强制执行的节流限制和配额限制。
【讨论】:
【参考方案3】:你可以像这样配置你的ThrottleSettings
in AWS::ApiGateway::UsagePlan
:
Resources:
UsagePlan:
Type: AWS::ApiGateway::UsagePlan
Properties:
ThrottleSettings:
BurstLimit:
RateLimit:
来自 API Gateway 在Throttling API Requests for Better Throughput 上的文档:
Amazon API Gateway 提供两种与节流相关的基本类型 设置:
服务器端限制适用于所有客户端。这些限制设置的存在是为了防止您的 API 和您的帐户 被太多的请求淹没了。
每客户端限制适用于使用与您的使用策略关联的 API 密钥作为客户端标识符的客户端。
【讨论】:
这不是我要问的。使用计划文档没有说明如果您不附加任何 API 密钥,它将如何表现。它会阻止所有访问吗?它是否对所有呼叫者强制执行?它什么都不做吗?或者,也可以通过 CloudFormation 以编程方式设置方法级限制,而不使用使用计划。以上是关于在 AWS API Gateway 中,我可以在不附加 API 密钥的情况下使用使用计划吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 API Gateway 中使用 AWS Lambda 授权方