GitHub 조직 및 권한의 작동 방식

완료됨

이전 단원에서는 사용자가 GitHub에 인증하는 다양한 방법을 살펴봤습니다. 이 단원에서는 각 계층 구조 수준에 대한 사용 권한에 대해 알아봅니다.

  • 리포지토리 권한
  • 팀 권한
  • 조직 권한
  • 엔터프라이즈 권한

리포지토리 권한 수준

특정 사용 권한 수준을 할당하여 각 리포지토리에 대한 액세스를 사용자 지정할 수 있습니다. 5가지 표준 리포지토리 수준 권한이 있습니다.

  • 읽기: 프로젝트를 보거나 논의하려는 비코드 기여자에게 사용하는 것이 좋습니다. 이 수준은 리포지토리 내에서 콘텐츠를 보아야 하지만 실제로 기여하거나 변경할 필요가 없는 모든 사용자에게 적합합니다.
  • 심사: 쓰기 권한 없이 문제와 끌어오기 요청을 사전에 관리해야 하는 기여자에게 사용하는 것이 좋습니다. 이 수준은 코드를 수정하지 않고 문제 및 토론을 추적하는 프로젝트 관리자에게 유용합니다.
  • 쓰기: 프로젝트에 적극적으로 푸시하는 기여자에게 사용하는 것이 좋습니다. 쓰기는 대부분의 개발자에 대한 표준 권한입니다.
  • 유지 관리: 리포지토리를 관리해야 하는 프로젝트 관리자에게 권장됩니다. 민감하거나 안전하지 않은 작업에 대한 액세스 권한은 부여되지 않습니다.
  • 관리자: 보안 관리 또는 리포지토리 삭제와 같은 중요하고 안전하지 않은 작업을 포함하여 프로젝트에 대한 모든 권한이 필요한 사용자에게 사용하는 것이 좋습니다. 이들은 리포지토리 소유자 및 관리자입니다.

조직 구성원, 외부 협력자, 팀에 조직이 소유한 리포지토리에 대한 다양한 수준의 액세스 권한을 부여할 수 있습니다. 각 권한 수준은 리포지토리 콘텐츠 및 설정에 점진적으로 더 많은 액세스 권한을 부여합니다. 프로젝트에 대해 필요 이상으로 더 많은 액세스 권한을 부여하지 않고도 프로젝트에서 각 사용자나 팀의 역할에 가장 잘 맞는 수준을 선택합니다.

또한 관리자는 GitHub Enterprise에서 사용자 지정 역할을 만들어 필요에 따라 추가 권한으로 이러한 기본 역할 중 하나를 확장할 수 있습니다.

리포지토리 포크란?

포크는 사용자 고유의 GitHub 계정으로 다른 사용자의 리포지토리에 대한 개인 복사본을 만드는 방법입니다. 리포지토리를 포크하면 원래 프로젝트에 영향을 주지 않고 자유롭게 수정할 수 있는 고유한 버전이 표시됩니다. 이 프로세스는 오픈 소스에 기여하거나 변경 내용을 안전하게 실험하기 위한 일반적인 워크플로입니다.

"업스트림" 리포지토리라고도 하는 원래 리포지토리에서 변경 내용을 끌어와 포크를 최신 상태로 유지할 수도 있습니다.

리포지토리를 포크하는 방법은 다음과 같습니다.

  1. GitHub.com 포크하려는 리포지토리의 기본 페이지로 이동합니다.

  2. 오른쪽 위 모서리에서 포크를 선택합니다.

  3. 포크의 소유자(개인 계정 또는 조직)를 선택합니다.

  4. 필요에 따라 포크된 리포지토리의 이름을 바꾸거나 모든 분기를 포함합니다.

  5. 포크 만들기를 선택합니다.

    GitHub 리포지토리의 오른쪽 위 모서리에 있는 포크 단추를 보여 주는 스크린샷

