라이선스 승인 정책
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
라이선스 승인 정책을 사용하면 머지 리퀘스트를 머지하기 전에 승인이 필요한 조건을 기준으로 지정할 수 있습니다. 라이선스 승인 정책은 보호된 대상 브랜치에만 적용됩니다. 다음 동영상에서 이러한 정책의 개요를 확인할 수 있습니다.
라이선스 승인 정책을 사용하면 머지 리퀘스트를 머지하기 전에 승인이 필요한 조건을 기준으로 지정할 수 있습니다.
라이선스 승인 정책은 보호된 대상 브랜치에만 적용됩니다.
다음 동영상에서 이러한 정책의 개요를 확인할 수 있습니다.
새 라이선스 승인 정책 생성을 위한 사전 요구 사항#
라이선스 승인 정책은 요구 사항 충족 여부를 확인하기 위해 의존성 스캐닝 job의 출력을 사용합니다. 의존성 스캐닝이 올바르게 구성되지 않아 열려 있는 MR과 관련된 의존성 스캐닝 job이 실행되지 않으면, 정책이 요구 사항을 확인할 데이터를 갖지 못합니다. 보안 정책은 평가에 필요한 데이터가 없을 때 기본적으로 차단(fail closed) 방식으로 동작하며 해당 머지 리퀘스트에 취약점이 있을 수 있다고 가정합니다. fallback_behavior 속성으로 이 기본 동작을 해제하고 정책이 통과(fail open) 방식으로 동작하도록 설정할 수 있습니다. 통과 방식으로 동작하는 정책에서는 유효하지 않거나 적용할 수 없는 규칙이 모두 차단 해제됩니다.
정책이 확실히 적용되도록 하려면 타깃 개발 프로젝트에서 의존성 스캐닝을 활성화합니다. 다음 몇 가지 방법을 사용할 수 있습니다.
- 모든 타깃 개발 프로젝트에서 의존성 스캐닝이 실행되도록 강제하는 스캔 실행 정책을 만듭니다.
- 개발 팀과 협력해 각 프로젝트의
.gitlab-ci.yml파일에서 의존성 스캐닝을 구성하거나 보안 구성을 사용해 활성화합니다.
라이선스 승인 정책에는 GitLab이 지원하는 패키지의 라이선스 정보가 필요합니다.
새 라이선스 승인 정책 생성#
라이선스 컴플라이언스를 적용하려면 라이선스 승인 정책을 만듭니다.
라이선스 승인 정책을 만드는 방법은 다음과 같습니다.
- 개발 그룹, 하위 그룹 또는 프로젝트에 보안 정책 프로젝트를 연결합니다(Owner 권한 필요).
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Secure > Policies를 선택합니다.
- 새 머지 리퀘스트 승인 정책을 만듭니다.
- 정책 규칙에서 License scanning을 선택합니다.
승인이 필요한 라이선스를 결정하는 기준#
다음 유형의 기준을 사용해 어떤 라이선스를 "승인됨" 또는 "거부됨"으로 보고 승인을 요구할지 결정할 수 있습니다.
- 명시적으로 금지한 라이선스 목록에 있는 라이선스가 탐지된 경우.
- 허용 가능한 라이선스로 명시적으로 나열한 라이선스를 제외한 라이선스가 탐지된 경우.
머지 리퀘스트 브랜치에서 탐지된 라이선스를 기본 브랜치의 라이선스와 비교하는 기준#
기본 브랜치에 존재하는 라이선스를 기준으로 승인이 필요한지 결정할 때 다음 유형의 기준을 사용할 수 있습니다.
- 거부된 라이선스가 기본 브랜치에 아직 없는 의존성에 포함된 경우에만 승인을 요구하도록 구성할 수 있습니다.
- 거부된 라이선스가 기본 브랜치에 이미 존재하는 컴포넌트에 포함된 경우 승인을 요구하도록 구성할 수 있습니다.

라이선스 승인 정책을 위반하는 라이선스가 발견되면 해당 머지 리퀘스트가 차단되고 개발자에게 라이선스를 제거하라는 안내가 표시됩니다. 라이선스 승인 정책의 승인 권한을 가진 사용자가 머지 리퀘스트를 승인하지 않는 한, denied 라이선스가 제거될 때까지 머지 리퀘스트를 머지할 수 없습니다.

문제 해결#
unknown 라이선스 때문에 라이선스 승인 정책이 머지 리퀘스트를 차단함#
일부 상황에서는 unknown 라이선스 때문에 라이선스 승인 정책이 머지 리퀘스트를
차단할 수 있습니다.
licenses 필드에서 PURL을 사용하는 패키지 수준 제외는
unknown 라이선스에는 적용되지 않습니다. licenses 필드는 SPDX 라이선스 이름
일치만 지원하며, unknown은 유효한 SPDX
라이선스 이름이 아닙니다. 거부된 unknown 라이선스를 PURL 제외와 함께 구성하면
머지 리퀘스트 승인 평가 과정에서 해당 제외가 무시되고 머지 리퀘스트는
계속 차단됩니다. 파이프라인 Licenses 탭은 제외를 반영하는 것처럼 보이지만
머지 리퀘스트 승인 위젯은 그렇지 않습니다. 두 화면은 서로 다른 평가
경로를 사용합니다.
이 현상은 다음 상황에서 발생할 수 있습니다.
- 의존성 스캐닝 job이 특정 컴포넌트의 라이선스를 식별하지 못하는 경우.
- 스캐닝 도구가 인식하지 못하는 새롭거나 드문 라이선스를 사용하는 경우.
- 컴포넌트 메타데이터에 라이선스 정보가 없거나 불완전한 경우.
이 문제를 해결하는 방법은 다음과 같습니다.
- 파이프라인 페이지의 Licenses 탭을 검토해
unknown라이선스를 가진 컴포넌트를 확인하거나, GitLab 보안 봇이 생성한out-of-policy라이선스를 검토합니다. - 해당 컴포넌트를 직접 조사해 실제 라이선스를 확인합니다.
- 라이선스를 확인할 수 없거나 허용할 수 없다면 영향을 받는 컴포넌트를 제거하거나 교체합니다.
unknown 라이선스가 있는 상태에서 일시적으로 머지를 허용해야 한다면 다음과 같이 진행합니다.
- 라이선스 승인 정책을 편집합니다.
- 허용 라이선스 목록에
unknown을 추가합니다. - 문제를 해결한 뒤에는 라이선스 컴플라이언스를 유지하도록 허용 라이선스 목록에서
unknown을 제거합니다.
라이선스 컴플라이언스 문제를 다룰 때, 특히 unknown 라이선스를 처리할 때는 항상 법무팀과 상의합니다.