그룹 액세스 및 권한

그룹을 구성하여 그룹 권한 및 액세스를 제어합니다.

그룹 푸시 규칙

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

그룹 푸시 규칙을 사용하면 그룹 유지 관리자가 해당 그룹 내에서 새로 생성된 프로젝트에 대한 푸시 규칙을 설정할 수 있습니다.

GitLab 15.4 이상에서 그룹의 푸시 규칙을 구성하는 방법:

  1. 왼쪽 사이드바에서 설정 > 리포지터리를 선택합니다.
  2. Pre-defined push rules 섹션을 확장합니다.
  3. 원하는 설정을 선택합니다.
  4. 푸시 규칙 저장을 선택합니다.

GitLab 15.3 및 이전 버전에서 그룹의 푸시 규칙을 구성하는 방법:

  1. 왼쪽 사이드바에서 푸시 규칙을 선택합니다.
  2. 원하는 설정을 선택합니다.
  3. 푸시 규칙 저장을 선택합니다.

그룹의 새 서브그룹은 다음 중 하나에 기반하여 푸시 규칙이 설정됩니다:

  • 푸시 규칙이 정의된 가장 가까운 상위 그룹.
  • 상위 그룹에 푸시 규칙이 정의되지 않은 경우 인스턴스 수준에서 설정한 푸시 규칙.

Git 액세스 프로토콜 제한

그룹의 리포지터리에 액세스하는 데 사용되는 허용된 프로토콜을 SSH, HTTPS 또는 둘 다로 설정할 수 있습니다. 관리자가 구성한 경우, 이 설정은 인스턴스 설정에 따라 비활성화됩니다.

그룹의 허용된 Git 액세스 프로토콜을 변경하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 그룹을 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 권한 및 그룹 기능 섹션을 확장합니다.
  4. 활성화된 Git 액세스 프로토콜에서 허용된 프로토콜을 선택합니다.
  5. 변경 사항 저장을 선택합니다.

IP 주소로 그룹 액세스 제한

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

특정 리소스에 대한 액세스를 조직 내의 사람만 가능하게 하려면 IP 주소로 그룹 액세스를 제한할 수 있습니다. 이 최상위 그룹 설정은 다음에 적용됩니다:

  • GitLab UI(하위 그룹, 프로젝트, 이슈 포함. GitLab Pages는 제외).
  • API.
  • GitLab 15.1 이상의 Self-Managed형 GitLab 설치에서 그룹 수준에서 전역으로 허용된 IP 주소 범위를 구성할 수도 있습니다.

관리자는 IP 주소로 제한된 액세스를 전역으로 허용된 IP 주소와 결합할 수 있습니다.

그룹 액세스를 IP 주소로 제한하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 그룹을 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 권한 및 그룹 기능 섹션을 확장합니다.
  4. IP 주소로 액세스 제한 텍스트 상자에 CIDR 표기법으로 표시된 IPv4 또는 IPv6 주소 범위 디렉터리을 입력합니다. 이 디렉터리:
    • IP 주소 범위의 수에 제한이 없습니다.
    • 크기 제한은 1 GB입니다.
    • SSH 또는 HTTP 인증 IP 주소 범위에 적용됩니다. 이 디렉터리을 인증 유형으로 구분할 수 없습니다.
  5. 변경 사항 저장을 선택합니다.

보안 영향