포크 권한 관리(관리자용)

조직 소유 리포지토리의 경우 관리자는 리포지토리를 포크할 수 있는지 여부를 제어할 수 있습니다.

  • 공용 리포지토리: 포크는 항상 허용됩니다.
  • 프라이빗 리포지토리: 포크를 사용하지 않도록 설정하거나 조직 구성원으로만 제한할 수 있습니다.
  • 내부 리포지토리: 동일한 엔터프라이즈 계정 내에서만 포크할 수 있습니다.

포크 설정을 구성하려면 다음을 수행합니다.

  1. 조직 리포지토리의 설정으로 이동합니다.

  2. 왼쪽 사이드바의 Access에서 구성원 권한을 클릭합니다.

  3. 리포지토리 포크 옵션을 찾아 필요에 따라 업데이트합니다.

    GitHub 조직의 포크 권한을 보여 주는 스크린샷

팁 (조언)

프라이빗 리포지토리에 대해 포크를 사용하지 않도록 설정하면 조직 구성원을 포함한 누구도 포크할 수 없습니다.

자세한 내용은 리포지토리 포크에 대한 GitHub Docs 문서를 참조하세요.

리포지토리 인사이트 보기

GitHub의 리포지토리 인사이트는 프로젝트의 활동, 기여도 및 종속성을 모니터링하고 분석하는 강력한 방법을 제공합니다. 이러한 인사이트를 활용하여 프로젝트 상태를 추적하고, 병목 상태를 식별하고, 보안을 보장할 수 있습니다. 이 섹션에서는 리포지토리 인사이트에 액세스하고 효과적으로 사용하기 위한 모범 사례를 제공하는 단계를 안내합니다.

리포지토리 인사이트를 보는 단계

  1. GitHub의 리포지토리로 이동합니다.
  2. 리포지토리 이름 아래에서 인사이트 탭을 클릭합니다.
  3. 인사이트 탭에서 다음 섹션을 살펴봅니다.
    • 기여자: 각 기여자의 커밋, 추가 및 삭제를 포함하여 시간에 따른 기여 그래프를 봅니다.
    • 트래픽: 고유한 방문자 및 페이지 보기를 포함하여 리포지토리 트래픽을 모니터링합니다.
    • 커밋: 시간이 지남에 따라 커밋 활동을 분석합니다.
    • 코드 빈도: 시간에 따라 추가 및 삭제된 줄 수를 추적합니다.
    • 종속성 그래프: 리포지토리의 종속성을 확인하고 잠재적인 보안 취약성을 식별합니다.

리포지토리 인사이트 사용에 대한 모범 사례

  • 기여 모니터링: 기여자 섹션을 사용하여 가장 주목받는 리포지토리의 활성 기여자 및 영역을 식별합니다.
  • 트래픽 추적: 트래픽 섹션을 사용하여 사용자가 리포지토리와 상호 작용하는 방식을 이해하고 참여 추세를 식별합니다.
  • 취약성 해결: 정기적으로 종속성 그래프를 검토하여 리포지토리가 안전하게 유지되는지 확인합니다.

리포지토리 인사이트를 활용하여 데이터 기반 결정을 내려 공동 작업, 보안 및 프로젝트 관리를 개선할 수 있습니다.

사용자가 리포지토리 액세스를 받는 방법

리포지토리 사용 권한 목록이 지정된 사용자의 작업

리포지토리에서 사용자의 유효 권한은 다음을 비롯한 다양한 요인의 영향을 받습니다.

  • 리포지토리 역할: (예: 관리자, 쓰기, 읽기)
  • 팀 멤버 자격: (예: 팀의 상속된 권한)
  • 조직 구성원 자격: (예: 기본 조직 권한, SSO 요구 사항)

