콘텐츠로 이동

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. 전체 흐름

  1. 권한 관리 Root Group 생성. ex) {COMPANY_NAME}

    • 권한 관리 Root Group최고 관리자 계정(Admin)Owner
  2. 권한 관리 Subgroup(조직/부서) 생성. ex) frontend, backend, db, infra, ...

  3. 권한 관리 Subgroup 사용자 추가

    • 기본 Developer.
    • Project 특성에 따라 Reporter 또는 Guest
  4. 서비스 관리 Root Group 생성. ex) {PROJECT_NAME}

    • 서비스 관리 Root Group최고 관리자 계정(Admin)Owner
  5. 서비스 관리 Subgroup 생성. ex) frontend, backend, db, infra, ...

  6. 서비스 관리 Subgroup권한 관리 Subgroup(조직/부서) 연결

  7. 서비스 Project Repository 생성

  8. 운영 책임자 계정서비스 Project RepositoryMaintainer 로 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 로 표시될 수 있음.

이 경우 아래 순서로 정리함.

  1. {COMPANY_NAME} Root Group 의 Members Tab 에서 최고 관리자 계정(Admin)Direct member / Owner로 유지되는지 확인함
  2. {COMPANY_NAME}/{SERVICE_PREFIX} Subgroup 의 Members Tab 에서 최고 관리자 계정(Admin)Direct member / Owner로 표시되는지 확인함
  3. Direct member / Owner로 표시될 경우 {COMPANY_NAME}/{SERVICE_PREFIX} 에서 최고 관리자 계정(Admin) 행의 Leave group을 실행함
  4. 확인 팝업의 대상이 반드시 {COMPANY_NAME}/{SERVICE_PREFIX} 또는 해당 Subgroup 인지 확인함
  5. 새로고침 후 최고 관리자 계정(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 로 표시될 수 있음.

이 경우 아래 순서로 정리함.

  1. {PROJECT_NAME} Root Group 의 Members Tab 에서 최고 관리자 계정(Admin)Direct member / Owner로 유지되는지 확인함
  2. {PROJECT_NAME}/{SERVICE_PREFIX} Subgroup 의 Members Tab 에서 최고 관리자 계정(Admin)Direct member / Owner로 표시되는지 확인함
  3. Direct member / Owner로 표시될 경우 {PROJECT_NAME}/{SERVICE_PREFIX} 에서 최고 관리자 계정(Admin) 행의 Leave group을 실행함
  4. 확인 팝업의 대상이 반드시 {PROJECT_NAME}/{SERVICE_PREFIX} 또는 해당 Subgroup 인지 확인함
  5. 새로고침 후 최고 관리자 계정(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 생성 후 운영 책임자 계정 은 별도 Maintainer override 로 추가함

대상:

{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 RepositoryMaintainer 로 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}

진행 순서:

  1. 권한 관리 Subgroup 생성
  2. 권한 관리 Subgroup 생성 직후 최고 관리자 계정(Admin)의 direct membership 여부 확인 및 필요 시 정리
  3. 권한 관리 Subgroup 사용자 추가
  4. 서비스 관리 Subgroup 생성
  5. 서비스 관리 Subgroup 생성 직후 최고 관리자 계정(Admin)의 direct membership 여부 확인 및 필요 시 정리
  6. 서비스 관리 Subgroup 에 권한 관리 Subgroup 연결
  7. 서비스 Project Repository 생성
  8. 운영 책임자 계정을 서비스 Project Repository 에 Maintainer 로 override 설정
  9. 각 단계의 정상 기준 확인