그룹 접근 및 권한

그룹 설정을 구성하여 그룹 권한 및 접근을 제어합니다.

그룹 푸시 규칙

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

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

GitLab 15.4 이상에서 그룹의 푸시 규칙을 구성하려면:

  1. 왼쪽 사이드바에서 설정 > 리포지터리를 선택합니다.
  2. 사전 정의된 푸시 규칙 섹션을 확장합니다.
  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 주소별로 그룹 액세스를 제한할 수 있습니다. 이 최상위 그룹 설정은 다음에 적용됩니다:

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

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

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

보안 측면

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

  • 관리자 및 그룹 소유자는 IP 제한에 관계없이 어떤 IP 주소에서든 그룹 설정에 액세스할 수 있습니다. 다만:
    • 그룹 소유자는 허용되지 않은 IP 주소에서 액세스할 때 그룹에 속한 프로젝트나 하위 그룹에는 액세스할 수 없습니다.
    • 관리자는 허용되지 않은 IP 주소에서 액세스해도 그룹에 속한 프로젝트에 액세스할 수 있습니다. 프로젝트 액세스에는 코드 복제가 포함됩니다.
    • 사용자는 그룹 및 프로젝트 이름과 계층구조를 볼 수 있습니다. 제한되는 것은 다음과 같습니다:
  • 러너를 등록할 때 IP 제한에는 영향을 받지 않습니다. 러너가 새 작업을 요청하거나 작업 상태를 업데이트할 때에도 IP 제한에 영향을 받지 않습니다. 그러나 실행 중인 CI/CD 작업이 제한된 IP 주소에서 Git 요청을 보내면 IP 제한으로 인해 코드가 복제되지 않습니다.
  • 사용자는 대시보드에서 IP 제한된 그룹 및 프로젝트와 관련된 이벤트를 일부 볼 수 있습니다. 활동에는 푸시, 머지, 이슈 또는 코멘트 이벤트가 포함될 수 있습니다.
  • GitLab SaaS에서 SSH를 통한 Git 작업에 대한 IP 액세스 제한이 지원됩니다. Self-managed 인스턴스에 적용되는 IP 액세스 제한은 gitlab-sshdPROXY 프로토콜을 지원합니다.
  • IP 제한은 그룹에 속하는 공용 프로젝트에는 적용되지만 완전한 방화벽이 아니며 프로젝트의 캐시 파일은 IP 차단된 사용자에게도 여전히 접근할 수 있습니다.

GitLab.com 접근 제한

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

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

도메인별 그룹 액세스 제한

Tier: Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • GitLab 13.1에서 여러 이메일 도메인 지정 지원 추가됨.
  • GitLab 14.1.2에서 그룹 내 프로젝트 액세스 제한 지원 추가 됨.
  • 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. 회원이 <group_name> 및 해당 하위 그룹 외부의 그룹을 초대하는 것을 방지를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

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

프로젝트를 다른 그룹과 공유하면 프로젝트에 더 많은 사용자가 프로젝트의 다른 멤버를 초대할 수 있습니다. 각 (하위) 그룹은 액세스 권한의 추가 소스가 될 수 있으며, 이는 혼란스럽고 제어가 어려울 수 있습니다.

프로젝트 멤버 초대 권한을 하나의 출처로 제한하여, 한 그룹에서 다른 그룹과 프로젝트를 공유하지 못하도록 방지하려면:

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

이 설정은 활성화되면 모든 하위 그룹에 적용되며, 그룹 소유자에 의해 재정의되지 않는 한 모든 포크가이 설정이 적용됩니다.

그룹 액세스 요청 방지

그룹 소유자로서 비멤버가 귀하의 그룹에 액세스를 요청하는 것을 방지할 수 있습니다.

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

그룹 외부에서 포크되는 것 방지

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

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

전제 조건:

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

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

  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 서버가 모든 LDAP 자격 증명을 사용하여 로그인한 사용자들의 그룹 멤버십에 대한 단일 진실의 원천으로 간주됩니다.
  • GitLab 16.8 이후에는 그룹 소유자가 그룹에 LDAP 동기화가 활성화되어 있을 때도 멤버 역할 API를 사용하여 서비스 계정 사용자를 그룹에 추가하거나 제거할 수 있습니다. 그룹 소유자는 서비스 계정 사용자를 추가하거나 제거할 수 없습니다.

동일한 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 user filter을 선택합니다.
  3. LDAP User filter 상자에 필터를 입력합니다. 사용자 필터에 대한 설명서를 참조하세요.
  4. LDAP Access 섹션에서 이 그룹에 동기화된 사용자의 권한 수준을 선택합니다.
  5. 동기화 추가를 선택합니다.

사용자 권한 재정의

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

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

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 관리 > 멤버를 선택합니다. 만약 LDAP 동기화가 사용자에게:
    • 상위 그룹 멤버십보다 더 많은 권한으로 역할을 부여했다면, 해당 사용자는 그룹의 직접 멤버십으로 표시됩니다.
    • 상위 그룹 멤버십과 같거나 더 적은 권한으로 역할을 부여했다면, 해당 사용자는 그룹의 상속 멤버십으로 표시됩니다.
  3. 선택적으로, 권한을 편집하려는 사용자가 상속 멤버십으로 표시된 경우, 권한을 재정의하기 전에 하위 그룹을 필터링하여 직접 멤버를 표시합니다.
  4. 편집하려는 사용자의 행에서 연필() 아이콘을 선택합니다.
  5. 모달에서 권한 편집을 선택합니다.

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

문제 해결

IP 제한으로 인해 액세스가 차단되었는지 확인

사용자가 일반적으로 액세스해야 할 때 404 오류가 발생하고, 해당 문제가 특정 그룹에만 해당되는 경우, auth.log 레일 로그에서 다음 중 하나 이상을 검색합니다:

  • json.message: 'Attempting to access IP restricted group'
  • json.allowed: false

로그 항목을 보면 remote.ip가 그룹의 허용된 IP 주소 디렉터리과 비교합니다.

그룹 멤버 권한 업데이트 불가

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

만일 상위 그룹 멤버십이 하위 그룹과 동일하거나 높은 역할을 가지고 있다면, 상속된 멤버십은 하위 그룹 멤버 페이지에 나열됩니다. 심지어 그룹에 직접적인 멤버십이 존재한다 하더라도요.

직접적인 멤버십을 보고 업데이트하기 위해, 그룹을 필터링하여 직접 멤버를 표시하세요.

디자인된 멤버 페이지를 통해 유형별로 멤버를 필터링해야 하는 필요가 제안되었으며, 이 페이지에는 직접 및 상속된 멤버십이 모두 나열됩니다. 이슈 337539에서 이 제안되었습니다.