rate limit quota - 집계, IP별, 엔티티별

rate limit quota - 집계, IP별, 엔티티별

Vault 클라이언트 애플리케이션 수가 증가하면 Vault로 들어오는 요청이 Vault 성능을 저하시킬 수 있습니다. Vault 환경의 안정성과 네트워크, 그리고 스토리지 리소스 소비를 보호하려면 rate limit quota와 lease count quota를 사용하세요.

출처: 문서

본문

rate limit quota는 토큰 버킷(token bucket) 알고리즘을 사용해 API 속도 제한(rate limiting)을 적용합니다. Vault Enterprise 클러스터의 경우 rate limit quota는 group_by 옵션을 지원하며, 공통 특성을 기준으로 요청 그룹을 정의해 같은 버킷에 넣을 수 있습니다.

사용 가능한 group_by 모드는 다음과 같습니다:

  • ip - 소스 IP 주소별로 요청을 그룹화합니다 (기본값)
  • none - rate limit quota 규칙과 일치하는 모든 요청을 함께 그룹화합니다
  • entity_then_ip - 엔티티 ID를 가진 인증된 요청은 엔티티 ID별로, 인증되지 않은 요청(또는 인증이 엔티티와 연결되지 않은 요청)은 IP별로 그룹화합니다
  • entity_then_none - 가능하면 엔티티 ID별로 요청을 그룹화하고, 나머지(예: 인증되지 않은 요청, 엔티티와 연결되지 않은 인증 요청)는 모두 함께 그룹화합니다

entity_then_ip 또는 entity_then_none 모드의 group_by 옵션을 사용하면 보조 rate limit(secondary_rate)을 설정할 수 있습니다. 이 rate limit은 IP 또는 "none" 그룹에 속하는 요청에 적용되며, 엔티티 ID를 포함하는 인증된 요청은 rate 파라미터로 설정된 기본 rate limit의 적용을 받습니다.

예시:

아래 명령은 group_by 모드가 entity_then_none인 "my-rate"라는 rate limit quota를 초당 1,000개 요청 속도로 만듭니다. 보조 속도는 초당 2,000개 요청입니다. 즉 같은 엔티티를 인증하는 IP 주소 수와 관계없이 엔티티별로 초당 1,000개 요청이라는 뜻입니다. 초당 2,000개 요청의 보조 속도는 인증되지 않은 요청처럼 엔티티가 없는 모든 요청에 적용됩니다.

$ vault write sys/quotas/rate-limit/my-rate \
    rate=1000 \
    group_by=entity_then_none \
    secondary_rate=2000

entity_then_none 또는 entity_then_ip 모드는 연결된 엔티티를 기준으로 요청을 그룹화합니다. 이는 조직에 다음과 같은 상황이 있을 때 유용합니다:

  • 같은 IP를 사용하는 많은 워크로드
  • 확장·축소될 수 있는 여러 IP를 사용하는 단일 워크로드
  • 자주 변경되는 동적 IP

"none" 그룹 옵션은 해당 rate limit에 대해 지정된 수준(namespace, mount, path)의 모든 요청에 대해 하나의 버킷을 만듭니다. 예를 들어 조직이 고객에게 Vault를 서비스로 제공한다면 각 고객을 고유한 namespace로 분리할 수 있습니다. namespace에 설정된 rate limit의 기본 동작은 IP별 버킷을 만드는 것입니다. namespace로 들어오는 모든 엔티티와 워크로드에 집계(collective) rate limit을 설정하려면 "none" 옵션으로 이를 달성할 수 있습니다.

엔티티에는 quota를 구성하지 않습니다 quota는 namespace, mount, path, role에 구성할 수 있습니다. 하지만 특정 엔티티에 대한 rate limit quota를 구성할 수는 없습니다.

"customer-A" namespace에 group by entity 모드로 rate limit quota를 만들었다고 가정해 보겠습니다. Vault는 "customer-A" namespace로 들어오는 요청의 엔티티 ID를 확인하고, 일치하는 엔티티 ID를 기준으로 그룹화합니다.

리소스 quota 모범 사례

group_by 옵션은 기존 quota 기능을 보완합니다.

  • API 호출 대신 Terraform Vault provider를 사용해 quota를 구성하고 구현하세요.
  • 임대 폭발(lease explosion)로부터 Vault 클러스터를 보호하려면 임대 개수 quota를 하나 이상 정의하세요.
  • namespace 수준에서는 낮은 한도를, 특정 문제 경로에는 더 높은 한도를 구성하세요. 가장 세분화된 rate limit quota가 적용됩니다.
  • 요청에 어떤 rate limit quota 규칙이 적용되는지 이해하려면 Resource Quotas 페이지를 참고하세요.
  • noneentity_then_none 모드는 주의해서 사용하세요. 상위 수준(예: 전역 rate limit)에 group by none 모드로 rate limit quota를 구성하면, 단일 애플리케이션이 의도적으로든 실수로든 quota를 소진했을 때 Vault 환경이 응답하지 않게 될 수 있습니다. 그러면 다른 애플리케이션이나 사용자는 요청을 보낼 수 없게 됩니다.

Vault benchmark 도구 Vault 환경의 성능을 측정하려면 benchmark 도구를 사용할 수 있습니다. 자세한 내용은 Benchmark Vault performance 튜토리얼을 참고하세요.

더 알아보기