사용자 및 IP 속도 제한

Tier: Free, Premium, Ultimate Offering: Self-Managed

속도 제한은 웹 애플리케이션의 보안과 내구성을 향상시키는 데 사용되는 일반적인 기술입니다. 자세한 내용은 속도 제한을 참조하십시오.

다음과 같은 제한 사항은 기본적으로 비활성화됩니다:

참고: 기본적으로 모든 Git 작업은 먼저 인증되지 않습니다. 이로 인해 HTTP Git 작업은 비인가된 요청에 대한 속도 제한을 트리거할 수 있습니다.

참고: GitLab 14.8 이상에서는 API 요청의 속도 제한이 프론트엔드에서 수행되는 요청에 영향을 주지 않습니다. 이러한 요청은 항상 웹 트래픽으로 계산됩니다.

인증되지 않은 API 요청 속도 제한 활성화

인증되지 않은 요청 속도 제한을 활성화하려면:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 인증되지 않은 API 요청 속도 제한 활성화를 선택합니다.

    • 선택 사항. IP 당 단위 시간당 최대 인증되지 않은 API 요청 값을 업데이트합니다. 기본값은 3600입니다.
    • 선택 사항. 인증되지 않은 속도 제한 기간(초) 값을 업데이트합니다. 기본값은 3600입니다.

인증되지 않은 웹 요청 속도 제한 활성화

인증되지 않은 요청 속도 제한을 활성화하려면:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 인증되지 않은 웹 요청 속도 제한 활성화를 선택합니다.

    • 선택 사항. IP 당 단위 시간당 최대 인증되지 않은 웹 요청 값을 업데이트합니다. 기본값은 3600입니다.
    • 선택 사항. 인증되지 않은 속도 제한 기간(초) 값을 업데이트합니다. 기본값은 3600입니다.

인증된 API 요청 속도 제한 활성화

인증된 API 요청 속도 제한을 활성화하려면:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 인증된 API 요청 속도 제한 활성화를 선택합니다.

    • 선택 사항. 사용자 단위 시간당 최대 인증된 API 요청 값을 업데이트합니다. 기본값은 7200입니다.
    • 선택 사항. 인증된 API 속도 제한 기간(초) 값을 업데이트합니다. 기본값은 3600입니다.

인증된 웹 요청 속도 제한 활성화

인증된 웹 요청 속도 제한을 활성화하려면:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 인증된 웹 요청 속도 제한 활성화를 선택합니다.

    • 선택 사항. 사용자 단위 시간당 최대 인증된 웹 요청 값을 업데이트합니다. 기본값은 7200입니다.
    • 선택 사항. 인증된 웹 속도 제한 기간(초) 값을 업데이트합니다. 기본값은 3600입니다.

사용자 정의 속도 제한 응답 사용

속도 제한을 초과하는 요청은 기본적으로 429 응답 코드와 일반 텍스트 응답 바디(기본값은 나중에 다시 시도하세요)를 반환합니다.

사용자 정의 응답을 사용하려면:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 속도 제한을 초과한 클라이언트에게 보낼 평문 응답 텍스트 상자에 일반 텍스트 응답 메시지를 추가합니다.

분당 project/:id/jobs에 대한 최대 인증된 요청

시간 초과를 줄이기 위해 project/:id/jobs 엔드포인트는 기본적으로 인증된 사용자 당 분당 600회의 속도 제한을 가지고 있습니다.

최대 요청 수를 수정하려면:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 분당 project/:id/jobs에 대한 최대 인증된 요청 값을 업데이트합니다.

응답 헤더

  • GitLab 13.8에서 도입RateLimit 헤더. Retry-After는 이전 버전에서 도입되었습니다.

클라이언트가 관련 속도 제한을 초과하면 해당 요청이 차단됩니다. 서버는 요청자에게 일정 시간이 지난 후 재시도할 수 있도록 속도 제한 정보를 포함한 응답을 할 수 있습니다. 이러한 정보는 응답 헤더에 첨부됩니다.

헤더 예시 설명
RateLimit-Limit 60 클라이언트의 각 분당 요청 할당량. 관리 영역에서 설정한 속도 제한 기간이 1분에서 다른 경우,이 헤더의 값은 대략적으로 가장 가까운 60분 단위로 조정됩니다.
RateLimit-Name throttle_authenticated_web 요청을 차단하는 쓰로틀의 이름입니다.
RateLimit-Observed 67 시간 창에 연결된 요청 수입니다.
RateLimit-Remaining 0 시간 창에서 남은 할당량입니다. RateLimit-Limit - RateLimit-Observed의 결과입니다.
RateLimit-Reset 1609844400 요청 할당량이 재설정되는 Unix 시간으로 서식이 맞춰진 시간입니다.
RateLimit-ResetTime Tue, 05 Jan 2021 11:00:00 GMT 요청 할당량이 재설정되는 RFC2616으로 서식이 맞춰진 날짜와 시간입니다.
Retry-After 30 할당량이 재설정될 때까지 남은 기간 입니다. 이는 표준 HTTP 헤더입니다.

HTTP 헤더 사용하여 요청 속도 제한 우회

조직의 요구에 따라 속도 제한을 활성화하되 특정 요청을 속도 제한에서 제외하려는 경우가 있습니다.

