quota-by-key 策略允许根据密钥强制实施可续订或有生存期的调用量和/或带宽配额。 密钥的值可以是任意字符串,通常使用策略表达式来提供密钥。 可以添加可选增量条件,指定应在配额范围内的请求。 如果多个策略增加相同的键值,则每个请求的键值仅增加一次。 超过调用速率时,调用方会收到 403 Forbidden 响应状态代码。

问题描述

API Management 访问限制策略:quota-by-key ,该策略有个属性renewal-period,它的单位为秒,在实验中多次设置此值,解析出来的结果都与设置的时间不匹配。

APIM 策略设置如下(如 renewal-period="3000"  设置为50分钟):

# policy 定义
<inbound>
<base />
<quota-by-key calls="1" renewal-period="3000" counter-key="@(context.Request.IpAddress)" />
</inbound>

设置完成后,马上在APIM中发送请求进行测试,测试时间Fri, 21 Jan 2022 02:53:16 GMT,但是结果显示 Quota will be replenished in 00:26:44。

理解误区为:

当设置策略的时候,间隔时间命名时50分钟,但为什么测试发现间隔时间不是40多分钟呢? 而是26分钟,所以这个renewal-period参数的规律到底如何来理解呢?

问题分析

在对 quota-by-key 的属性文档进行查找发现,renewal-period 表示在重置配额之前等待的时间长度,以秒为单位。所以 renewal-period 配置的是quota reset的间隔时间,而不是从当前时间(如策略修改的时间)开始递减的计时器。当设置为 0 时,时间段设置为无限。

举例如,假设当前时间为00:11:36,设置了renewal-period为10分钟(600),那么以00:00:00起始,各个10分钟的间隔(00:10, 00:20 ... 11:50, 12:00, 12:10 ...) 时, quota都会重置。

因此,00:41:36s时触发的Quota Exceed,返回的retry-after是8分钟24秒(504秒)

HTTP/1.1 403 Quota Exceeded
content-length: 100
content-type: application/json
date: Thu, 20 Feb 2022 00:41:36 GMT retry-after: 504
vary: Origin
{
"statusCode": 403,
"message": "Out of call volume quota. Quota will be replenished in 00:08:24."
}

此外,如果对于周期非常长的renewal-period,还支持一种周期式的格式(P*Y*M*DT*H*M*S),如P0Y4M0DT0H0M0S:表示0年4个月0天,0小时0分0秒的时间段。

示例为:

    <inbound>
<base />
<quota-by-key calls="1" renewal-period="P0Y4M0DT0H0M0S" counter-key="@(context.Request.IpAddress)" />
</inbound> ####该策略以4个月间隔进行重置。计算间隔的起始日期是1月1日,因此会在每年的4月底,8月底,12月底进行重置。

参考资料

API 管理访问限制策略:https://docs.azure.cn/zh-cn/api-management/api-management-access-restriction-policies#LimitCallRateByKey

