InfoGrab DocsInfoGrab Docs

외부 권한 부여 제어

요약

통제 수준이 높은 환경에서는 프로젝트 분류와 사용자 액세스를 기준으로 접근을 허용하는 외부 서비스가 액세스 정책을 제어해야 할 수 있습니다. 외부 서비스를 구성하고 활성화하면, 프로젝트에 접근할 때 사용자 정보와 해당 프로젝트에 지정된 프로젝트 분류 레이블을 담은 요청이 외부 서비스로 전송됩니다.

히스토리
  • 11.10에서 GitLab Premium에서 GitLab Free로 이동되었습니다.

통제 수준이 높은 환경에서는 프로젝트 분류와 사용자 액세스를 기준으로 접근을 허용하는 외부 서비스가 액세스 정책을 제어해야 할 수 있습니다. GitLab은 직접 정의한 서비스로 프로젝트 권한 부여를 확인하는 방법을 제공합니다.

외부 서비스를 구성하고 활성화하면, 프로젝트에 접근할 때 사용자 정보와 해당 프로젝트에 지정된 프로젝트 분류 레이블을 담은 요청이 외부 서비스로 전송됩니다. 서비스가 알려진 응답을 반환하면 그 결과는 6시간 동안 캐시됩니다.

외부 권한 부여가 활성화되면 GitLab은 여러 프로젝트에 걸친 데이터를 표시하는 페이지와 기능도 차단합니다. 차단 대상은 다음과 같습니다.

  • Dashboard 아래의 대부분 페이지(Activity, Milestones, Snippets, Assigned merge requests, Assigned issues, To-Do List).
  • 특정 그룹 아래의 페이지(Activity, Contribution analytics, Issues, Issue boards, Labels, Milestones, Merge requests).
  • 전역 검색과 그룹 검색이 비활성화됩니다.

외부 권한 부여 서비스에 한 번에 지나치게 많은 요청이 전송되는 것을 막기 위해서입니다.

액세스가 허용되거나 거부될 때마다 external-policy-access-control.log라는 로그 파일에 기록됩니다. GitLab 이 보관하는 로그에 대한 자세한 내용은 Linux 패키지 문서를 참고합니다.

자체 서명 인증서로 TLS 인증을 사용하는 경우 OpenSSL 설치본이 해당 CA 인증서를 신뢰해야 합니다. Linux 패키지로 설치한 GitLab을 사용한다면 Linux 패키지 문서에서 사용자 지정 CA를 설치하는 방법을 확인합니다. 또는 openssl version -d로 사용자 지정 인증서를 설치할 위치를 확인할 수 있습니다.

구성#

관리자는 다음과 같이 외부 권한 부여 서비스를 활성화할 수 있습니다.

  1. 오른쪽 위 모서리에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Settings > General을 선택합니다.
  3. External authorization을 확장합니다.
  4. 각 필드를 입력합니다.
  5. Save changes를 선택합니다.

배포 토큰 및 배포 키로 외부 권한 부여 허용#

배포 토큰 또는 배포 키로 수행하는 Git 작업에 대해 외부 권한 부여를 허용하도록 인스턴스를 설정할 수 있습니다.

사전 요구 사항:

  • 외부 권한 부여에 서비스 URL 없이 분류 레이블을 사용하고 있어야 합니다.

배포 토큰과 배포 키로 권한 부여를 허용하려면 다음을 수행합니다.

  1. 오른쪽 위 모서리에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Settings > General을 선택합니다.
  3. External authorization을 확장한 다음 아래를 수행합니다.
    • 서비스 URL 필드를 비워 둡니다.
    • Allow deploy tokens and deploy keys to be used with external authorization를 선택합니다.
  4. Save changes를 선택합니다.
Warning

외부 권한 부여를 활성화하면 배포 토큰으로 컨테이너 레지스트리나 패키지 레지스트리에 접근할 수 없습니다. 이들 레지스트리에 접근하는 데 배포 토큰을 사용하고 있다면 이 조치로 해당 용도를 사용할 수 없게 됩니다. 컨테이너 레지스트리나 패키지 레지스트리에 토큰을 사용하려면 외부 권한 부여를 비활성화합니다.

GitLab 이 외부 권한 부여 서비스에 연결하는 방식#

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에는 해당 사용자와 연결된 모든 ID의 상세 정보가 들어 있습니다. 사용자와 연결된 ID가 없으면 빈 배열입니다.

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

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

{
  "reason": "You are not allowed access to this project."
}

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

서비스가 500ms 안에 응답하지 않아 시간이 초과되면 "External Policy Server did not respond" 메시지가 표시됩니다.

분류 레이블#

프로젝트의 Settings > General > General project settings 페이지에 있는 "Classification label" 상자에서 직접 정한 분류 레이블을 사용할 수 있습니다. 프로젝트에 분류 레이블을 지정하지 않으면 전역 설정에 정의된 기본 레이블이 사용됩니다.

모든 프로젝트 페이지의 오른쪽 위 모서리에 해당 레이블이 표시됩니다.

A red overridden label with an open lock icon displays in the upper-right corner of a project.

