SBOM 생성 방법
범용 오픈소스 도구를 활용하여 환경별로 SBOM을 생성하는 방법을 안내합니다.
개요
SK텔레콤 제공 도구를 사용할 수 없거나, 이미 자체적인 빌드 파이프라인을 보유한 경우 오픈소스 도구를 활용할 수 있습니다. 본 가이드에서는 SK텔레콤이 검증한 오픈소스 도구들의 사용법을 안내합니다.
도구 환경 구축에 익숙하지 않은 경우, Docker가 설치되어 있다면 SK텔레콤 제공 도구를 참고하시기 바랍니다.
도구 선택 가이드
graph TD
A[분석 대상 확인] --> B{소스코드인가?}
B -- Yes --> C[cdxgen 권장]
B -- No --> D{Docker 이미지인가?}
D -- Yes --> E[Syft 또는 Trivy 권장]
D -- No --> F[바이너리/펌웨어]
F --> G[Syft 권장]상세 가이드
하위 메뉴에서 각 도구별 상세 사용법을 확인하실 수 있습니다.
- 빠른 시작 (cdxgen): 가장 범용적으로 사용되는 cdxgen 도구 사용법
- 언어별 가이드: Java, Python, Node.js 등 언어별 전용 도구 설정법
- Docker 이미지: 컨테이너 이미지 및 파일시스템 분석 방법
1 - 빠른 시작
범용 도구인 cdxgen을 사용하여 다양한 언어의 프로젝트를 분석하는 방법입니다.
cdxgen 소개
cdxgen은 CycloneDX 형식을 기본 지원하며, 별도의 복잡한 설정 없이 프로젝트 구조를 자동 분석하여 SBOM을 생성해주는 강력한 도구입니다.
추천 대상
- 소스코드 형태로 납품하는 경우
- 여러 언어가 섞인 프로젝트 (예: Java 백엔드 + React 프론트엔드)
- 빠르게 SBOM을 생성하고 싶은 경우
설치 및 실행
1. 설치 (Node.js 필요)
npm install -g @cyclonedx/cdxgen
2. 기본 실행
프로젝트 루트 디렉토리에서 아래 명령어를 실행합니다.
# 기본 생성 (bom.json 생성)
cdxgen -o bom.json
3. 프로젝트 정보 포함 (권장)
SK텔레콤 제출 규격을 준수하기 위해 프로젝트 이름과 버전을 명시합니다.
cdxgen -o bom.json --project-name "MyPaymentApp" --project-version "1.0.0"
4. 언어 타입 명시 (정확도 향상)
특정 언어만 분석하거나 정확도를 높이려면 -t 옵션을 사용합니다.
# Java 프로젝트 명시
cdxgen -t java -o bom.json
# Python 프로젝트 명시
cdxgen -t python -o bom.json
2 - 언어별 가이드
Java, Python, Node.js 등 주요 언어별 패키지 매니저 파일과 전용 도구 활용법을 안내합니다.
1. Java (Maven / Gradle)
Java 프로젝트는 빌드 도구의 플러그인을 사용하는 것이 가장 정확합니다.
Maven
pom.xml에 플러그인을 추가하여 빌드 시 생성합니다.
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
<version>2.7.9</version>
</plugin>
- 실행:
mvn cyclonedx:makeAggregateBom
Gradle
build.gradle에 플러그인을 적용합니다.
plugins {
id 'org.cyclonedx.bom' version '1.7.4'
}
- 실행:
./gradlew cyclonedxBom
2. Python (pip / Poetry)
pip (requirements.txt)
가상환경이 활성화된 상태에서 실행하는 것이 좋습니다.
pip install cyclonedx-bom
cyclonedx-py requirements -o bom.json
Poetry
poetry run cyclonedx-py poetry -o bom.json
3. Node.js (npm / Yarn)
package.json과 package-lock.json(또는 yarn.lock)이 있는 위치에서 실행합니다.
npm install -g @cyclonedx/cyclonedx-npm
cyclonedx-npm --output-file bom.json
4. Go (Go Modules)
go.mod 파일이 있는 위치에서 실행합니다.
go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@latest
cyclonedx-gomod app -json -output bom.json
3 - Docker 이미지
Syft 도구를 사용하여 컨테이너 이미지 및 파일시스템 내부를 분석하는 방법입니다.
Syft 소개
Syft는 컨테이너 이미지 분석에 특화된 도구로, 이미지 레이어 내의 OS 패키지(APK, DEB, RPM)와 애플리케이션 라이브러리를 모두 식별합니다.
설치
# Linux / macOS
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
사용 방법
1. Docker 이미지 스캔
로컬 Docker 데몬에 있는 이미지나 원격 레지스트리의 이미지를 분석합니다.
# CycloneDX JSON 형식으로 출력
syft "myapp:latest" -o cyclonedx-json=bom.json
2. 이미지 파일(.tar) 스캔
docker save로 저장된 타르볼 파일도 분석 가능합니다.
syft "docker-archive:myapp.tar" -o cyclonedx-json=bom.json
3. 디렉토리 스캔 (RootFS)
이미지 내부 파일시스템이나 특정 디렉토리를 스캔할 때 사용합니다.
syft "dir:./rootfs" -o cyclonedx-json=bom.json