이러한 서로 다른 사용 권한 원본을 결합하면 GitHub는 사용자에게 부여된 가장 높은 수준의 액세스를 적용합니다. 예를 들어 사용자가 팀을 통해 읽기 권한이 있지만 공동 작업자로 직접 할당된 쓰기 액세스 권한이 있는 경우 쓰기 권한이 효과적으로 부여됩니다.

리포지토리 멤버 자격 옵션

리포지토리에 대한 액세스 권한을 부여하는 경우 사용자가 공동 작업자가 될 수 있는 여러 가지 방법이 있습니다.

멤버십 유형 설명
직접 협력자 특정 역할(읽기, 심사, 쓰기, 유지 관리 또는 관리자)을 사용하여 리포지토리에 명시적으로 추가됩니다.
외부 참가자 또는 소규모 팀에 권장됩니다.
팀 멤버 자격 사용자는 팀 멤버 자격을 통해 리포지토리 액세스를 상속합니다.
팀 권한은 종종 일관되고 확장 가능한 관리를 위해 조직 수준에서 설정됩니다.
조직 기본 권한 리포지토리가 조직의 일부인 경우 모든 조직 구성원에 대한 기본 권한 수준(예: 없음, 읽기)이 있을 수 있습니다.
소유자는 특정 팀 또는 사용자에 대해 이러한 기본값을 재정의할 수 있습니다.
외부 협력자 조직의 구성원이 아니지만 리포지토리에 대한 명시적 액세스 권한이 있는 사용자입니다.
제한된 액세스 권한이 필요한 계약자, 프리랜서 또는 오픈 소스 기여자에게 유용합니다.

리포지토리 액세스 모니터링 및 감사

리포지토리에 대한 액세스 권한이 있는 사용자를 정기적으로 감사하면 적절한 보안 및 규정 준수가 보장됩니다. 다음은 몇 가지 권장되는 단계 및 도구입니다.

  • 리포지토리 설정에서 액세스 보기:

    • 설정 > 관리 액세스(리포지토리용)로 이동합니다.
    • 사용 권한 수준과 함께 사용자 및 팀 목록을 검토합니다.
  • 조직 감사 로그(GitHub Enterprise 또는 조직 수준):

    • 조직 소유자는 감사 로그에서 멤버 자격, 리포지토리 액세스 및 사용 권한에 대한 변경 내용을 볼 수 있습니다.
    • 더 집중된 보기를 위해 리포지토리 이름 또는 액세스 변경 내용별로 이벤트를 필터링합니다.
  • 엔터프라이즈 감사 로그(GitHub Enterprise):

    • 여러 조직을 관리하는 경우 엔터프라이즈 계정의 감사 로그를 사용하여 모든 조직 및 리포지토리의 변경 내용을 추적합니다.
    • 이는 규정 준수 보고 또는 대규모 보안 검토에 특히 유용합니다.
  • 자동화된 스크립팅:

    • GitHub REST API 또는 GraphQL API를 사용하여 프로그래밍 방식으로 협력자, 팀 및 권한을 나열합니다.
    • CI/CD 파이프라인 또는 보안 대시보드와 스크립트를 통합하여 변칙을 지속적으로 모니터링하고 플래그를 지정합니다.

팁: 모든 코드 변경에 대한 보안 및 책임의 또 다른 계층을 추가하려면 분기 보호 규칙 및 필요한 검토를 설정합니다.

팀 권한 수준

GitHub 조직의 팀은 공유 리포지토리에서 공동 작업하는 사용자 그룹입니다. Teams는 여러 리포지토리에 일관된 권한을 한 번에 적용하여 액세스 관리 및 통신을 간소화할 수 있습니다. 주요 이점은 다음과 같습니다.

  • 중앙 집중식 액세스 제어: 각 사용자를 개별적으로 관리하는 대신 전체 팀에 리포지토리 권한(예: 읽기, 쓰기)을 할당합니다.
  • 구조적 협업: 보다 효율적인 협업을 위해 부서, 프로젝트 또는 역할별로 구성원을 구성합니다.
  • 표시 유형 및 통신: 각 팀은 자체 토론 보드를 가질 수 있으므로 업데이트를 공유하고 노력을 조정하는 것이 더 쉽습니다.

