- 인증되지 않은 API 요청 속도 제한을 활성화합니다.
- 인증되지 않은 웹 요청 속도 제한을 활성화합니다.
- 인증된 API 요청 속도 제한을 활성화합니다.
- 인증된 웹 요청 속도 제한을 활성화합니다.
- 사용자 정의 속도 제한 응답 사용
- 분당
project/:id/jobs
의 최대 인증된 요청 - 응답 헤더
- Rate Limit Bypass using HTTP Header
- 인증된 요청 rate limiting 우회를 위한 특정 사용자 허용
- 적용하기 전 쓰로틀링 설정 시도
- 문제 해결
사용자 및 IP 속도 제한
속도 제한은 웹 애플리케이션의 보안과 내구성을 향상시키는 데 사용되는 일반적인 기술입니다. 자세한 내용은 속도 제한을 참조하십시오.
다음과 같은 제한은 기본적으로 비활성화됩니다:
인증되지 않은 API 요청 속도 제한을 활성화합니다.
인증되지 않은 API 요청 속도 제한을 활성화하려면:
- 왼쪽 사이드바에서 아래쪽에서 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
인증되지 않은 API 요청 속도 제한 활성화를 선택합니다.
- 선택 사항. IP당 속도 제한 기간당 최대 인증되지 않은 API 요청 수 값을 업데이트합니다.
기본값은
3600
입니다. - 선택 사항. 인증되지 않은 속도 제한 기간(초) 값을 업데이트합니다.
기본값은
3600
입니다.
- 선택 사항. IP당 속도 제한 기간당 최대 인증되지 않은 API 요청 수 값을 업데이트합니다.
기본값은
인증되지 않은 웹 요청 속도 제한을 활성화합니다.
인증되지 않은 요청 속도 제한을 활성화하려면:
- 왼쪽 사이드바에서 아래쪽에서 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
인증되지 않은 웹 요청 속도 제한 활성화를 선택합니다.
- 선택 사항. IP당 속도 제한 기간당 최대 인증되지 않은 웹 요청 수 값을 업데이트합니다.
기본값은
3600
입니다. - 선택 사항. 인증되지 않은 속도 제한 기간(초) 값을 업데이트합니다.
기본값은
3600
입니다.
- 선택 사항. IP당 속도 제한 기간당 최대 인증되지 않은 웹 요청 수 값을 업데이트합니다.
기본값은
인증된 API 요청 속도 제한을 활성화합니다.
인증된 API 요청 속도 제한을 활성화하려면:
- 왼쪽 사이드바에서 아래쪽에서 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
인증된 API 요청 속도 제한 활성화를 선택합니다.
- 선택 사항. 사용자당 속도 제한 기간당 최대 인증된 API 요청 수 값을 업데이트합니다.
기본값은
7200
입니다. - 선택 사항. 인증된 API 속도 제한 기간(초) 값을 업데이트합니다.
기본값은
3600
입니다.
- 선택 사항. 사용자당 속도 제한 기간당 최대 인증된 API 요청 수 값을 업데이트합니다.
기본값은
인증된 웹 요청 속도 제한을 활성화합니다.
인증된 요청 속도 제한을 활성화하려면:
- 왼쪽 사이드바에서 아래쪽에서 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
인증된 웹 요청 속도 제한 활성화를 선택합니다.
- 선택 사항. 사용자당 속도 제한 기간당 최대 인증된 웹 요청 수 값을 업데이트합니다.
기본값은
7200
입니다. - 선택 사항. 인증된 웹 속도 제한 기간(초) 값을 업데이트합니다.
기본값은
3600
입니다.
- 선택 사항. 사용자당 속도 제한 기간당 최대 인증된 웹 요청 수 값을 업데이트합니다.
기본값은
사용자 정의 속도 제한 응답 사용
속도 제한을 초과하는 요청은 429
응답 코드와 기본적으로 나중에 다시 시도하십시오
라는 평문 본문을 반환합니다.
사용자 정의 응답을 사용하려면:
- 왼쪽 사이드바에서 아래쪽에서 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
- 클라이언트에 보내는 평문 응답 텍스트 상자에 평문 응답 메시지를 추가합니다.
분당 project/:id/jobs
의 최대 인증된 요청
- 소개됨 in GitLab 16.5.
시간 초과를 줄이기 위해 project/:id/jobs
엔드포인트는 기본적으로 인증된 사용자당 1분당 600회의 속도 제한을 가지고 있습니다.
최대 요청 수를 수정하려면:
- 왼쪽 사이드바에서 아래쪽에서 관리자를 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
분당
project/:id/jobs
에 대한 최대 인증된 요청 수 값을 업데이트합니다.
응답 헤더
클라이언트가 연관된 속도 제한을 초과하면 다음 요청이 차단됩니다. 서버는 요청자가 특정 시간 후에 재시도할 수 있도록 속도 제한 정보로 응답할 수 있습니다. 이러한 정보는 응답 헤더에 첨부됩니다.
헤더 | 예시 | 설명 |
---|---|---|
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
| 화, 05 1월 2021 11:00:00 GMT
| 요청 할당량이 재설정되는 RFC2616 형식의 날짜와 시간입니다. |
Retry-After
| 30
| 할당량이 재설정될 때까지 남은 기간 초 단위입니다. 이는 표준 HTTP 헤더입니다. |
Rate Limit Bypass using HTTP Header
조직의 요구에 따라 rate limiting을 활성화하고 싶지만 일부 요청은 rate limiter를 우회하고 싶을 수 있습니다.
이를 위해 GitLab 앞의 로드 밸런서 또는 역방향 프록시에서 rate limiter를 우회해야 하는 요청을 사용자 정의 헤더로 표시함으로써 할 수 있습니다. 예를 들어:
- 우회 헤더의 이름을 선택합니다. 예:
Gitlab-Bypass-Rate-Limiting
. - 로드 밸런서를 구성하여 GitLab rate limiting을 우회해야 하는 요청에
Gitlab-Bypass-Rate-Limiting: 1
을 설정합니다. - 로드 밸런서를 구성하여 다음 중 하나를 수행합니다.
-
Gitlab-Bypass-Rate-Limiting
을 지웁니다. - rate limiting에 영향을 받아야 하는 모든 요청에 대해
Gitlab-Bypass-Rate-Limiting
을1
이 아닌 다른 값으로 설정합니다.
-
- 환경 변수
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
을 설정합니다.
-
Linux 패키지 설치를 위해
로드 밸런서가 모든 들어오는 트래픽에서 우회 헤더를 지우거나 덮어쓰는 것이 중요합니다. 그렇지 않으면 사용자가 해당 헤더를 설정하고 GitLab rate limiter를 우회하는 것을 신뢰해야 합니다.
해당 헤더가 1
로 설정된 경우에만 우회가 작동합니다.
우회 헤더로 인해 rate limiter를 우회한 요청은 production_json.log
에 "throttle_safelist":"throttle_bypass_header"
로 표시됩니다.
우회 메커니즘을 비활성화하려면 환경 변수 GITLAB_THROTTLE_BYPASS_HEADER
가 설정되지 않았거나 비어 있는지 확인하십시오.
인증된 요청 rate limiting 우회를 위한 특정 사용자 허용
우회 헤더에 설명된 것과 마찬가지로, 특정 사용자 집합이 rate limiter를 우회할 수 있도록 하는 것이 가능합니다. 이는 인증된 요청에만 적용됩니다: 무인증 요청에 대해서는 사용자가 누구인지를 GitLab이 알 수 없기 때문입니다.
허용 목록은 GITLAB_THROTTLE_USER_ALLOWLIST
환경 변수에 사용자 ID의 쉼표로 구분된 목록으로 구성됩니다. 예를 들어 1, 53, 217 번 사용자가 인증된 요청 rate limiter를 우회할 수 있도록 하려면 허용 목록 구성은 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
를 설정합니다.
사용자 허용 목록으로 인해 rate limiter를 우회한 요청은 production_json.log
에 "throttle_safelist":"throttle_user_allowlist"
로 표시됩니다.
응용프로그램 시작 시, 허용 목록은 auth.log
에 로그됩니다.
적용하기 전 쓰로틀링 설정 시도
GITLAB_THROTTLE_DRY_RUN
환경 변수를 throttle 이름의 쉼표로 구분된 목록으로 설정하여 쓰로틀링 설정을 시도할 수 있습니다.
가능한 이름은 다음과 같습니다:
-
throttle_unauthenticated
- GitLab 14.3에서 폐기됨. 대신
throttle_unauthenticated_api
또는throttle_unauthenticated_web
을 사용하세요.throttle_unauthenticated
은 여전히 지원되며 둘 다 선택합니다.
- GitLab 14.3에서 폐기됨. 대신
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'
를 설정합니다.
모든 쓰로틀에 대해 쓰로틀을 활성화하려면 변수를 *
로 설정합니다.
쓰로틀을 dry run 모드로 설정하면, 해당 쓰로틀이 제한에 도달할 때 요청을 계속하면서 auth.log
에 메시지가 로깅됩니다. 로그 메시지에는 env
필드가 track
으로 설정되어 있으며, matched
필드에는 제한이 적용된 쓰로틀의 이름이 포함됩니다.
쓰로틀링을 활성화하기 전에 반드시 환경 변수를 설정하는 것이 중요합니다. 관리자 영역의 설정은 즉시 적용되지만, 환경 변수를 설정하려면 모든 Puma 프로세스를 다시 시작해야 합니다.
문제 해결
실수로 관리자를 차단한 후 쓰로틀링 비활성화
동일한 프록시나 네트워크 게이트웨이를 통해 많은 사용자가 GitLab에 연결하는 경우, 한계가 너무 낮으면 관리자도 차단될 수 있습니다. 왜냐하면 GitLab은 그들이 throttle를 트리거한 요청과 동일한 IP를 사용하는 것으로 보기 때문입니다.
관리자는 the Rails console을 사용하여 the GITLAB_THROTTLE_DRY_RUN
variable에 나열된 동일한 제한을 비활성화할 수 있습니다.
예:
Gitlab::CurrentSettings.update!(throttle_authenticated_web_enabled: false)
이 예에서 throttle_authenticated_web
매개변수에는 _enabled
이름 접미사가 있습니다.
한계에 대한 숫자 값을 설정하려면 _enabled
이름 접미사를 _period_in_seconds
및 _requests_per_period
접미사로 교체합니다.