CycloneDX 파일의 라이선스 스캔
- GitLab 15.9에 도입되었습니다 - GitLab SaaS의 경우 라이선스 스캐닝을 위한 두 가지 플래그인
license_scanning_sbom_scanner
및package_metadata_synchronization
으로 기본 상태로 비활성화되어 있습니다.- GitLab 16.4에서 일반 사용 가능 - 기능 플래그
license_scanning_sbom_scanner
및package_metadata_synchronization
이 제거되었습니다.
Jobs/License-Scanning.gitlab-ci.yml
템플릿의 포함을 제거할 수 있습니다. 기존의 License Compliance 기능을 계속 사용하려면 LICENSE_MANAGEMENT_VERSION CI
변수를 4
로 설정할 수 있습니다. 이 변수는 프로젝트, 그룹 또는 인스턴스 수준에서 설정할 수 있습니다.라이선스 컴플라이언스는 사용 중인 라이선스를 탐지하기 위해 의존성 스캐닝 CI 작업을 실행하고 해당 작업에 의해 생성된 CycloneDX 소프트웨어 부품 목록(SBOM)을 분석하는 데 의존합니다. 이 스캔 방법은 SPDX 목록에 정의된 500가지 이상의 다양한 유형의 라이선스를 구문 분석하고 식별할 수 있습니다. 제3자 스캐너를 사용하여 종속성 목록을 생성할 수 있지만 해당 스캐너는 지원되는 언어 중 하나에 대한 CycloneDX 보고서 아티팩트를 생성하고 GitLab CycloneDX 속성 분류법을 준수해야 합니다. 아직은 CI 보고서 아티팩트를 라이선스 정보의 원본으로 사용하거나 SPDX 목록에 없는 라이선스는 “알 수 없음”으로 보고할 수 없습니다. 다른 라이선스를 제공할 수 있는 능력은 epic 10861에서 추적됩니다.
구성
CycloneDX 파일의 라이선스 스캔을 활성화하려면 다음을 수행하세요:
- 의존성 스캐닝을 활성화하고 전제 조건을 충족시키세요.
- 자체 호스팅된 GitLab의 경우, Admin Area에서 동기화할 패키지 레지스트리 메타데이터를 선택할 수 있습니다. 이 데이터 동기화가 작동하려면 GitLab 인스턴스에서
storage.googleapis.com
도메인으로의 아웃바운드 네트워크 트래픽을 허용해야 합니다. 네트워크 연결이 제한적이거나 전혀 없는 경우 오프라인 환경에서 실행섹션을 참조하여 자세한 안내를 확인하세요.
지원되는 언어 및 패키지 관리자
다음 언어 및 패키지 관리자에 대해 라이선스 스캔이 지원됩니다:
언어 | 패키지 관리자 |
---|---|
.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 |
지원되는 파일 및 버전은 Dependency Scanning에서 지원되는 파일 및 버전과 동일합니다.
라이선스 표현
CycloneDX 파일의 라이선스 스캐닝은 복합 라이선스를 지원하지 않습니다. 이 기능 추가는 이슈 336878에서 추적하고 있습니다.
감지된 라이선스에 기반한 병합 요청 차단
사용자는 라이선스 승인 정책을 구성하여 라이선스에 기반한 병합 요청에 대한 승인을 요구할 수 있습니다.
오프라인 환경에서 실행하기
제한된, 제한적인 또는 간헐적인 인터넷 외부 리소스에 액세스할 수 있는 환경에서 자체 관리 GitLab 인스턴스를 실행하는 경우, CycloneDX 보고서를 성공적으로 스캔하려면 몇 가지 조정이 필요합니다. 자세한 정보는 오프라인 빠른 시작 가이드를 참조하세요.
문제 해결
CycloneDX 파일이 스캔되지 않고 결과를 제공하지 않는 경우
CycloneDX 파일이 CycloneDX JSON 사양을 준수하는지 확인하세요. 이 사양은 중복 항목을 허용하지 않습니다. 여러 개의 SBOM 파일을 포함하는 프로젝트는 각 SBOM 파일을 개별 CI 보고서 아티팩트로 보고해야 하거나 CI 파이프라인의 일부로 SBOM이 병합될 경우 중복이 제거되도록 보장해야 합니다.
다음과 같이 CycloneDX JSON 사양
에 대한 CycloneDX SBOM 파일을 유효성을 검사할 수 있습니다:
$ 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
JSON BOM 유효성을 검사 중...
BOM이 성공적으로 유효성을 검사했습니다.
JSON BOM 유효성 검사에 실패하는 경우(예: 중복 구성 요소가 있기 때문):
유효성 검사 실패: 다음 색인 쌍에 중복 항목 발견: "(A, B), (C, D)"
#/properties/components/uniqueItems
이 문제는 CI 템플릿을 업데이트하여 jq
를 사용하여 중복 구성 요소를 제거해 gl-sbom-*.cdx.json
보고서에서 제거한 후 발생할 수 있습니다. 예를 들어, gemnasium-dependency_scanning
잡에서 생성된 gl-sbom-gem-bundler.cdx.json
보고서 파일에서 중복 구성 요소를 제거하는 다음과 같은 방법으로 이 문제를 해결할 수 있습니다:
include:
- template: Jobs/Dependency-Scanning.gitlab-ci.yml
gemnasium-dependency_scanning:
after_script:
- apk update && apk add jq
- jq '.components |= unique' gl-sbom-gem-bundler.cdx.json > tmp.json && mv tmp.json gl-sbom-gem-bundler.cdx.json
사용되지 않는 라이선스 데이터 제거
라이선스 스캔 변경 사항(GitLab 15.9에서 릴리스됨)으로는 인스턴스에 추가적인 디스크 공간이 필요했습니다. 이 문제는 디스크 공간 풋프린트를 줄이기 epic을 통해 GitLab 16.3에서 해결되었습니다. 그러나 GitLab 15.9와 16.3 사이에 라이선스 스캔을 실행했다면 필요하지 않은 데이터를 제거하고 싶을 수 있습니다.
불필요한 데이터를 제거하려면:
-
package_metadata_synchronization 기능 플래그가 현재 또는 이전에 활성화되었는지 확인하고, 그렇다면 비활성화하세요. 다음 명령을 사용하여 Rails 콘솔에서 다음 명령을 실행하세요.
Feature.enabled?(:package_metadata_synchronization) && Feature.disable(:package_metadata_synchronization)
-
데이터베이스에 폐기된 데이터가 있는지 확인하세요:
PackageMetadata::PackageVersionLicense.count PackageMetadata::PackageVersion.count
-
데이터베이스에 폐기된 데이터가 있는 경우, 다음 명령을 순서대로 실행하여 해당 데이터를 제거하세요:
ActiveRecord::Base.connection.execute('SET statement_timeout TO 0') PackageMetadata::PackageVersionLicense.delete_all PackageMetadata::PackageVersion.delete_all