IP 주소로 그룹 액세스를 제한하는 것에는 다음과 같은 영향이 있습니다:

  • 관리자 및 그룹 소유자는 IP 제한에 관계없이 어떤 IP 주소에서든 그룹 설정에 액세스할 수 있습니다. 단,
    • 그룹 소유자는 IP 주소가 허용되지 않는 경우 프로젝트에 액세스할 수 없지만 하위 그룹에는 액세스할 수 있습니다.
    • 관리자는 허용되지 않는 IP 주소에서 프로젝트에 액세스할 수 있습니다. 프로젝트 액세스에는 그 프로젝트에서 코드를 복제하는 것이 포함됩니다.
    • 사용자는 그룹 및 프로젝트 이름 및 계층구조를 볼 수 있습니다. 제한되는 것은 다음과 같습니다:
  • 러너를 등록할 때 IP 제한에 바인딩되지 않습니다. 러너가 새 작업을 요청하거나 작업 상태를 업데이트할 때도 IP 제한에 바인딩되지 않습니다. 그러나 실행 중인 CI/CD 작업이 제한된 IP 주소에서 Git 요청을 보내면 IP 제한으로 인해 코드가 복제되지 않습니다.
  • 사용자는 대시보드에서 IP 제한이 있는 그룹 및 프로젝트에서 이벤트를 볼 수 있습니다. 활동에는 푸시, Merge, 이슈 또는 코멘트 이벤트가 포함될 수 있습니다.
  • IP 액세스 제한은 이메일로 회신을 사용하여 이슈나 Merge Request에 코멘트를 생성하거나 편집하는 사용자를 막지 않습니다.
  • SSH를 통한 Git 작업에 대한 IP 액세스 제한은 GitLab SaaS에서 지원됩니다. Self-Managed형 인스턴스에 대한 IP 액세스 제한은 PROXY protocol을 사용하여 gitlab-sshd로 가능합니다.
  • IP 제한은 그룹에 속하는 공유 리소스에는 적용되지 않습니다. 공유 리소스는 IP 블록에 속하지 않는 사용자에게도 액세스할 수 있습니다.
  • IP 제한은 공개 프로젝트에는 적용되지만 완전한 방화벽은 아니며 프로젝트의 캐시된 파일은 IP 블록에 속하지 않은 사용자도 액세스할 수 있습니다.

GitLab.com 액세스 제한

GitLab.com 인스턴스에서 러너는 전역 허용 디렉터리에 추가되어 IP 제한과 무관하게 사용할 수 있습니다.

러너(runner)에서 아티팩트 및 레지스트리 다운로드는 해당 지역의 Google 또는(MacOS 러너의 경우) Amazon IP 주소에서 수행됩니다. 이 다운로드는 따라서 전역 허용 디렉터리에 추가되지 않습니다. 러너 다운로드를 허용하려면 아웃바운드 러너 CIDR 범위를 그룹 허용 디렉터리에 추가하세요.

도메인으로 그룹 액세스 제한

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated
  • 특정 이메일 도메인의 그룹 멤버십을 제한하는 지원이 GitLab 15.1.1에 추가되었습니다.

특정 도메인의 이메일 주소를 가진 사용자만 해당 그룹 및 해당 프로젝트에 추가되도록 보장하려면 최상위 네임스페이스에서 이메일 도메인 허용 디렉터리을 정의하세요. 하위 그룹은 대체 허용 디렉터리을 정의할 수 없습니다.

도메인으로 그룹 액세스를 제한하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 그룹을 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 권한 및 그룹 기능 섹션을 확장합니다.
  4. 이메일로 멤버십 제한 필드에 도메인 이름을 입력합니다.
  5. 변경 사항 저장을 선택합니다.

새 사용자를 추가하려고 시도할 때 매번 사용자의 기본 이메일이 이 디렉터리과 비교됩니다. 구성된 이메일 도메인 제한과 일치하는 기본 이메일을 가진 사용자만 해당 그룹에 추가할 수 있습니다.

가장 인기 있는 공개 이메일 도메인은 다음과 같이 제한할 수 없습니다:

  • aol.com, gmail.com, hotmail.co.uk, hotmail.com,
  • hotmail.fr, icloud.com, live.com, mail.com,
  • me.com, msn.com, outlook.com,
  • proton.me, protonmail.com, tutanota.com,
  • yahoo.com, yandex.com, zohomail.com

그룹을 공유하는 경우 소스 및 대상 네임스페이스는 구성된 멤버 이메일 주소의 도메인을 모두 허용해야 합니다.

