【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)

问题描述

Azure API Management 是否可以通过请求中的Path来限定其被访问的频率? 在系统Request中发现某个Path 在短时间内被频繁的调用,影响了后台服务的性能及安全,所以想限制在一定时间内允许被调用(Call)的次数,如1秒钟一次。如被限制的URL Path的格式为:/api/prodregist/00001。

而在Azure APIM的Policy设定文档中,可以通过设定” 按密钥限制调用速率 “ 来限制客户端的访问。同理,可以根据该文档示例写出能限制URL Path的表达式。

 

解决办法

在APIM中设定访问限制API 入站策略(Inbound Policy)。 如下的内容就是对URL = ”https://testapi.azure-api.cn/prodregist/sessions“ 进行了每一秒钟call一次的限制。renewal-period = “1” 表示一秒钟。

<rate-limit-by-key 
calls="1"
renewal-period="1"
counter-key="@(context.Request.OriginalUrl.ToString())"
increment-condition="@(context.Request.OriginalUrl.ToString()=="https://testapi.azure-api.cn/prodregist/sessions")"
/>

在API的策略设置页面添加的位置如下图所示:

同理,如果需要对客户端的IP地址进行限制,可以使用如下表达式:

 

参考资料

APIM管理访问限制策略(按密钥限制调用速率)https://docs.microsoft.com/zh-cn/azure/api-management/api-management-access-restriction-policies#limit-call-rate-by-key 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

原文地址:https://www.cnblogs.com/lulight/p/14829083.html