【问题标题】:In AWS API Gateway, can I use a Usage Plan without attaching an API Key?在 AWS API Gateway 中,我可以在不附加 API 密钥的情况下使用使用计划吗?
【发布时间】:2020-02-13 18:19:19
【问题描述】:

有关 API Gateway 使用计划的 AWS 文档都暗示它们是使用 API 密钥创建/附加到 API 密钥的,但没有说明没有 API 密钥将如何运行。我有一个未经授权的 API,我想对其应用限制。我可以创建使用计划,将其附加到资源,而不将 API 密钥关联到它吗?它会起作用吗?

上下文:我正在尝试使用 CloudFormation 的 Java SDK 来定义堆栈,但我无法弄清楚如何以编程方式指定特定于资源的限制。我也会接受一个答案,告诉我如何在不使用控制台的情况下执行此操作。

【问题讨论】:

  • 我也想知道这个,我被这个弄糊涂了。我有一个应用程序,我想为所有用户应用油门设置(burstlimit、ratelimit)。为什么我需要一个 api 密钥?

标签: amazon-web-services amazon-cloudformation aws-api-gateway throttling aws-cdk


【解决方案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 以编程方式设置方法级限制,而不使用使用计划。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2016-12-27
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多