로드 밸런서나 GitLab 앞 단의 리버스 프록시에서 속도 제한을 우회해야 하는 요청에 사용자 정의 헤더를 지정하여 이를 수행할 수 있습니다. 예를 들어:

  1. 우회 헤더의 이름을 선택합니다. 예: Gitlab-Bypass-Rate-Limiting.
  2. Gitlab-Bypass-Rate-Limiting: 1로 설정된 요청이 GitLab의 속도 제한을 우회해야 하는 경우, 로드 밸런서를 구성합니다.
  3. 로드 밸런서를 구성하여 다음 중 하나를 수행합니다:
    • Gitlab-Bypass-Rate-Limiting 헤더를 지웁니다.
    • 속도 제한이 적용되어야 하는 모든 요청에 대해 Gitlab-Bypass-Rate-Limiting1이 아닌 값으로 설정합니다.
  4. 환경 변수 GITLAB_THROTTLE_BYPASS_HEADER를 설정합니다.
    • Linux 패키지 설치의 경우, gitlab_rails['env'] 내에서 'GITLAB_THROTTLE_BYPASS_HEADER' => 'Gitlab-Bypass-Rate-Limiting'로 설정합니다.
    • 직접 컴파일한 설치의 경우, /etc/default/gitlab에서 export GITLAB_THROTTLE_BYPASS_HEADER=Gitlab-Bypass-Rate-Limiting로 설정합니다.

로드 밸런서는 모든 들어오는 트래픽에서 우회 헤더를 지워야 하거나 덮어써야 합니다. 그렇지 않은 경우, 사용자가 해당 헤더를 설정하여 GitLab 속도 제한을 우회할 수 있습니다.

우회 기능은 해당 헤더를 1로 설정한 경우에만 작동합니다.

우회 헤더로 인해 속도 제한을 우회한 요청은 production_json.log"throttle_safelist":"throttle_bypass_header"로 표시됩니다.

우회 메커니즘을 비활성화하려면 환경 변수 GITLAB_THROTTLE_BYPASS_HEADER가 해제되었거나 비어 있는지 확인하십시오.

인증된 요청 속도 제한을 우회할 수 있는 특정 사용자 허용

우회 헤더에 설명된 것과 유사하게, 특정 사용자 집합이 속도 제한을 우회할 수 있도록 설정할 수 있습니다. 이는 인증된 요청에만 적용됩니다. 인증되지 않은 요청의 경우 GitLab은 사용자를 알지 못하므로 해당되지 않습니다.

허용 목록은 GITLAB_THROTTLE_USER_ALLOWLIST 환경 변수에 사용자 ID를 쉼표로 구분하여 구성합니다. 사용자 1, 53 및 217이 인증된 요청 속도 제한을 우회할 수 있도록 설정하려면 허용 목록 구성은 1,53,217이 됩니다.

  • Linux 패키지 설치의 경우, gitlab_rails['env'] 내에서 'GITLAB_THROTTLE_USER_ALLOWLIST' => '1,53,217'로 설정합니다.
  • 직접 컴파일한 설치의 경우, /etc/default/gitlab에서 export GITLAB_THROTTLE_USER_ALLOWLIST=1,53,217로 설정합니다.

사용자 허용 목록으로 인해 속도 제한을 우회한 요청은 production_json.log"throttle_safelist":"throttle_user_allowlist"로 표시됩니다.

애플리케이션 시작 시, 허용 목록이 auth.log에 로그됩니다.

적용하기 전에 쓰로틀링 설정 시도

GITLAB_THROTTLE_DRY_RUN 환경 변수를 쓰로틀 이름의 쉼표로 구분된 목록으로 설정하여 쓰로틀링 설정을 시도할 수 있습니다.

가능한 이름은 다음과 같습니다:

  • throttle_unauthenticated
    • GitLab 14.3에서 폐기됨. 대신 throttle_unauthenticated_api 또는 throttle_unauthenticated_web 사용. 그러나 throttle_unauthenticated는 여전히 지원되며 이를 선택합니다.
  • throttle_unauthenticated_api
  • throttle_unauthenticated_web
  • throttle_authenticated_api
  • throttle_authenticated_web
  • throttle_unauthenticated_protected_paths
  • throttle_authenticated_protected_paths_api
  • throttle_authenticated_protected_paths_web
  • throttle_unauthenticated_packages_api
  • throttle_authenticated_packages_api
  • throttle_authenticated_git_lfs
  • throttle_unauthenticated_files_api
  • throttle_authenticated_files_api
  • throttle_unauthenticated_deprecated_api
  • throttle_authenticated_deprecated_api

예를 들어, 인증된 요청의 비보호 경로에 대한 모든 쓰로틀을 시도하려면 GITLAB_THROTTLE_DRY_RUN='throttle_authenticated_web,throttle_authenticated_api'로 설정할 수 있습니다.

모든 쓰로틀에 대해 즉시 시도 모드를 활성화하려면 변수를 *로 설정합니다.

쓰로틀을 시도 모드로 설정하면 해당 쓰로틀이 제한에 도달할 때 요청을 계속하면서 auth.log에 메시지가 기록됩니다. 로그 메시지에는 env 필드가 track으로 설정되며 matched 필드에는 도달한 쓰로틀의 이름이 포함됩니다.

반드시 설정을 활성화하기 전에 환경 변수를 설정해야 합니다. 관리 영역의 설정은 즉시 적용되지만, 환경 변수 설정은 모든 Puma 프로세스를 다시 시작해야 합니다.