Apigee 还很陌生,仍在学习很多东西。
场景是我们将开始通过 client.ip 对请求进行存储,而不是对进入 API 代理的所有内容进行存储,但我们有一个受信任的 IP 地址列表,即监控工具以及我们的内部代理服务器......这些人受到速率限制的可能性更高,因为他们的流量更大。我们希望对于那些可信端点列表忽略峰值阻止和配额。
我们使用以下方式调用尖峰捕获脚本:
<PreFlow name="PreFlow">
<Request>
<Step>
<Name>SpikeArrest.SpikeArrest>
</Step>
</Request>
<Response/>
</PreFlow>
我们的 Spike 逮捕代码是:
<SpikeArrest name="SpikeArrest.SpikeArrest">
<Rate>100PS</Rate>
<UseEffectiveCount>true</UseEffectiveCount>
</SpikeArrest>
我们将朝着以下 Spike 逮捕代码迈进
<SpikeArrest name="SpikeArrest.SpikeArrest">
<Rate>20PS</Rate>
<UseEffectiveCount>true</UseEffectiveCount>
<Identifier ref="client.ip"/>
</SpikeArrest>
是否有人设法实现条件代码,使尖峰捕获和/或配额能够在 client.ip 所在的位置运行!=到受信任的 IP 列表...我想我需要以某种方式修改我的流前尖峰捕获步骤以有条件地进行仅在 client.ip != 到包含受信任 IP 地址列表的文件中执行...
如果有人有可以分享的工作示例,我会很感激,因为可以在 Apigee 文档上看到这一点。
检查了 Apigee 文档以获取信息,虽然对香草尖峰逮捕/配额设置非常清楚,但它并没有真正进入有条件的兔子洞。
我认为尖峰阻止策略本身没有适合您的用例的配置。
但是,您应该能够使用开发人员应用程序自定义属性和尖峰阻止策略的步骤条件的组合来实现您的要求(假设您的 API 确实使用 OAuth/验证 API 密钥策略进行保护)。
对于需要绕过尖峰逮捕策略的客户,请在各自的开发者应用程序中添加自定义属性,例如
ratelimit.skip = true
。假设您的验证 API 密钥策略名为 verify-api-key
,在预流程中,将以下条件添加到尖峰抑制策略步骤中。<Condition>verifyapikey.verify-api-key.app.ratelimit.skip != true</Condition>
所以你的预流应该是这样的 -
<PreFlow name="PreFlow">
<Request>
<Step>
<Name>SpikeArrest.SpikeArrest>
<Condition>verifyapikey.verify-api-key.app.ratelimit.skip != true</Condition>
</Step>
</Request>
<Response/>
</PreFlow>
这应该跳过对自定义属性
ratelimit.skip
设置为 true
的开发者应用程序的速率限制检查,并对所有其他应用程序强制执行。
如果您使用 OAuth 策略,变量名称会相应更改 -
<Condition>app.ratelimit.skip != true</Condition>
参考文献: