DR REST API 速率限制器是一种机制,用于管理 API 资源耗尽和暴力攻击带来的风险。

Site Recovery Manager 8.8 及更高版本和 vSphere Replication 8.8 及更高版本的 DR REST API 中提供了速率限制器。DR REST API 速率限制器在安全性和性能之间实现了一种平衡。
表 1. DR REST API 请求速率限制层
描述 配置 默认值
IP address 考虑每个 IP 地址的请求数。 ipRateLimitQuota 100
ipRateLimitWindow 60000 毫秒(1 分钟)
Service 考虑每个 DR REST API 服务名称的请求数。在 DR REST API 中,有三个服务名称:srmvr configure。“srm v1”和“srm v2”具有相同的服务名称“srm”。 serviceRateLimitQuota 1000
serviceRateLimitWindow 60000 毫秒(1 分钟)
Session 考虑每个会话的请求数。 sessionRateLimitQuota 50
sessionRateLimitWindow 60000 毫秒(1 分钟)
n/a 定期清理过时的请求速率限制器数据结构,以减少运行时内存指纹。值为 0(零)表示根本不执行清理。 rateLimitLogPurgeInterval 7200000 毫秒(2 小时)

DR REST API 速率限制器由三个层组成,这些层呈链式运行,根据层的条件对入站请求进行速率限制。如果满足层的条件,将立即返回请求响应,从而跳过层链的其余层。DR REST API 速率限制器层链按该特定顺序依次为 IP 地址、服务、会话。

可以通过在 dr-rest-api.properties 文件中添加或更新所指定属性的值来更改 DR REST API 速率限制器配置。此文件位于 /opt/vmware/dr-rest/lib/ 文件夹中。如果在 DR REST API dr-rest-api.properties 配置文件中未明确定义速率限制器属性,则速率限制器将使用默认值。要预定义配置值,请添加相应的配置(如果缺少),并设置所需的值。更新后的值将在新的速率限制时段开始时生效。

dr-rest-api.properties 文件示例

...
ipRateLimitQuota=100
ipRateLimitWindow=60000
serviceRateLimitQuota=1000
serviceRateLimitWindow=60000
sessionRateLimitQuota=50
sessionRateLimitWindow=60000
rateLimitLogPurgeInterval=0
...

HTTP 响应

每个 DR REST API 请求响应都具有以下标头。
  • RateLimit-Limit - 时段内客户端请求的服务器配额。
  • RateLimit-Remaining - 当前时段的剩余配额。
  • RateLimit-Reset - 当前时段的剩余时间,以毫秒为单位指定。
注意: 当 HTTP 请求受到速率限制时,响应错误代码为 429 Too Many Requests,标头 RateLimit-Remaining 为 0(零)。DR REST API 响应包含来自处理客户端请求的最后一个速率限制层的速率限制标头。

设置最佳速率限制配置的最佳做法

设置最佳速率限制配置需要考虑各种因素。

  • 首先考虑速率限制器配置的默认值。
    • ipRateLimitQuotaipRateLimitWindowserviceRateLimitQuotaserviceRateLimitWindowsessionRateLimitQuotasessionRateLimitWindow
    • rateLimitLogPurgeInterval
  • 侦听错误代码为 429 Too Many Requests 的请求响应,并采取相应措施。
    • 等待下一个速率限制时段,然后重复受到速率限制的请求。
    • 降低客户端的请求强度。
    • 更新速率限制配置 - 增加相关配置 RateLimitQuota 和/或减少相关配置 RateLimitWindow
  • 分析响应标头 RateLimit-LimitRateLimit-RemainingRateLimit-Reset 并采取相应措施。
    • 更改所需方向的客户端请求强度。
    • 更新所需方向的速率限制配置。