사용자 역할의 사전 정의 시스템
GitLab v19.1각 사용자는 다음 유형 중 하나일 수 있습니다: 외부(External) - 직접 멤버인 경우에만 그룹 및 프로젝트에 접근 가능. 프로젝트 또는 그룹 설정 메뉴에 접근 불가. 나머지 모든 항목에 대해 읽기 전용 접근. 관리자(Administrator) - 읽기-쓰기 접근.
인스턴스#
사용자 유형#
각 사용자는 다음 유형 중 하나일 수 있습니다:
-
일반(Regular).
-
외부(External) - 직접 멤버인 경우에만 그룹 및 프로젝트에 접근 가능.
-
내부 사용자 - 시스템이 생성.
프로젝트 또는 그룹 설정 메뉴에 접근 불가.
-
관리자 영역에 접근 불가.
-
나머지 모든 항목에 대해 읽기 전용 접근.
-
관리자(Administrator) - 읽기-쓰기 접근.
각 사용자 유형의 사용 방법에 대한 자세한 내용은 권한 페이지를 참조하세요.
역할 정의 YAML 파일#
기본 역할은 config/authz/roles/ 하위의 YAML 파일에 정의되어 있습니다.
각 파일은 해당 역할의 직접 권한과 상속 계층을 지정합니다.
전체 스키마와 권한 해석 방식에 대해서는 역할 정의 YAML 파일을 참조하세요.
그룹 및 프로젝트#
일반 권한#
그룹 및 프로젝트는 다음 가시성 수준을 가질 수 있습니다:
-
public (
20) - 모든 사람에게 표시되는 엔터티 -
internal (
10) - 인증된 사용자에게 표시되는 엔터티 -
private (
0) - 승인된 멤버에게만 표시되는 엔터티
기본적으로 하위 그룹은 더 높은 가시성 수준을 가질 수 없습니다. 예를 들어, 새 private 그룹을 생성하면 그 안에 public 하위 그룹을 포함할 수 없습니다.
그룹의 가시성 수준은 모든 하위 그룹과 하위 프로젝트가 동일하거나 낮은 가시성 수준을 가지는 경우에만 변경할 수 있습니다. 예를 들어, 그룹을 internal로 설정하려면 모든 하위 그룹과 프로젝트가 internal 또는 private이어야 합니다.
기존 그룹을 낮은 가시성 수준으로 마이그레이션하면, 해당 작업이 하위 그룹을 동일한 방식으로 마이그레이션하지 않습니다. 이는 알려진 이슈입니다.
가시성 수준은 Gitlab::VisibilityLevel 모듈에서 확인할 수 있습니다.
기능별 권한#
추가로, 다음 프로젝트 기능들은 서로 다른 가시성 수준을 가질 수 있습니다:
-
이슈(Issues)
-
리포지터리(Repository)
머지 리퀘스트(Merge Request)
-
포크(Forks)
-
파이프라인(Pipelines)
-
분석(Analytics)
-
요구사항(Requirements)
-
보안 및 컴플라이언스(Security and compliance)
-
위키(Wiki)
-
스니펫(Snippets)
-
페이지(Pages)
-
운영(Operations)
-
메트릭 대시보드(Metrics Dashboard)
이러한 기능들은 "접근 권한이 있는 모든 사람(Everyone with Access)" 또는 "프로젝트 멤버만(Only Project Members)"으로 설정할 수 있습니다. 이는 public 또는 internal 프로젝트에서만 의미가 있습니다. private 프로젝트는 기본적으로 프로젝트 멤버만 접근할 수 있기 때문입니다.
멤버#
사용자는 여러 그룹 및 프로젝트의 멤버가 될 수 있습니다. 다음 접근 수준이 사용 가능합니다(
Gitlab::Access
모듈에 정의됨):
-
접근 없음(
0) -
최소 접근 (
5) -
Guest (
10) -
Planner (
15) -
Reporter (
20) -
Security Manager (
25) -
Developer (
30) -
Maintainer (
40) -
Owner (
50)
사용자가 프로젝트와 프로젝트의 상위 그룹 모두의 멤버인 경우, 가장 높은 권한이 해당 프로젝트의 적용 접근 수준이 됩니다.
사용자가 프로젝트의 멤버이지만 상위 그룹의 멤버가 아닌 경우에도, 그룹과 에픽 등 그룹의 엔터티를 볼 수 있습니다.
프로젝트 멤버십(그룹 멤버십이 이미 반영된)은 project_authorizations 테이블에 저장됩니다.
개인 네임스페이스의 프로젝트는 최대 Owner 권한을 가집니다.
Guest 권한#
GitLab에서 Guest 권한이 있는 사용자는 프로젝트 계획, 블로커, 기타 진행 상황 지표를 볼 수 있습니다. 자신이 생성하지 않은 데이터는 수정할 수 없지만, Guest는 프로젝트 작업 항목을 생성하고 연결하여 프로젝트에 기여할 수 있습니다. Guest는 다음과 같은 상위 수준의 프로젝트 정보도 볼 수 있습니다:
-
분석(Analytics).
-
인시던트 정보.
-
이슈 및 에픽.
-
라이선스.
자세한 내용은 프로젝트 멤버 권한을 참조하세요.
기밀 이슈#
기밀 이슈는 최소 Reporter 이상인 프로젝트 멤버만 접근할 수 있습니다(Guest는 접근 불가). 또한 이슈를 작성한 사람과 담당자도 접근할 수 있습니다.
라이선스 기능#
일부 기능은 사용자가 올바른 라이선스 플랜을 보유한 경우에만 접근할 수 있습니다.
권한 의존성#
기능 정책은 여러 규칙으로 구성될 수 있으며 상당히 복잡할 수 있습니다. 하나의 권한이 다른 권한을 기반으로 하는 경우도 많습니다.
좋은 권한 설계는 기존 권한을 최대한 재사용하고 기능에 대한 접근을 세분화하는 것을 의미합니다.
복잡한 리소스의 경우, 더 작은 정보 단위로 분리하고 각 단위에 서로 다른 권한을 부여해야 합니다.
이에 대한 좋은 예시는 머지 리퀘스트 위젯과 보안 보고서입니다. 파이프라인의 가시성 수준에 따라 보안 보고서는 위젯에 표시되거나 표시되지 않습니다. 따라서 머지 리퀘스트 위젯, 파이프라인, 보안 보고서는 각각 별도의 권한을 가집니다. 또한, 머지 리퀘스트 위젯과 파이프라인의 권한은 보안 보고서의 의존성입니다.
Secure 기능의 권한 의존성#
Secure 기능은 머지 리퀘스트 및 CI/CD 플로우와 같은 다양한 기능에 통합되어 있기 때문에 권한이 복잡합니다.
다음은 일부 권한 의존성 목록입니다.
| 활동 수준 | 리소스 | 위치 | 권한 의존성 |
|---|---|---|---|
| 보기 | 라이선스 정보 | 종속성 목록, 라이선스 컴플라이언스 | 리포지터리 보기 가능 |
| 보기 | 종속성 정보 | 종속성 목록, 라이선스 컴플라이언스 | 리포지터리 보기 가능 |
| 보기 | 취약점 정보 | 종속성 목록 | 보안 결과(findings) 보기 가능 |
| 보기 | 프로젝트의 허용/차단 라이선스 | 라이선스 컴플라이언스, 머지 리퀘스트 | 리포지터리 보기 가능 |
| 보기 | 보안 결과(findings) | 머지 리퀘스트, CI job 페이지, 파이프라인 보안 탭 | 프로젝트 및 CI job 읽기 가능 |
| 보기 | 취약점 피드백 | 머지 리퀘스트 | 보안 결과(findings) 읽기 가능 |
| 보기 | 종속성 목록 페이지 | 프로젝트 | 종속성 정보 접근 가능 |
| 보기 | 라이선스 컴플라이언스 페이지 | 프로젝트 | 라이선스 정보 접근 가능 |