note
이메일로 멤버십 제한 디렉터리에서 도메인을 삭제하더라도 해당 도메인의 사용자는 그룹 및 해당 그룹의 프로젝트에서 삭제되지 않습니다. 또한 그룹 또는 프로젝트를 다른 그룹과 공유하는 경우 대상 그룹은 소스 그룹의 디렉터리에 없는 추가 이메일 도메인을 디렉터리에 추가할 수 있습니다. 따라서이 기능은 현재 사용자가 항상 이메일로 멤버십 제한 디렉터리을 준수하도록 보장하지 않습니다.

그룹 계층구조 외부의 그룹 공유 방지

최상위 그룹을 구성하여 해당 최상위 그룹의 하위 그룹 및 프로젝트가 최상위 그룹 계층 외부의 다른 그룹을 초대할 수 없도록 설정할 수 있습니다. 이 옵션은 최상위 그룹에만 사용할 수 있습니다.

예를 들어, 다음과 같은 그룹 및 프로젝트 계층구조가 있다면:

  • 동물 > 개 > 개 프로젝트
  • 동물 > 고양이
  • 식물 > 나무

만약 동물 그룹에서 그룹 계층 구조 외부의 공유를 방지한다면:

  • 고양이 그룹을 초대할 수 있습니다.
  • 나무 그룹을 초대할 수 없습니다.
  • 개 프로젝트고양이 그룹을 초대할 수 있습니다.
  • 개 프로젝트나무 그룹을 초대할 수 없습니다.

그룹 계층구조 외부의 공유를 방지하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 권한 및 그룹 기능을 확장합니다.
  4. 멤버는 <그룹_이름> 및 해당 하위 그룹 외부의 그룹을 초대할 수 없습니다를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

프로젝트를 다른 그룹과 공유하지 못하도록 방지

프로젝트를 다른 그룹과 공유하는 경우 사용자 수가 증가하여 프로젝트에 더 많은 구성원을 초대할 수 있습니다. 각 (하위)그룹은 접근 권한 추가 소스가 될 수 있으며, 이를 통제하기 어렵고 혼란스러울 수 있습니다.

프로젝트를 다른 그룹과 공유하는 권한을 제한하여 단일 소스에서 프로젝트 멤버를 초대하는 것으로 변경하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 권한 및 그룹 기능 섹션을 확장합니다.
  4. <그룹_이름>의 프로젝트는 다른 그룹과 공유할 수 없습니다를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

이 설정은 활성화되면 모든 하위그룹에 적용되며, 그룹 소유자가 재정의하지 않는 한 이미 프로젝트에 추가된 그룹은 이 설정이 활성화될 때 액세스 권한을 상실합니다.

그룹에 대한 액세스 요청 방지

그룹 소유자로서, 비구성원이 귀하의 그룹에 액세스를 요청하는 것을 방지할 수 있습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 권한 및 그룹 기능 섹션을 확장합니다.
  4. 사용자가 액세스를 요청할 수 있음 확인란을 선택해제합니다.
  5. 변경 사항 저장을 선택합니다.

그룹 외부 프로젝트에서 포킹 방지

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed형, GitLab Dedicated

기본적으로 그룹 내 프로젝트는 포크될 수 있습니다. GitLab Premium 및 Ultimate 티어에서는 현재 최상위 그룹 외부에서 프로젝트가 포크되는 것을 방지할 수 있습니다.

note
가능한 경우 최상위 그룹 외부에서 포킹하는 것을 방지해야 합니다. 이 설정은 악의적인 사용자가 잠재적으로 사용할 수 있는 경로의 수를 줄입니다. 그러나 최상위 그룹 외부에서 많은 협업을 기대하는 경우 최상위 그룹 외부에서 포킹을 방지하지 않을 수도 있습니다.

전제 조건:

  • 이 설정은 최상위 그룹에서만 활성화됩니다.
  • 모든 하위 그룹은 최상위 그룹에서 이 설정을 상속받고 하위 그룹 레벨에서는 변경할 수 없습니다.

