cdxgen

프로젝트와 모델에서 CycloneDX SBOM을 생성하는 OWASP cdxgen의 AI BOM 모드 사용법을 실행 출력과 함께 안내한다.

    개요

    cdxgen은 OWASP CycloneDX 프로젝트의 공식 SBOM 생성기다. 20개 이상의 언어와 패키지 매니저를 지원하고, 최신 버전에서 AI BOM 전용 모드를 제공한다. AI 애플리케이션의 의존성(PyTorch, Transformers 등)을 자동으로 식별하며, CI/CD 파이프라인에 연동하기 좋다.

    AI SBOM 관점에서 cdxgen의 강점은 속도와 자동화다. 약점은 라이선스 정보를 기본 실행에서 채우지 않는다는 점이다. 아래 실행 결과에서 이 특성이 드러난다. OWASP AIBOM Generator가 모델 카드 메타데이터 중심이라면, cdxgen은 코드와 의존성 중심이다. 둘을 함께 쓰면 모델과 의존성을 모두 다룬다.

    주요 기능

    • 소스 코드와 컨테이너 이미지에서 의존성을 식별해 CycloneDX SBOM을 생성한다.
    • AI BOM 모드(-t ai)로 AI/ML 메타데이터(formulation)를 포함한다.
    • Hugging Face 모델 URL, Modelfile, GGUF 아티팩트를 직접 입력으로 받는다.
    • Dependency-Track 서버에 SBOM을 자동 제출해 지속 관리할 수 있다.

    설치

    # 일회성 실행 (Node.js 필요)
    npx @cyclonedx/cdxgen@latest --version
    
    # 전역 설치
    npm install -g @cyclonedx/cdxgen
    

    사용법 — AI BOM 생성

    AI 프로젝트 디렉토리에서 AI BOM 모드로 실행한다.

    # AI BOM 생성
    cdxgen -t ai -o aibom.json .
    
    # AI/ML 메타데이터(formulation)를 포함해 생성
    cdxgen -t ai --include-formulation -o aibom.json .
    

    아래는 사전학습 모델(facebook/bart-large-cnn)을 불러오는 요약 앱(transformers, torch 의존)에 cdxgen을 실제로 돌린 결과다. 의존성 5건을 자동 식별해 CycloneDX 1.7 BOM을 만든다.

    $ cdxgen -t python --include-formulation -o aibom.json .
    CycloneDX Generator 12.5.1 (Node.js)
    
    생성된 components — 5건 (CycloneDX 1.7):
      transformers     4.44.2    pkg:pypi/transformers@4.44.2      license: 비어 있음
      torch            2.4.0     pkg:pypi/torch@2.4.0             license: 비어 있음
      numpy            1.26.4    pkg:pypi/numpy@1.26.4            license: 비어 있음
      tokenizers       0.19.1    pkg:pypi/tokenizers@0.19.1       license: 비어 있음
      huggingface-hub  0.24.6    pkg:pypi/huggingface-hub@0.24.6   license: 비어 있음
    

    그림 1. cdxgen 실행 출력 (cdxgen 12.5.1, 실행 2026-06-13)

    생성된 컴포넌트 한 건은 다음과 같다. 식별 근거(evidence)는 채워지지만 licenses 필드는 비어 있다.

    {
      "name": "transformers",
      "version": "4.44.2",
      "purl": "pkg:pypi/transformers@4.44.2",
      "type": "library",
      "evidence": {
        "identity": [
          { "field": "purl", "confidence": 0.5,
            "methods": [{ "technique": "manifest-analysis", "value": "requirements.txt" }] }
        ]
      }
    }
    

    실행 결과가 보여주는 것

    참고