【Azure API 管理】API Management 访问限制策略[quota-by-key] 中参数 [renewal-period] 的实验和理解的更多相关文章

  1. 【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token

    问题描述 在APIM中配置对传入的Token进行预验证,确保传入后端被保护的API的Authorization信息正确有效,可以使用validate-jwt策略.validate-jwt 策略强制要求 ...

  2. 【Azure API 管理】从微信小程序访问APIM出现200的空响应的问题中发现CORS的属性[terminate-unmatched-request]功能

    问题描述 使用微信小程序调用APIM(API Management)中的接口,发现POST和PUT请求被拦截,返回的状态码为200,但是无消息内容. 在小程序中的调用JS代码如: 通过浏览器测试得到的 ...

  3. 【Azure API 管理】在APIM 中添加 log-to-eventhub 策略,把 Request Body 信息全部记录在Event Hub中

    问题描述 根据文档 https://docs.azure.cn/zh-cn/api-management/api-management-howto-log-event-hubs, 可以将Azure A ...

  4. 【Azure API 管理】API Management如何有效且快速更新呢?如对APIs/Policy等设置内容

    问题描述 APIM中的内容(API, Policy)等内容,如果有需要更新时候,通常可以在Azure APIM门户上操作,通过一个接口一个设置的修改,也可以针对一个接口导入/导出的方式修改.当APIM ...

  5. 【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求

    问题描述 使用Azure API Management, 想对一些固定的IP地址进行访问次数的限制,如被限制的IP地址一分钟可以访问10次,而不被限制的IP地址则可以无限访问? ChatGPT 解答 ...

  6. 如何通过Azure Service Management REST API管理Azure服务

    通过本文你将了解: 什么是Azure Service Management REST API 如何获取微软Azure 订阅号 如何获取Azure管理证书 如何调用Azure Service Manag ...

  7. 【Azure API 管理】解决API Management添加AAD Group时遇见的 Failed to query Azure Active Directory graph due to error 错误

    问题描述 为APIM添加AAD Group时候,等待很长很长的时间,结果添加失败.错误消息为: Write Groups ValidationError :Failed to query Azure ...

  8. 【Azure API 管理】APIM集成内网虚拟网络后,启用自定义路由管理外出流量经过防火墙(Firewall),遇见APIs加载不出来问题

    问题描述 使用 Azure 虚拟网络,Azure APIM 可以管理无法通过 Internet 访问的 API,达到以保护企业内部的后端API的目的.在虚拟网络中,启用网络安全组(NSG:Networ ...

  9. 【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

    问题描述 使用微软API管理服务(Azure API Management),简称APIM. 因为公司策略要求只能内部网络访问,所以启用了VNET集成.集成方式见: (在内部模式下使用 Azure A ...

  10. 【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."

    API 管理 (APIM) 是一种为现有后端服务创建一致且现代化的 API 网关的方法. 问题描述 在设置了APIM客户端证书,用户保护后端API,让请求更安全. 但是,最近发现使用客户端证书的API ...

随机推荐

  1. fasthttp 中如何使用`Transfer-Encoding: chunked` 方式的流式内容输出

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 具体的思路是这样:通过 RequestCtx 的 Conn ...

  2. 数组 vs. 切片

    在Go编程语言中处理数据时,经常会遇到数组和切片.这两者是不同的数据结构,有各自的特性和用途.本文将对Go中的数组和切片进行比较,以帮助大家更好地理解它们. 1. 长度不同 一个主要的区别是长度.在G ...

  3. Typora 1.6.7永久激活

    介绍Typora介绍 具体看上面的我就不多介绍了 接下来我们开始教程 需要的文件 Typora安装包 破解补丁包 安装包下载 破解补丁下载 接下来我们全部下载后获得一个安装包一个补丁 安装包直接安装就 ...

  4. 【主流技术】15 分钟掌握 Redis 的安装部署和基本特性

    目录 前言 一.Redis 概述 1.1Redis 是什么? 1.2Redis 能做什么? 1.3基础知识 二.Redis 安装与基本命令 2.1Windows 安装 方式一 方式二 2.2Linux ...

  5. 解决问题:ACM-Reference-Format使用这个style后,文献引用顺序和正文不一致

    解决问题:latex中bib引用顺序不正确,引用顺序和正文不一致_丨汀.的博客-CSDN博客问题:生成pdf时文献应用会乱序引用bib格式的参考文献时,会这么写:\bibliographystyle{ ...

  6. 7.2 Windows驱动开发:内核注册并监控对象回调

    在笔者上一篇文章<内核枚举进程与线程ObCall回调>简单介绍了如何枚举系统中已经存在的进程与线程回调,本章LyShark将通过对象回调实现对进程线程的句柄监控,在内核中提供了ObRegi ...

  7. npm旧淘宝镜像过期,更换新淘宝镜像

    1. 清空缓存 npm cache clean --force 2.设置新淘宝镜像 npm config set registry https://registry.npmmirror.com/ 3. ...

  8. webpack重新打包清空dist文件夹的问题

    1.5.20.0以上版本才支持output属性里的clean:true 5.20.0+ 5.20以下版本清除dist文件内容一般使用插件 clean-webpack-plugin, 5.20版本以后o ...

  9. 记一次在服务器上运行node.js程序时无法通过nohup xxx & 方式挂起的问题

    由于业务需求 每天要在服务器上整理一组数据,为了方便就用node.js来写了.但是运行的时候发现了一个问题 明明使用了nohup main.js &的方式后台运行了程序 但是一旦我关闭了she ...

  10. 开源免费绘制小工具drawio推荐

    最近给客户做架构评估写报告时,需要画一些架构示例简图,需求很简单,没到非要用付费软件的程度. 同事推荐一款开源免费的绘制软件drawio,实际体验不错,可以满足我的使用需求. drawio官方网站: ...