CycloneDX 파일의 라이선스 스캔

Tier: Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated
  • GitLab 15.9에 도입되었으며, 두 가지 플래그인 license_scanning_sbom_scannerpackage_metadata_synchronization가 기본값으로 비활성화되어 있음.
  • GitLab 16.4에서 일반적으로 사용 가능하게 됨. license_scanning_sbom_scannerpackage_metadata_synchronization 플래그가 삭제됨.
  • 기존의 License Compliance analyzer인 (License-Scanning.gitlab-ci.yml)은 GitLab 17.0에서 삭제됨.

라이선스 준수는 사용 중인 라이선스를 감지하기 위해 의존성 스캔 CI 작업을 실행하고, 해당 작업에서 생성된 CycloneDX Software Bill of Materials (SBOM)를 분석하는 데 의존합니다. 이 스캔 방법은 SPDX 디렉터리에 정의된 500가지 이상의 라이선스를 구문 분석하고 식별할 수 있습니다. 지원되는 언어 중 하나에 대한 CycloneDX 보고서 아티팩트를 생성하는 경우에만 타사 스캐너를 사용하여 의존성 디렉터리을 생성할 수 있으며, 이때 GitLab CycloneDX 속성 분류체계를 따르는 것이어야 합니다. CI 보고서 아티팩트를 데이터 소스로 사용하거나 SPDX 디렉터리에 없는 라이선스는 “Unknown”으로 보고됩니다. 기타 라이선스를 제공하는 기능은 epic 10861에서 추적됩니다.

note
라이선스 스캔 기능은 공개적으로 사용 가능한 패키지 메타데이터에 의존하며 GitLab 인스턴스와 자동으로 동기화됩니다. 이 데이터베이스는 미국에 호스팅된 다지역 Google Cloud Storage 버킷입니다. 스캔은 GitLab 인스턴스 내에서만 실행됩니다. 외부 서비스로 부터 프로젝트 의존성 디렉터리 등의 상황 정보는 전송되지 않습니다.

구성

CycloneDX 파일의 라이선스 스캔을 활성화하려면:

지원되는 언어 및 패키지 관리자

다음 언어 및 패키지 관리자에 대해 라이선스 스캔이 지원됩니다:

언어 패키지 관리자
.NET NuGet
C#
C Conan
C++
Go Go
Java Gradle
Maven
JavaScript 및 TypeScript npm
pnpm
yarn
PHP Composer
Python setuptools
pip
Pipenv
Poetry
Ruby Bundler
Scala sbt

지원되는 파일 및 버전은 의존성 스캔에서 지원하는 파일 및 버전과 동일합니다.

라이선스 표현

CycloneDX 파일의 라이선스 스캔은 합성 라이선스를 지원하지 않습니다. 이 기능을 추가하는 것은 이슈 336878에서 추적됩니다.

감지된 라이선스에 따른 Merge Request 차단

사용자는 라이선스 승인 정책을 구성함으로써 감지된 라이선스에 기반한 Merge Request에 대한 승인을 요청할 수 있습니다.

오프라인 환경에서 실행

제한된, 제한된 또는 가끔 인터넷을 통한 외부 리소스 액세스가 있는 환경의 Self-Managed형 GitLab 인스턴스의 경우, CycloneDX 보고서를 성공적으로 스캔하려면 몇 가지 조정이 필요합니다. 자세한 정보는 빠른 시작 가이드를 참조하십시오.

문제 해결

CycloneDX 파일이 스캔되지 않고 결과를 제공하지 않는 경우

CycloneDX 파일이 CycloneDX JSON 사양을 준수하는지 확인하십시오. 이 사양은 중복 항목을 허용하지 않습니다. 여러 SBOM 파일을 포함하는 프로젝트의 경우 각 SBOM 파일을 개별 CI 보고서 아티팩트로 보고해야 하거나, CI 파이프라인의 일부로 SBOM을 Merge하는 경우에는 중복이 제거되도록 해야 합니다.

다음과 같이 CycloneDX SBOM 파일을 CycloneDX JSON specification에 대해 유효성을 검사할 수 있습니다:

$ docker run -it --rm -v "$PWD:/my-cyclonedx-sboms" -w /my-cyclonedx-sboms cyclonedx/cyclonedx-cli:latest cyclonedx validate --input-version v1_4 --input-file gl-sbom-all.cdx.json

Validating JSON BOM...
BOM validated successfully.

JSON BOM 유효성 검사에 실패하면, 예를 들어 중복된 컴포넌트가 있는 경우:

Validation failed: Found duplicates at the following index pairs: "(A, B), (C, D)"
#/properties/components/uniqueItems

이 문제는 gemnasium-dependency_scanning 작업에 의해 생성된 gl-sbom-gem-bundler.cdx.json 보고서 파일에서 중복 컴포넌트를 제거하도록 CI 템플릿을 업데이트하여 해결할 수 있습니다.

사용되지 않는 라이선스 데이터 제거

라이선스 스캔 변경 사항(GitLab 15.9에서 릴리스됨)은 인스턴스에서 추가 디스크 공간을 필요로 했습니다. 이 문제는 디스크 공간을 줄이는 패키지 메타데이터 테이블 epic을 통해 GitLab 16.3에서 해결되었습니다. 그러나 GitLab 15.9부터 16.3까지 라이선스 스캔이 실행 중이었던 경우, 필요 없는 데이터를 제거하려 할 수 있습니다.

불필요한 데이터를 제거하려면:

  1. 현재 또는 이전에 package_metadata_synchronization 피처 플래그가 활성화되어 있는지 확인하고 활성화된 경우 비활성화합니다. 다음 명령을 실행하려면 Rails console을 사용하세요.

    Feature.enabled?(:package_metadata_synchronization) && Feature.disable(:package_metadata_synchronization)
    
  2. 데이터베이스에 사용되지 않는 데이터가 있는지 확인합니다.

    PackageMetadata::PackageVersionLicense.count
    PackageMetadata::PackageVersion.count
    
  3. 데이터베이스에 사용되지 않는 데이터가 있는 경우 아래 명령을 실행하여 제거합니다.

    ActiveRecord::Base.connection.execute('SET statement_timeout TO 0')
    PackageMetadata::PackageVersionLicense.delete_all
    PackageMetadata::PackageVersion.delete_all