그룹 외부에서 프로젝트를 포킹하지 못하도록 방지하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 권한 및 그룹 기능 섹션을 확장합니다.
  4. 현재 그룹 외부에서 프로젝트 포킹 방지를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

기존 포크는 제거되지 않습니다.

그룹 내 프로젝트에 구성원 추가 방지

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed형, GitLab Dedicated

그룹 소유자로서 해당 그룹 내 모든 프로젝트에 대한 새로운 프로젝트 멤버십 추가를 방지하여 프로젝트 멤버십을 보다 엄격하게 통제할 수 있습니다.

예를 들어, 감사 이벤트를 위해 그룹을 잠그려는 경우, 감사 중에 프로젝트 멤버십이 수정되지 않음을 보장할 수 있습니다.

그룹 멤버십 잠금이 활성화되면 그룹 소유자는 여전히:

  • 그룹에 구성원을 초대하거나 그룹에 구성원을 추가하여 그룹의 프로젝트에 접근 권한을 부여할 수 있습니다.
  • 그룹 구성원의 역할을 변경할 수 있습니다.

이 설정은 계층화되지 않습니다. 하위 그룹의 프로젝트는 부모 그룹을 무시하고 하위 그룹의 구성에 따릅니다.

그룹 내 프로젝트에 구성원을 추가하지 못하도록 방지하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 권한 및 그룹 기능 섹션을 확장합니다.
  4. 멤버십 아래에서 사용자는 이 그룹의 프로젝트에 추가될 수 없습니다를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

그룹 멤버십을 잠그면:

  • 이전에 권한이 있는 사용자는 더 이상 그룹에 구성원을 추가할 수 없습니다.
  • 새로운 사용자를 프로젝트에 추가하는 API 요청이 불가능해집니다.

LDAP를 통한 그룹 멤버십 관리

Tier: Premium, Ultimate Offering: Self-Managed형

그룹 동기화를 통해 LDAP 그룹을 GitLab 그룹에 매핑시킬 수 있습니다. 이를 통해 그룹별 사용자 관리를 더욱 효과적으로 할 수 있습니다. 그룹 동기화를 구성하려면 group_base DN ('OU=Global Groups,OU=GitLab INT,DC=GitLab,DC=org')을 편집합니다. 이 OU는 GitLab 그룹과 관련된 모든 그룹을 포함합니다.

그룹 링크를 생성하기 위해 CN 또는 필터를 사용할 수 있습니다. 이러한 그룹 링크를 생성하려면 해당 그룹의 설정 > LDAP 동기화 페이지로 이동합니다. 링크를 구성한 후에는 사용자가 GitLab 그룹과 동기화하기까지 1시간 이상이 소요될 수 있습니다. 링크를 구성한 후에:

  • GitLab 16.7 및 이전 버전에서, 그룹 소유자는 그룹에 대해 사용자를 추가하거나 제거할 수 없습니다. LDAP 서버가 로그인한 모든 사용자에 대한 그룹 멤버십에 대한 단일 정보원으로 간주됩니다.
  • GitLab 16.8 이상에서, 그룹 소유자는 멤버 역할 API를 사용하여 서비스 계정 사용자를 그룹에 추가하거나 제거할 수 있습니다. LDAP 동기화가 그룹에 대해 활성화되어 있는 경우에도 그룹 소유자는 비서비스 계정 사용자를 추가하거나 제거할 수 없습니다.

하나의 사용자가 동일한 GitLab 그룹에 대해 두 가지로 구성된 LDAP 그룹의 구성원인 경우, 해당 사용자는 두 LDAP 그룹 역할 중 높은 역할이 부여됩니다. 예를 들어:

  • 사용자가 LDAP 그룹 OwnerDev의 구성원입니다.
  • GitLab 그룹은 이러한 두 LDAP 그룹과 함께 구성됩니다.
  • 그룹 동기화가 완료되면 사용자는 높은 LDAP 그룹 역할이 부여되므로 Owner 역할이 부여됩니다.

LDAP 및 그룹 동기화의 관리에 대한 자세한 내용은 주요 LDAP 설명서를 참조하세요.

