외부 권한 부여 제어
Offering: GitLab Self-Managed, GitLab Dedicated
고도로 통제된 환경에서는 프로젝트 분류와 사용자 액세스를 기반으로 액세스를 허용하는 외부 서비스에 의해 액세스 정책을 제어해야 할 수 있습니다. 외부 서비스가 구성되고 활성화된 후 프로젝트에 액세스할 때 사용자 정보와 프로젝트에 할당된 프로젝트 분류 레이블을 가지고 외부 서비스에 요청이 만들어집니다.
히스토리
- GitLab 11.10에서 GitLab Premium에서 GitLab Free로 이동됨.
고도로 통제된 환경에서는 프로젝트 분류와 사용자 액세스를 기반으로 액세스를 허용하는 외부 서비스에 의해 액세스 정책을 제어해야 할 수 있습니다. GitLab은 자체 정의된 서비스로 프로젝트 권한 부여를 확인하는 방법을 제공합니다.
외부 서비스가 구성되고 활성화된 후 프로젝트에 액세스할 때 사용자 정보와 프로젝트에 할당된 프로젝트 분류 레이블을 가지고 외부 서비스에 요청이 만들어집니다. 서비스가 알려진 응답으로 응답하면 결과가 6시간 동안 캐시됩니다.
외부 권한 부여가 활성화된 경우 GitLab은 교차 프로젝트 데이터를 렌더링하는 페이지와 기능을 추가로 차단합니다. 여기에는 다음이 포함됩니다:
- 대시보드 아래의 대부분의 페이지 (활동, 마일스톤, 스니펫, 할당된 머지 리퀘스트, 할당된 이슈, 할 일 목록).
- 특정 그룹 아래 (활동, 기여도 분석, 이슈, 이슈 보드, 레이블, 마일스톤, 머지 리퀘스트).
- 전역 및 그룹 검색이 비활성화됩니다.
이는 외부 권한 부여 서비스에 동시에 너무 많은 요청을 수행하는 것을 방지하기 위함입니다.
액세스가 허용되거나 거부될 때마다 external-policy-access-control.log라는 로그 파일에 기록됩니다. GitLab이 유지하는 로그에 대한 자세한 내용은 Linux 패키지 설명서를 참조하세요.
자체 서명된 인증서로 TLS 인증을 사용할 때 CA 인증서는 OpenSSL 설치에서 신뢰되어야 합니다. Linux 패키지를 사용하여 GitLab을 설치한 경우 Linux 패키지 설명서에서 사용자 정의 CA를 설치하는 방법을 알아볼 수 있습니다. 또는 openssl version -d를 사용하여 사용자 정의 인증서를 설치할 위치를 알아볼 수 있습니다.
구성#
외부 권한 부여 서비스는 관리자가 활성화할 수 있습니다:
- 오른쪽 상단 모서리에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > General을 선택합니다.
- External authorization을 펼칩니다.
- 필드를 작성합니다.
- Save changes를 선택합니다.
배포 토큰 및 배포 키로 외부 권한 부여 허용#
배포 토큰 또는 배포 키를 사용하는 Git 작업에 외부 권한 부여를 허용하도록 인스턴스를 설정할 수 있습니다.
사전 요구 사항:
- 외부 권한 부여에 서비스 URL 없이 분류 레이블을 사용해야 합니다.
배포 토큰 및 키로 권한 부여를 허용하려면:
- 오른쪽 상단 모서리에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > General을 선택합니다.
- External authorization을 펼치고:
- 서비스 URL 필드를 비워 둡니다.
- Allow deploy tokens and deploy keys to be used with external authorization을 선택합니다.
- Save changes를 선택합니다.
외부 권한 부여를 활성화하면 배포 토큰이 컨테이너 또는 패키지 레지스트리에 액세스할 수 없습니다. 이러한 레지스트리에 액세스하기 위해 배포 토큰을 사용하는 경우 이 조치로 인해 해당 토큰 사용이 중단됩니다. 컨테이너 또는 패키지 레지스트리에 토큰을 사용하려면 외부 권한 부여를 비활성화하세요.
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" 상자에서 자신의 분류 레이블을 사용할 수 있습니다. 프로젝트에 분류 레이블이 지정되지 않은 경우 전역 설정에 정의된 기본 레이블이 사용됩니다.
모든 프로젝트 페이지의 오른쪽 상단 모서리에 레이블이 표시됩니다.

