Kong API关键策略

时间:2019-04-03 10:29:54

标签: api-key api-gateway kong kong-plugin

我想将Kong用作我所有上游服务的API网关。而且我想使用API​​密钥,以便我的客户可以使用它们来使用允许他们使用的一些API。

有一个用于管理API密钥的插件:https://docs.konghq.com/hub/kong-inc/key-auth/

但是我想知道是否可以将属性添加到某些API密钥或将其链接到某些配置。

让我举例说明:

我有3个api

  
      
  • API 1
  •   
  • API 2
  •   
  • API 3
  •   

在Kong API网关上,我要使用速率限制。所以我想为2个具有某些属性的客户生成API密钥

  
      
  • 客户X:基本订阅,其API 1的速率限制为每分钟10个请求,API 2的速率限制为每分钟20个请求
  •   
  • 客户Y:API 2的高级订阅,其速率限制为每分钟5000个请求和API 3的每分钟1000个请求
  •   

因此,在Kong中,我为这3个API创建了3个服务,并向其中添加了速率限制插件。是否有任何方法可以让速率限制插件(基于请求中发送的API密钥)知道对于刚刚输入的请求应该使用哪个限制?

在我看来,我每次都需要为具有特定值的特定速率限制的相同API创建新服务。与许多客户和api打交道时,这感觉有些难以控制。

是否可以根据传递的API密钥来获取速率限制值?

还是有解决方案?还是这是我们在API网关中想要的实际行为,如果可以,为什么?

2 个答案:

答案 0 :(得分:0)

Kong Enterprise Edition有一个名为“ Rate Limiting Advanced”的插件,可以解决此问题。它允许您为每个速率限制插件指定一个“标识符”,对于这种特殊情况,您将使用“标识符:消费者”。如果您要为同一API和不同使用者使用两个不同的速率限制,例如

  • API2:consumerX的转速为20rpm
  • API2:consumeryY的转速为5000rpm

然后,您必须在使用者而非api上配置速率限制。 另外,在您的问题中,您指的是apis;自v0.13.0起,不推荐使用FYI api个对象,您应该移至route/service个对象。

答案 1 :(得分:0)

您也可以在使用者级别配置插件。这有效地将适当的速率限制应用于每个使用者(API密钥)。

文档中的示例代码:

$ curl -X POST http://kong:8001/consumers/{consumer}/plugins \
    --data "name=rate-limiting" \
     \
    --data "config.second=5" \
    --data "config.hour=10000"

文档:https://docs.konghq.com/hub/kong-inc/rate-limiting/#enabling-the-plugin-on-a-consumer