限制API访问速率

假如我们发现一个合作伙伴使用 PHPCrawler 机器人,它偶尔会产生流量峰值,从而减慢用户访问的网站速度。合作伙伴已被通知减少这些峰值,在等待他们修复时,我们需要对 PHPCrawler 机器人进行速率限制,以避免对用户访问网站的性能产生影响。

PHPCrawler的访问会与awswaf:driven:aws:bot-control:bot:name:phpcrawl标签匹配。我们将速率限制为每 5 分钟 100 个请求,达到限制后,响应应遵循 RFC 6585,返回 http 错误代码 429(请求过多),并带有 Retry-After 标头,指示请求者在发出新请求之前应等待 900 秒(15 分钟)。

操作

为WebACL添加一条自定义规则:

image-20240101221353246

规则详情

  1. 规则类型:Rate builder
  2. 名称: phpcrawl-rate-limiter
  3. 类型:基于速率的规则

image-20240101221446707

Rate-limiting设置

  1. 速率限制:100
  2. 请求聚合:源IP地址
  3. 检查范围和速率限制:仅考虑与规则声明中的条件相匹配的请求(Only consider requests that match the criteria in a rule statement) phpcrawl-rate-details phpcrawl-rate-details

只统计符合以下语句的请求

  1. 如果请求:与statement匹配
  2. 检查:有标签
  3. 匹配键:awswaf:managedaws:bot-control:bot:name:phpcrawl

image-20240101221706169

  1. Action:block
  2. 自定义响应:启用
  3. 响应代码:429
  4. 单击Add new custom header
  5. 响应标头:
    1. Key:Retry-After
    2. Value:900
  6. 点击 “Add rule”

phpcrawl-动作设置规则优先级页面上,确保新的 phpcrawl-rate-limiter 规则在AWS-AWSManagedRulesBotControlRuleSet下方:

image-20240101221951190

不断请求页面。最初,请求将产生200 OK响应

image-20240101222110878

当触发限速规则时,请求将被阻止并导致429 Too Many Requests响应, 响应中包含 Retry-After标头

image-20240101222206402