외부 인가 제어

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

고도로 통제된 환경에서는 프로젝트 분류 및 사용자 액세스에 따라 액세스 정책이 제어되어야 할 수 있습니다. GitLab은 사용자가 정의한 서비스를 사용하여 프로젝트 인가를 확인하는 방법을 제공합니다.

외부 서비스가 구성되고 활성화된 후에 프로젝트에 액세스하면 사용자 정보와 프로젝트 분류 레이블이 포함된 요청이 외부 서비스로 전송됩니다. 서비스가 알려진 응답으로 응답하면 결과가 6시간 동안 캐시됩니다.

외부 인가가 활성화된 경우 GitLab은 교차 프로젝트 데이터를 렌더링하는 페이지 및 기능을 더 이상 차단합니다. 이에는 다음이 포함됩니다.

  • 대시보드 아래 대부분의 페이지(활동, 마일스톤, 코드 스니펫, 지정된 병합 요청, 지정된 이슈, 할 일 목록).
  • 특정 그룹 아래(활동, 기여 분석, 이슈, 이슈 보드, 레이블, 마일스톤, 병합 요청).
  • 전역 및 그룹 검색이 비활성화됩니다.

이는 외부 인가 서비스로의 동시 요청 수행을 방지하기 위한 조치입니다.

액세스가 허용되거나 거부될 때는 항상 external-policy-access-control.log라는 로그 파일에 기록됩니다. GitLab이 보관하는 로그에 대해 자세히 알아보려면 Linux 패키지 문서를 참조하세요.

자체 서명 인증서를 사용하여 TLS 인증을 하는 경우, CA 인증서는 OpenSSL 설치에서 신뢰해야 합니다. Linux 패키지를 사용하여 GitLab을 설치한 경우, Linux 패키지 문서를 통해 사용자 정의 CA를 설치하는 방법에 대해 알아보세요. 또는 openssl version -d를 사용하여 사용자 정의 인증서를 설치할 위치를 알아보세요.

구성

관리자는 외부 인가 서비스를 활성화할 수 있습니다.

  1. 왼쪽 사이드바에서 하단에서 관리자를 선택합니다.
  2. 설정 > 일반을 선택합니다.
  3. 외부 인가를 확장합니다.
  4. 필드를 작성합니다.
  5. 변경 사항 저장을 선택합니다.

배포 토큰 및 배포 키를 사용하여 외부 인가 허용

귀하의 인스턴스를 설정하여 배포 토큰 또는 배포 키를 사용하여 Git 작업에 대한 외부 인가를 허용할 수 있습니다.

전제 조건:

  • 서비스 URL 없이 분류 레이블을 사용하고 있어야 합니다.

배포 토큰 및 키로 인가를 허용하려면:

  1. 왼쪽 사이드바에서 하단에서 관리자를 선택합니다.
  2. 설정 > 일반을 선택합니다.
  3. 외부 인가를 확장하고:
    • 서비스 URL 필드를 비워둡니다.
    • 외부 인가에 배포 토큰과 배포 키 사용 허용을 선택합니다.
  4. 변경 사항 저장을 선택합니다.

경고: 외부 인가를 활성화하면 배포 토큰이 컨테이너나 패키지 레지스트리에 액세스할 수 없게 됩니다. 이러한 토큰 사용을 중단하게 됩니다. 이러한 토큰을 사용하여 이러한 레지스트리에 액세스하는 경우 이 조치로 인해 사용이 중단됩니다. 컨테이너 또는 패키지 레지스트리에 토큰을 사용하려면 외부 인가를 비활성화하세요.

작동 방식

GitLab이 액세스를 요청하면 외부 서비스로 JSON POST 요청이 전송됩니다. 요청의 본문은 다음과 같습니다:

{
  "user_identifier": "jane@acme.org",
  "project_classification_label": "project-label",
  "user_ldap_dn": "CN=Jane Doe,CN=admin,DC=acme",
  "identities": [
    { "provider": "ldap", "extern_uid": "CN=Jane Doe,CN=admin,DC=acme" },
    { "provider": "bitbucket", "extern_uid": "2435223452345" }
  ]
}

user_ldap_dn은 선택 사항이며 사용자가 LDAP을 통해 로그인한 경우에만 전송됩니다.

identities는 사용자와 연결된 모든 식별 정보의 세부 정보를 포함합니다. 사용자와 연결된 식별 정보가 없는 경우 이는 빈 배열입니다.

외부 인가 서비스가 상태 코드 200으로 응답하면 사용자에게 액세스 권한이 부여됩니다. 외부 서비스가 상태 코드 401 또는 403으로 응답하면 사용자에게 액세스가 거부됩니다. 어떠한 경우에도 요청은 6시간 동안 캐시됩니다.

액세스를 거부할 때 JSON 본문에 reason을 선택적으로 지정할 수 있습니다:

{
  "reason": "프로젝트에 액세스할 수 없습니다."
}

상태 코드 200, 401 또는 403 이외의 모든 상태 코드도 사용자에게 액세스를 거부하지만 응답은 캐시되지 않습니다.

서비스가 시간 초과되면(500ms 후), “외부 정책 서버가 응답하지 않음”이라는 메시지가 표시됩니다.

분류 레이블

프로젝트의 설정 > 일반 > 일반 프로젝트 설정 페이지에서 자체 분류 레이블을 사용할 수 있습니다. 프로젝트에 분류 레이블이 지정되지 않은 경우에는 전역 설정에서 정의된 기본 레이블이 사용됩니다.

모든 프로젝트 페이지의 우측 상단에 해당 레이블이 표시됩니다.

빨간색으로 강조된 레이블에 열린 자물쇠 아이콘이 상단 우측 모서리에 표시됩니다.