DR REST API 속도 제한기는 API 리소스 고갈 및 무차별 암호 대입 공격(brute force attack)의 위험을 관리하는 메커니즘입니다.

속도 제한기는 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 60,000밀리초(1분)
Service DR REST API 서비스 이름당 요청을 고려합니다. DR REST API에는 srm, vrconfigure라는 세 가지 서비스 이름이 있습니다. 'srm v1'과 'srm v2'의 서비스 이름은 'srm'으로 동일합니다. serviceRateLimitQuota 1000
serviceRateLimitWindow 60,000밀리초(1분)
Session 세션당 요청을 고려합니다. sessionRateLimitQuota 50
sessionRateLimitWindow 60000밀리초(1분)
n/a 런타임 메모리 지문을 줄이기 위해 사용되지 않는 요청 속도 제한기 데이터 구조를 주기적 정리합니다. 값이 0(0)이면 정리가 전혀 수행되지 않음을 의미합니다. rateLimitLogPurgeInterval 7,200,000밀리초(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 응답에는 클라이언트 요청을 처리한 마지막 속도 제한 계층의 속도 제한 헤더가 포함되어 있습니다.

최적의 속도 제한 구성을 설정하기 위한 모범 사례

최적의 속도 제한 구성을 설정하려면 다양한 요소를 고려해야 합니다.

  • 속도 제한기 구성의 기본값으로 시작합니다.
    • ipRateLimitQuota, ipRateLimitWindow, serviceRateLimitQuota, serviceRateLimitWindow, sessionRateLimitQuota, sessionRateLimitWindow
    • rateLimitLogPurgeInterval
  • 오류 코드 429 Too Many Requests가 있는 요청 응답을 수신하고 그에 따라 작업을 수행합니다.
    • 다음 속도 제한 기간 동안 기다린 후 속도가 제한된 요청을 반복합니다.
    • 클라이언트 측에서 요청 강도를 줄입니다.
    • 속도 제한 구성 업데이트 - 관련 구성 RateLimitQuota를 늘리거나 관련 구성 RateLimitWindow를 줄입니다.
  • 응답 헤더 RateLimit-Limit, RateLimit-RemainingRateLimit-Reset을 분석하고 그에 따라 작업을 수행합니다.
    • 클라이언트 측의 요청 강도를 필요한 방향으로 변경합니다.
    • 속도 제한 구성을 필요한 방향으로 업데이트합니다.