외부 권한 부여 제어

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

통제 수준이 높은 환경에서는 프로젝트 분류와 사용자 액세스를 기준으로 접근을 허용하는 외부 서비스가 액세스 정책을 제어해야 할 수 있습니다. 외부 서비스를 구성하고 활성화하면, 프로젝트에 접근할 때 사용자 정보와 해당 프로젝트에 지정된 프로젝트 분류 레이블을 담은 요청이 외부 서비스로 전송됩니다.

히스토리
  • 11.10에서 GitLab Premium에서 GitLab Free로 이동되었습니다.

통제 수준이 높은 환경에서는 프로젝트 분류와 사용자 액세스를 기준으로 접근을 허용하는 외부 서비스가 액세스 정책을 제어해야 할 수 있습니다. GitLab은 직접 정의한 서비스로 프로젝트 권한 부여를 확인하는 방법을 제공합니다.

외부 서비스를 구성하고 활성화하면, 프로젝트에 접근할 때 사용자 정보와 해당 프로젝트에 지정된 프로젝트 분류 레이블을 담은 요청이 외부 서비스로 전송됩니다. 서비스가 알려진 응답을 반환하면 그 결과는 6시간 동안 캐시됩니다.

외부 권한 부여가 활성화되면 GitLab은 여러 프로젝트에 걸친 데이터를 표시하는 페이지와 기능도 차단합니다. 차단 대상은 다음과 같습니다.

  • Dashboard 아래의 대부분 페이지(Activity, Milestones, Snippets, Assigned merge requests, Assigned issues, To-Do List).
  • 특정 그룹 아래의 페이지(Activity, Contribution analytics, Issues, Issue boards, Labels, Milestones, Merge requests).
  • 전역 검색과 그룹 검색이 비활성화됩니다.

외부 권한 부여 서비스에 한 번에 지나치게 많은 요청이 전송되는 것을 막기 위해서입니다.

액세스가 허용되거나 거부될 때마다 external-policy-access-control.log라는 로그 파일에 기록됩니다. GitLab 이 보관하는 로그에 대한 자세한 내용은 Linux 패키지 문서를 참고합니다.

자체 서명 인증서로 TLS 인증을 사용하는 경우 OpenSSL 설치본이 해당 CA 인증서를 신뢰해야 합니다. Linux 패키지로 설치한 GitLab을 사용한다면 Linux 패키지 문서에서 사용자 지정 CA를 설치하는 방법을 확인합니다. 또는 openssl version -d로 사용자 지정 인증서를 설치할 위치를 확인할 수 있습니다.

구성#

관리자는 다음과 같이 외부 권한 부여 서비스를 활성화할 수 있습니다.

  1. 오른쪽 위 모서리에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Settings > General을 선택합니다.
  3. External authorization을 확장합니다.
  4. 각 필드를 입력합니다.
  5. Save changes를 선택합니다.

배포 토큰 및 배포 키로 외부 권한 부여 허용#

배포 토큰 또는 배포 키로 수행하는 Git 작업에 대해 외부 권한 부여를 허용하도록 인스턴스를 설정할 수 있습니다.

사전 요구 사항:

  • 외부 권한 부여에 서비스 URL 없이 분류 레이블을 사용하고 있어야 합니다.

배포 토큰과 배포 키로 권한 부여를 허용하려면 다음을 수행합니다.

  1. 오른쪽 위 모서리에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Settings > General을 선택합니다.
  3. External authorization을 확장한 다음 아래를 수행합니다.
    • 서비스 URL 필드를 비워 둡니다.
    • Allow deploy tokens and deploy keys to be used with external authorization를 선택합니다.
  4. Save changes를 선택합니다.
Warning

외부 권한 부여를 활성화하면 배포 토큰으로 컨테이너 레지스트리나 패키지 레지스트리에 접근할 수 없습니다. 이들 레지스트리에 접근하는 데 배포 토큰을 사용하고 있다면 이 조치로 해당 용도를 사용할 수 없게 됩니다. 컨테이너 레지스트리나 패키지 레지스트리에 토큰을 사용하려면 외부 권한 부여를 비활성화합니다.

GitLab 이 외부 권한 부여 서비스에 연결하는 방식#

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에는 해당 사용자와 연결된 모든 ID의 상세 정보가 들어 있습니다. 사용자와 연결된 ID가 없으면 빈 배열입니다.

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

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

{
  "reason": "You are not allowed access to this project."
}

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

서비스가 500ms 안에 응답하지 않아 시간이 초과되면 "External Policy Server did not respond" 메시지가 표시됩니다.

분류 레이블#

프로젝트의 Settings > General > General project settings 페이지에 있는 "Classification label" 상자에서 직접 정한 분류 레이블을 사용할 수 있습니다. 프로젝트에 분류 레이블을 지정하지 않으면 전역 설정에 정의된 기본 레이블이 사용됩니다.

모든 프로젝트 페이지의 오른쪽 위 모서리에 해당 레이블이 표시됩니다.

A red overridden label with an open lock icon displays in the upper-right corner of a project.