GitLab Group 생성 및 권한 운영 기준¶
0. 필수 참조¶
반드시 아래 문서를 기반으로 수행:
변하지 않는 원칙:
- 사용자는 조직(Group)으로 관리하고, 프로젝트에서 역할(Role)을 부여하며, 예외만 최소한으로 override 함.
- Project 수가 증가하더라도
운영 책임자 Maintainer 권한은서비스 Project Repository 단위로 부여하는 것을 기본 원칙으로 함. - 반복 작업 증가는 권한 범위 확대가 아니라 GitLab API 기반 자동화로 해결함.
1. 기본 구조¶
- GitLab 기본 구조
Group / Subgroup / Project
- GitLab 운영 구조를 아래 세 영역으로 명확히 구분함
- 권한 관리 Group
- 서비스 관리 Group
- 서비스 Project Repository
1.1 권한 관리 Group¶
- 사용자, 조직, 역할 기반 접근 권한을 관리하기 위한 실제 GitLab Group/Subgroup 구조
- 서비스 Repository 를 배치하는 위치가 아니라, 사용자 권한을 묶고 Project 접근 권한을 부여하기 위한 기준 구조
- 일반 사용자는
권한 관리 Subgroup기준으로 Project 접근 기본 권한을 부여받음
{COMPANY_NAME} (권한 관리 Root Group)
├── {SERVICE_PREFIX} (권한 관리 Subgroup, 조직/부서)
├── frontend
├── backend
├── db
├── infra
└── ...
1.2 서비스 관리 Group¶
- 서비스 Repository namespace 를 관리하기 위한 실제 GitLab Group/Subgroup 구조
- 실제 소스 Repository 자체가 아니라, 서비스 Project 를 분류하고 묶기 위한 namespace 기준
- 사용자 접근 권한은
권한 관리 Subgroup을 연결하여 부여함
{PROJECT_NAME} (서비스 관리 Root Group)
├── {SERVICE_PREFIX} (서비스 관리 Subgroup)
├── backend
└── infra
1.3 서비스 Project Repository¶
- 실제 소스 코드가 위치하는
서비스 Project Repository 서비스 관리 Subgroup하위에 생성.- 운영 책임자 계정 은 이 Project 단위에서만
Maintainer로 override 함
{PROJECT_NAME} (서비스 관리 Root Group)
├── {SERVICE_PREFIX} (서비스 관리 Subgroup)
│ └── {SERVICE_NAME} (서비스 Project Repository)
├── backend
│ ├── db
│ └── example.com
└── infra
└── gitlab
2. 계정 사용 기준¶
2.1 초기 관리자 계정(root)¶
- GitLab 최초 설치 및 비상 복구용 계정으로 사용. 다른 용도로 절대 사용하지 않음
2.2 최고 관리자 계정(Admin)¶
- GitLab 구조 생성 및 권한 운영 기준 계정으로 사용
권한 관리 Root Group과서비스 관리 Root Group의 직접Owner- 하위
권한 관리 Subgroup,서비스 관리 Subgroup,서비스 Project Repository에는 직접 멤버로 남기지 않고 Root Group 에서 상속된Owner권한으로 관리함 - 단, GitLab 버전 또는 생성 방식에 따라 최고 관리자 계정(Admin) 이 하위 Subgroup 생성 직후 해당 Subgroup의
Direct member / Owner로 표시될 수 있음. - 이 경우 Root Group 의
Owner권한이 유지되는지 확인한 뒤, 해당 Subgroup 에서 최고 관리자 계정(Admin)의 direct membership 을 제거하여 상속 권한 상태로 정리함.
2.3 운영 책임자 계정¶
서비스 Project Repository단위Maintainer권한으로 지정함권한 관리 Subgroup에는 기본Developer로 소속됨서비스 관리 Subgroup에는 직접 멤버로 추가하지 않음Owner권한은 Project 운영 목적으로 사용하지 않음
3. 전체 흐름¶
-
권한 관리 Root Group생성. ex) {COMPANY_NAME}권한 관리 Root Group에 최고 관리자 계정(Admin) 은Owner
-
권한 관리 Subgroup(조직/부서) 생성. ex) frontend, backend, db, infra, ... -
권한 관리 Subgroup사용자 추가- 기본
Developer. - Project 특성에 따라
Reporter또는Guest
- 기본
-
서비스 관리 Root Group생성. ex) {PROJECT_NAME}서비스 관리 Root Group에 최고 관리자 계정(Admin) 은Owner
-
서비스 관리 Subgroup생성. ex) frontend, backend, db, infra, ... -
서비스 관리 Subgroup에권한 관리 Subgroup(조직/부서) 연결 -
서비스 Project Repository생성 -
운영 책임자 계정을
서비스 Project Repository에Maintainer로 override 설정
4. 생성 절차¶
4.1 권한 관리 Root Group 생성¶
- 최고 관리자 계정(Admin) 으로 수행
- 사용자 및 조직/부서 권한 관리 기준 최상위 Group
대상:
{COMPANY_NAME}
경로:
Admin area → Groups → New Group
설정:
- Group name :
{COMPANY_NAME} - Visibility level :
Private - Users can request access :
비활성화 - Minimum role required to create projects :
No one - Roles allowed to create subgroups :
Owners
정상 기준:
GitLab 일반 UI → Your work → Groups → {COMPANY_NAME} → 좌측 Manage → Members → Members Tab
- 최고 관리자 계정(Admin): Direct member / Owner
4.2 권한 관리 Subgroup(조직/부서) 생성¶
- 최고 관리자 계정(Admin) 으로 수행
- 최고 관리자 계정(Admin) 은
권한 관리 Root Group에서 상속된Owner권한으로 표시되어야 함
대상:
{COMPANY_NAME}/{SERVICE_PREFIX}
경로:
GitLab 일반 UI → Your work → Groups → {COMPANY_NAME} → Create Subgroup
설정:
- Subgroup name :
{SERVICE_PREFIX} - Visibility level :
Private
생성 직후 권한 확인 및 정리:
- GitLab 버전 또는 생성자 계정 상태에 따라 Subgroup 생성 직후 최고 관리자 계정(Admin) 이 해당 Subgroup의 Direct member / Owner 로 표시될 수 있음.
이 경우 아래 순서로 정리함.
{COMPANY_NAME}Root Group 의 Members Tab 에서 최고 관리자 계정(Admin) 이Direct member / Owner로 유지되는지 확인함{COMPANY_NAME}/{SERVICE_PREFIX}Subgroup 의 Members Tab 에서 최고 관리자 계정(Admin) 이Direct member / Owner로 표시되는지 확인함Direct member / Owner로 표시될 경우{COMPANY_NAME}/{SERVICE_PREFIX}에서 최고 관리자 계정(Admin) 행의Leave group을 실행함- 확인 팝업의 대상이 반드시
{COMPANY_NAME}/{SERVICE_PREFIX}또는 해당 Subgroup 인지 확인함 - 새로고침 후 최고 관리자 계정(Admin) 이
Inherited from {COMPANY_NAME} / Owner로 표시되는지 확인함
정상 기준:
GitLab 일반 UI → Your work → Groups → {COMPANY_NAME} → {SERVICE_PREFIX} → 좌측 Manage → Members → Members Tab
- 최고 관리자 계정(Admin): Inherited from {COMPANY_NAME} / Owner
4.3 권한 관리 Subgroup 사용자 추가¶
- 최고 관리자 계정(Admin) 으로 수행
- 기본 권한은
Developer - Project 특성에 따라
Reporter또는Guest로 낮출 수 있음 권한 관리 Subgroup은 다른 Group share 를 통해 간접 구성하지 않고, 실제 접근 대상 사용자를 direct member 기준으로 관리
대상:
{COMPANY_NAME}/{SERVICE_PREFIX}
경로:
GitLab 일반 UI → Your work → Groups → {COMPANY_NAME} → {SERVICE_PREFIX} → 좌측 Manage → Members → Invite members
설정:
- Username, name or email address :
사용자 - Select a role :
Developer- 기본
Developer. - Project 특성에 따라
Reporter또는Guest
- 기본
정상 기준:
GitLab 일반 UI → Your work → Groups → {COMPANY_NAME} → {SERVICE_PREFIX} → 좌측 Manage → Members → Members Tab
- 최고 관리자 계정(Admin): Inherited from {COMPANY_NAME} / Owner
- 운영 책임자 계정: Direct member by GitLab Admin / Developer
4.4 서비스 관리 Root Group 생성¶
- 최고 관리자 계정(Admin) 으로 수행
- 서비스 Repository namespace 의 최상위 Group
대상:
{PROJECT_NAME}
경로:
Admin area → Groups → New Group
설정:
- Group name :
{PROJECT_NAME} - Visibility level :
Private - Users can request access :
비활성화 - Minimum role required to create projects :
Maintainers - Roles allowed to create subgroups :
Owners
정상 기준:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → 좌측 Manage → Members → Members Tab
- 최고 관리자 계정(Admin): Direct member / Owner
4.5 서비스 관리 Subgroup 생성¶
- 최고 관리자 계정(Admin) 으로 수행
- 최고 관리자 계정(Admin)은
서비스 관리 Root Group에서 상속된Owner권한으로 표시되어야 함
대상:
{PROJECT_NAME}/{SERVICE_PREFIX}
경로:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → Create Subgroup
설정:
- Subgroup name :
{SERVICE_PREFIX} - Visibility level :
Private
생성 직후 권한 확인 및 정리:
- GitLab 버전 또는 생성자 계정 상태에 따라 Subgroup 생성 직후 최고 관리자 계정(Admin) 이 해당 Subgroup의 Direct member / Owner 로 표시될 수 있음.
이 경우 아래 순서로 정리함.
{PROJECT_NAME}Root Group 의 Members Tab 에서 최고 관리자 계정(Admin) 이Direct member / Owner로 유지되는지 확인함{PROJECT_NAME}/{SERVICE_PREFIX}Subgroup 의 Members Tab 에서 최고 관리자 계정(Admin) 이Direct member / Owner로 표시되는지 확인함Direct member / Owner로 표시될 경우{PROJECT_NAME}/{SERVICE_PREFIX}에서 최고 관리자 계정(Admin) 행의Leave group을 실행함- 확인 팝업의 대상이 반드시
{PROJECT_NAME}/{SERVICE_PREFIX}또는 해당 Subgroup 인지 확인함 - 새로고침 후 최고 관리자 계정(Admin) 이
Inherited from {PROJECT_NAME} / Owner로 표시되는지 확인함
정상 기준:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → 좌측 Manage → Members → Members Tab
- 최고 관리자 계정(Admin): Inherited from {PROJECT_NAME} / Owner
4.6 서비스 관리 Subgroup 에 권한 관리 Subgroup(조직/부서) 연결¶
- 최고 관리자 계정(Admin) 으로 수행
서비스 관리 Subgroup에권한 관리 Subgroup을 초대함- 기본 권한은
Developer - Project 특성에 따라
Reporter또는Guest로 낮출 수 있음 - 해당 권한은 하위의
서비스 Project Repository에 상속됨
대상 Subgroup:
{PROJECT_NAME}/{SERVICE_PREFIX}
경로:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → 좌측 Manage → Members → Invite a group
설정:
- Select a group to invite:
{COMPANY_NAME}/{SERVICE_PREFIX} -
Select maximum role:
Developer -
기본
Developer. - Project 특성에 따라
Reporter또는Guest
정상 기준 - Members Tab:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → 좌측 Manage → Members → Members Tab
- 현재 연결된 권한 관리 Subgroup({COMPANY_NAME}/{SERVICE_PREFIX}) 소속 사용자들: Invited group {COMPANY_NAME}/{SERVICE_PREFIX} / Developer
- 최고 관리자 계정(Admin): Inherited from {PROJECT_NAME} / Owner
정상 기준 - Groups Tab:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → 좌측 Manage → Members → Groups Tab
- {COMPANY_NAME}/{SERVICE_PREFIX}: Direct member / Developer
4.7 서비스 Project Repository 생성¶
- 최고 관리자 계정(Admin) 으로 수행
서비스 관리 Subgroup하위에 생성서비스 Project Repository생성 후 운영 책임자 계정 은 별도Maintaineroverride 로 추가함
대상:
{PROJECT_NAME}/{SERVICE_PREFIX}/{SERVICE_NAME}
경로:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → Create project → Create blank project
설정:
- Project name:
{SERVICE_NAME} - Visibility level:
Private - Initialize repository with a README:
비활성화 - Enable Static Application Security Testing (SAST):
비활성화 - Enable Secret Detection:
비활성화
정상 기준 - Members Tab:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → {SERVICE_NAME} → 좌측 Manage → Members → Members Tab
- 상위 서비스 관리 Subgroup에 연결된 권한 관리 Subgroup({COMPANY_NAME}/{SERVICE_PREFIX}) 소속 사용자들: Inherited from {PROJECT_NAME}/{SERVICE_PREFIX} / Developer
- 최고 관리자 계정(Admin): Inherited from {PROJECT_NAME} / Owner
정상 기준 - Groups Tab:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → {SERVICE_NAME} → 좌측 Manage → Members → Groups Tab
- {COMPANY_NAME}/{SERVICE_PREFIX}: Inherited from {PROJECT_NAME}/{SERVICE_PREFIX} / Developer
4.8 운영 책임자 계정을 서비스 Project Repository 에 Maintainer 로 override 설정¶
- 최고 관리자 계정(Admin) 으로 수행
- 운영 책임자 계정을
서비스 Project Repository에 직접Maintainer로 추가함
대상 Project:
{PROJECT_NAME}/{SERVICE_PREFIX}/{SERVICE_NAME}
경로:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → {SERVICE_NAME} → 좌측 Manage → Members → Invite members
설정:
- Username, name or email address :
운영 책임자 계정 - Select a role :
Maintainer
정상 기준:
GitLab 일반 UI → Your work → Groups → {PROJECT_NAME} → {SERVICE_PREFIX} → {SERVICE_NAME} → 좌측 Manage → Members → Members Tab
- 상위 서비스 관리 Subgroup에 연결된 권한 관리 Subgroup({COMPANY_NAME}/{SERVICE_PREFIX}) 소속 사용자들: Inherited from {PROJECT_NAME}/{SERVICE_PREFIX} / Developer
- 운영 책임자 계정: Direct member by GitLab Admin / Maintainer
- 최고 관리자 계정(Admin): Inherited from {PROJECT_NAME} / Owner
5. 추가 {SERVICE_PREFIX} 생성 절차¶
새로운 {SERVICE_PREFIX} 기준의 Repository 를 생성할 경우 아래 순서로 진행함.
진행 기준:
권한 관리 Subgroup = {COMPANY_NAME}/{SERVICE_PREFIX}
서비스 관리 Subgroup = {PROJECT_NAME}/{SERVICE_PREFIX}
서비스 Project Repository = {PROJECT_NAME}/{SERVICE_PREFIX}/{SERVICE_NAME}
진행 순서:
- 권한 관리 Subgroup 생성
- 권한 관리 Subgroup 생성 직후 최고 관리자 계정(Admin)의 direct membership 여부 확인 및 필요 시 정리
- 권한 관리 Subgroup 사용자 추가
- 서비스 관리 Subgroup 생성
- 서비스 관리 Subgroup 생성 직후 최고 관리자 계정(Admin)의 direct membership 여부 확인 및 필요 시 정리
- 서비스 관리 Subgroup 에 권한 관리 Subgroup 연결
- 서비스 Project Repository 생성
- 운영 책임자 계정을 서비스 Project Repository 에 Maintainer 로 override 설정
- 각 단계의
정상 기준확인