팀은 여러 관련 사용자에게 한 번에 리포지토리 권한을 할당하는 쉬운 방법을 제공합니다. 자식 팀의 구성원은 부모 팀의 권한 설정을 상속하여 회사의 자연적인 구조를 통해 권한을 연계 설정하는 간편한 방법을 제공합니다.

팀 수준에는 두 가지 수준의 사용 권한이 있습니다.

권한 수준 설명
회원 팀 구성원은 조직 구성원과 동일한 기능 세트를 가지고 있습니다.
관리자 팀 유지 관리자는 다음을 포함하여 팀 구성원이 수행할 수 있는 모든 작업을 수행할 수 있습니다.
- 팀의 이름, 설명, 표시 여부를 변경합니다.
- 팀에 부모 팀과 자식 팀을 변경하도록 요청합니다.
- 팀 프로필 사진을 설정합니다.
- 팀 토론을 편집하고 삭제합니다.
- 팀에서 조직 구성원을 추가하고 제거합니다.
- 팀 구성원을 승격하여 팀 유지 관리자 권한을 부여합니다.
- 리포지토리에 대한 팀의 액세스 권한을 제거합니다.
- 팀에 대한 코드 검토 할당을 관리합니다.
- 끌어오기 요청에 대한 미리 예약된 알림을 관리합니다.

조직 소유자는 또한 조직의 모든 구성원을 팀의 관리자로 승격할 수 있습니다.

관리하는 리포지토리에 대한 액세스를 감사하기 위해 설정에서 리포지토리에 대한 액세스 권한이 있는 팀 및 사용자의 결합된 목록을 볼 수 있습니다.

관리 액세스 화면 스크린샷

GitHub는 팀에 할당할 수 있는 여러 권한 수준을 제공합니다. 리포지토리에 대한 팀 액세스 권한을 부여하는 경우 다음 권한 모델 중에서 선택할 수 있습니다.

사용 권한 모델

사용 권한 수준 설명 적합한 대상
읽음 사용자는 리포지토리를 보고 복제할 수 있습니다. 문제와 끌어오기 요청을 열고 메모를 달 수 있습니다. 읽기 전용 또는 검토 액세스가 필요한 개인
환자의 중증도에 따른 분류 사용자는 문제를 관리하고 요청을 끌어올 수 있습니다(예: 레이블, 할당, 주석). 리포지토리에 변경 내용을 푸시할 수 없습니다. 코드를 기여하지 않고 문제를 심사하고 구성해야 하는 프로젝트 관리자 또는 기여자입니다.
쓰기 사용자는 분기(보호된 분기 제외)에 푸시할 수 있습니다. 문제를 관리하고 요청을 끌어올 수 있습니다. 코드를 커밋하거나 설명서를 업데이트해야 하는 활성 기여자입니다.
유지하다 사용자는 리포지토리 설정, 문제 및 끌어오기 요청을 관리할 수 있습니다. 리포지토리를 삭제하거나 전송할 수 없습니다. 일상적인 리포지토리 관리를 처리하지만 전체 관리자 권한이 필요하지 않은 프로젝트 유지 관리자입니다.
관리자 사용자는 사용 권한 설정, 리포지토리 삭제 및 모든 설정 관리를 포함하여 리포지토리를 완전히 제어할 수 있습니다. 최상위 관리 액세스 권한이 필요한 사용자입니다.

팁: 항상 최소 권한 원칙을 따르세요. 각 팀이 작업을 효과적으로 수행하는 데 필요한 가장 낮은 사용 권한 수준을 할당합니다. 이 방법을 사용하면 실수로 변경되거나 무단으로 변경될 위험이 줄어듭니다.