note
LDAP 동기화를 추가하면 LDAP 사용자가 그룹 구성원이지만 LDAP 그룹의 구성원이 아닌 경우 해당 사용자가 그룹에서 제거됩니다.

LDAP 그룹을 통한 프로젝트 액세스 관리를 위한 해결책을 사용할 수 있습니다.

CN을 통한 그룹 링크 생성

Tier: Premium, Ultimate Offering: Self-Managed형, GitLab Dedicated

CN을 통해 그룹 링크를 생성하려면:

  1. 링크 생성에 LDAP 서버를 선택합니다.
  2. 동기화 방법으로 LDAP Group cn을 선택합니다.
  3. LDAP Group cn 필드에서 그룹의 CN을 입력합니다. 구성된 group_base에 일치하는 CN 디렉터리이 있는 드롭다운 디렉터리이 있습니다. 이 디렉터리에서 CN을 선택합니다.
  4. LDAP Access 섹션에서 이 그룹에 동기화된 사용자에 대한 권한 수준을 선택합니다.
  5. 동기화 추가를 선택합니다.

그룹 필터를 사용하여 그룹 링크 생성하기

Tier: Premium, Ultimate Offering: Self-Managed, GitLab Dedicated

그룹 필터를 사용하여 그룹 링크를 만들려면:

  1. 링크할 LDAP 서버를 선택합니다.
  2. 동기화 방법으로 LDAP 사용자 필터를 선택합니다.
  3. LDAP 사용자 필터 상자에 필터를 입력합니다. 사용자 필터에 대한 문서를 참조하세요.
  4. LDAP 액세스 섹션에서 이 그룹에 동기화된 사용자의 권한 수준을 선택합니다.
  5. 동기화 추가를 선택합니다.

사용자 권한 재지정

Tier: Premium, Ultimate Offering: Self-Managed, GitLab Dedicated

관리자는 LDAP 사용자 권한을 매뉴얼으로 재지정할 수 있습니다. 사용자 권한을 재지정하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 관리 > 구성원을 선택합니다. 만약 LDAP 동기화가 사용자에게 부모 그룹 멤버십보다:
  3. 선택 사항. 수정하려는 사용자가 상속된 멤버십으로 표시된 경우, LDAP 사용자 권한을 재지정하기 전에 하위 그룹을 필터링하여 직접 멤버를 표시하세요.
  4. 편집 중인 사용자의 행에서 연필 () 아이콘을 선택합니다.
  5. 모달에서 권한 편집을 선택합니다.

이제 구성원 페이지에서 사용자의 권한을 편집할 수 있습니다.

문제 해결

IP 제한으로 인한 액세스 차단 여부 확인

특정 그룹에 액세스할 때 사용자가 일반적으로 액세스를 기대하는 대신 404 오류가 표시되는 경우, auth.log 레일 로그에서 다음 중 하나 이상을 검색하세요:

  • json.message: 'IP 제한 그룹에 액세스를 시도 중'
  • json.allowed: false

로그 항목을 보면 remote.ip를 그룹의 허용된 IP 주소 디렉터리과 비교하세요.

그룹 구성원의 권한 업데이트 불가능

그룹 소유자가 그룹 구성원의 권한을 업데이트할 수 없는 경우, 나열된 멤버십을 확인하세요. 그룹 소유자는 직접 멤버십만 업데이트할 수 있습니다.

상위 그룹 멤버십이 하위 그룹보다 동일하거나 더 높은 역할이 있는 경우, 상속된 멤버십은 그룹에서도 직접 멤버십으로 표시됩니다, 물론 그룹에 직접 멤버십이 이미 있는 경우라도.

직접 멤버십을 보고 업데이트하려면 그룹을 필터링하여 직접 멤버를 표시하세요.

리디자인된 멤버 페이지를 통해 유형별로 구성원을 필터링하고 직접 및 상속된 멤버십을 나열하는 것이 issue 337539에서 제안되었습니다.