본문으로 건너뛰기
Kreath Archive
TechProjectsBooksAbout
TechProjectsBooksAbout

내비게이션

  • Tech
  • Projects
  • Books
  • About
  • Tags

카테고리

  • AI / ML
  • 웹 개발
  • 프로그래밍
  • 개발 도구

연결

  • GitHub
  • Email
  • RSS
© 2026 Kreath Archive. All rights reserved.Built with Next.js + MDX
홈TechProjectsBooksAbout
//
  1. 홈
  2. 테크
  3. 4장: SBOM 생성과 관리
2026년 3월 13일·인프라·

4장: SBOM 생성과 관리

SBOM(소프트웨어 자재 명세서)의 개념과 필요성, SPDX와 CycloneDX 형식을 비교하고, Syft와 Trivy로 SBOM을 생성하여 공급망 가시성을 확보하는 방법을 실습합니다.

14분580자10개 섹션
securitykubernetesdevopsinfrastructure
공유
container-security4 / 10
12345678910
이전3장: 이미지 스캐닝과 취약점 관리다음5장: Sigstore와 Cosign — 이미지 서명

학습 목표

  • **SBOM(Software Bill of Materials)**의 개념과 필요성을 이해합니다.
  • SPDX 3과 CycloneDX 형식의 차이점을 파악합니다.
  • Syft와 Trivy를 사용하여 SBOM을 생성하는 방법을 실습합니다.
  • SBOM을 활용한 의존성 추적과 라이선스 컴플라이언스 관리 방법을 익힙니다.

SBOM이란 무엇인가

**SBOM(Software Bill of Materials, 소프트웨어 자재 명세서)**은 소프트웨어를 구성하는 모든 컴포넌트의 목록입니다. 제조업의 **BOM(자재 명세서)**과 같은 개념으로, 소프트웨어에 어떤 오픈소스 라이브러리, 패키지, 프레임워크가 포함되어 있는지를 기계가 읽을 수 있는 형식으로 기록합니다.

위 다이어그램처럼 하나의 애플리케이션도 수십에서 수백 개의 직접/간접 의존성을 가집니다. SBOM은 이 전체 의존성 트리를 체계적으로 기록합니다.

SBOM이 필요한 이유

  1. 취약점 대응 속도: 새로운 CVE가 발표되었을 때, SBOM이 있으면 해당 패키지를 사용하는 모든 이미지를 즉시 파악할 수 있습니다. Log4Shell 사태 당시 SBOM이 있었던 조직은 영향 범위를 수 시간 내에 파악했지만, 없었던 조직은 수 주가 걸렸습니다.

  2. 규제 준수: 미국 행정명령 EO 14028은 연방 정부에 소프트웨어를 공급하는 모든 벤더에게 SBOM 제공을 의무화했습니다. EU의 Cyber Resilience Act도 유사한 요구사항을 포함하고 있습니다.

  3. 라이선스 관리: 상용 소프트웨어에 GPL 라이선스 코드가 포함되어 있는지 등을 체계적으로 확인할 수 있습니다.

  4. 공급망 투명성: 소프트웨어의 구성 요소를 누구나 검증할 수 있어 신뢰도가 높아집니다.

Info

SBOM은 "보안 도구"가 아니라 "가시성 도구"입니다. SBOM 자체가 보안을 강화하는 것이 아니라, 현재 상태를 정확히 파악할 수 있게 해주어 올바른 보안 판단을 내릴 수 있도록 돕습니다.


SBOM 표준 형식

SPDX

**SPDX(Software Package Data Exchange)**는 Linux Foundation이 관리하는 국제 표준(ISO/IEC 5962:2021)입니다. SPDX 3.0은 보안 프로파일을 추가하여 취약점 정보까지 포함할 수 있게 되었습니다.

spdx-example.json (SPDX 3.0 간략화)
json
{
  "spdxVersion": "SPDX-3.0",
  "dataLicense": "CC0-1.0",
  "name": "myapp-sbom",
  "documentNamespace": "https://example.com/myapp-v1.0",
  "packages": [
    {
      "name": "express",
      "SPDXID": "SPDXRef-Package-express",
      "versionInfo": "4.18.2",
      "downloadLocation": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
      "licenseConcluded": "MIT",
      "supplier": "Organization: OpenJS Foundation",
      "externalRefs": [
        {
          "referenceCategory": "PACKAGE_MANAGER",
          "referenceType": "purl",
          "referenceLocator": "pkg:npm/express@4.18.2"
        }
      ]
    }
  ],
  "relationships": [
    {
      "spdxElementId": "SPDXRef-DOCUMENT",
      "relationshipType": "DESCRIBES",
      "relatedSpdxElement": "SPDXRef-Package-express"
    }
  ]
}

CycloneDX

CycloneDX는 OWASP가 관리하는 SBOM 표준으로, 보안 분석에 최적화되어 있습니다. 취약점 정보, 서비스 의존성, 암호화 자재 목록(CBOM) 등을 기본적으로 지원합니다.

cyclonedx-example.json (CycloneDX 1.6 간략화)
json
{
  "bomFormat": "CycloneDX",
  "specVersion": "1.6",
  "version": 1,
  "metadata": {
    "component": {
      "type": "application",
      "name": "myapp",
      "version": "1.0.0"
    }
  },
  "components": [
    {
      "type": "library",
      "name": "express",
      "version": "4.18.2",
      "purl": "pkg:npm/express@4.18.2",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "hashes": [
        {
          "alg": "SHA-256",
          "content": "abc123..."
        }
      ]
    }
  ]
}

형식 비교

항목SPDX 3.0CycloneDX 1.6
관리 기관Linux FoundationOWASP
ISO 표준O (5962:2021)진행 중
주요 강점라이선스 관리보안 분석
취약점 정보보안 프로파일로 지원기본 지원
서비스 의존성제한적기본 지원
출력 형식JSON, RDF, Tag-ValueJSON, XML, Protobuf
도구 지원광범위광범위

실무에서는 두 형식 모두 널리 사용되며, 대부분의 도구가 양쪽을 모두 지원합니다. 조직의 주요 목적이 라이선스 관리라면 SPDX, 보안 분석이라면 CycloneDX가 약간 더 적합합니다.


Syft로 SBOM 생성

Syft는 Anchore에서 개발한 오픈소스 SBOM 생성 도구입니다. 컨테이너 이미지, 파일시스템, 아카이브 등 다양한 소스에서 SBOM을 생성할 수 있습니다.

Syft 설치 및 기본 사용법
bash
# 설치
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
 
# 컨테이너 이미지에서 SBOM 생성 (SPDX JSON)
syft myapp:latest -o spdx-json > sbom-spdx.json
 
# CycloneDX JSON 형식
syft myapp:latest -o cyclonedx-json > sbom-cdx.json
 
# 파일시스템에서 SBOM 생성
syft dir:./src -o cyclonedx-json > sbom-src.json
 
# 특정 형식으로 여러 출력 동시 생성
syft myapp:latest \
  -o spdx-json=sbom-spdx.json \
  -o cyclonedx-json=sbom-cdx.json \
  -o table

Syft는 다음 패키지 매니저를 자동 감지합니다.

  • OS 패키지: apt (dpkg), apk, rpm
  • JavaScript: npm, yarn, pnpm
  • Python: pip, poetry, pipenv
  • Go: go modules
  • Java: Maven, Gradle
  • Rust: Cargo
  • 기타: Ruby gems, PHP Composer 등

Trivy로 SBOM 생성

3장에서 다룬 Trivy도 SBOM 생성 기능을 갖추고 있습니다. 스캐닝과 SBOM 생성을 하나의 도구로 처리할 수 있어 편리합니다.

Trivy로 SBOM 생성
bash
# CycloneDX 형식으로 SBOM 생성
trivy image --format cyclonedx --output sbom.json myapp:latest
 
# SPDX JSON 형식
trivy image --format spdx-json --output sbom-spdx.json myapp:latest
 
# 생성된 SBOM으로 취약점 스캔
trivy sbom sbom.json
Tip

Trivy로 SBOM을 생성한 후 같은 SBOM으로 취약점을 스캔하면, 이미지를 다시 풀 받지 않아도 됩니다. CI/CD에서 SBOM을 아티팩트로 저장해두면 언제든 재스캔이 가능합니다.


SBOM 저장과 배포

생성된 SBOM은 컨테이너 이미지와 함께 관리해야 합니다. **OCI Registry(OCI 레지스트리)**에 SBOM을 이미지의 부속 아티팩트로 저장하는 것이 최근의 표준적인 방법입니다.

SBOM을 OCI 레지스트리에 첨부
bash
# Cosign으로 SBOM을 이미지에 첨부
cosign attach sbom --sbom sbom-cdx.json registry.example.com/myapp:v1.0
 
# ORAS로 아티팩트 푸시 (OCI 1.1 Referrers API)
oras attach registry.example.com/myapp:v1.0 \
  --artifact-type application/vnd.cyclonedx+json \
  sbom-cdx.json

CI/CD에서 SBOM 아티팩트 관리

.github/workflows/sbom.yml
yaml
name: SBOM Generation
 
on:
  push:
    branches: [main]
 
jobs:
  sbom:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
 
      - name: Build image
        run: docker build -t myapp:${{ github.sha }} .
 
      - name: Generate SBOM with Syft
        uses: anchore/sbom-action@v0
        with:
          image: myapp:${{ github.sha }}
          format: cyclonedx-json
          output-file: sbom.json
 
      - name: Upload SBOM as artifact
        uses: actions/upload-artifact@v4
        with:
          name: sbom-${{ github.sha }}
          path: sbom.json
          retention-days: 90
 
      - name: Scan SBOM for vulnerabilities
        run: trivy sbom sbom.json --severity HIGH,CRITICAL --exit-code 1

의존성 추적

SBOM의 가장 실질적인 활용은 의존성 추적입니다. 새로운 취약점이 발표되었을 때, 어떤 이미지가 해당 패키지를 포함하고 있는지 빠르게 파악할 수 있습니다.

SBOM에서 특정 패키지 검색
bash
# jq로 CycloneDX SBOM에서 특정 패키지 검색
cat sbom-cdx.json | jq '.components[] | select(.name == "openssl")'
 
# Grype로 특정 CVE 영향 확인
grype sbom:sbom.json --only-fixed | grep CVE-2024-12345

대규모 환경에서는 Dependency-Track 같은 SBOM 관리 플랫폼을 사용합니다.

Dependency-Track은 OWASP 프로젝트로, 여러 프로젝트의 SBOM을 중앙에서 관리하고, 새로운 취약점이 발표될 때 영향받는 프로젝트를 자동으로 식별하여 알림을 보냅니다.


라이선스 컴플라이언스

SBOM에는 각 패키지의 라이선스 정보가 포함되어 있어, 라이선스 컴플라이언스 검사를 자동화할 수 있습니다.

Trivy로 라이선스 검사
bash
# 라이선스 스캔
trivy image --scanners license myapp:latest
 
# 특정 라이선스 카테고리 차단
trivy image --scanners license \
  --severity HIGH \
  --exit-code 1 \
  myapp:latest

Trivy는 라이선스를 다음과 같이 분류합니다.

심각도라이선스 유형예시
HIGH강력한 CopyleftGPL-3.0, AGPL-3.0
MEDIUM약한 CopyleftLGPL-2.1, MPL-2.0
LOWPermissiveMIT, Apache-2.0, BSD

상용 소프트웨어를 개발하는 경우, GPL 계열 라이선스가 포함된 패키지를 의도치 않게 사용하고 있지 않은지 SBOM을 통해 확인해야 합니다.


규제 요구사항

미국 EO 14028

2021년 발표된 미국 행정명령 14028호는 소프트웨어 공급망 보안 강화를 목적으로 합니다. 핵심 요구사항은 다음과 같습니다.

  • 연방 정부에 소프트웨어를 공급하는 모든 벤더는 SBOM을 제공해야 합니다.
  • SBOM은 기계가 읽을 수 있는 형식(SPDX 또는 CycloneDX)이어야 합니다.
  • 각 릴리즈마다 SBOM을 업데이트해야 합니다.

EU Cyber Resilience Act

EU의 **CRA(Cyber Resilience Act)**는 디지털 제품의 보안 요구사항을 규정하며, SBOM 제공을 의무화하고 있습니다. 2027년부터 본격 시행될 예정입니다.

Warning

규제 요구사항과 무관하게, SBOM은 보안 사고 대응 시간을 극적으로 줄여줍니다. 규제 준수를 위한 형식적 활동이 아니라, 실질적인 보안 도구로 활용해야 합니다.


정리

이번 장에서는 SBOM의 개념부터 생성, 저장, 활용까지 전체 흐름을 다루었습니다.

  • SBOM은 소프트웨어의 모든 구성 요소를 기계가 읽을 수 있는 형식으로 기록한 목록입니다.
  • SPDX는 라이선스 관리에, CycloneDX는 보안 분석에 각각 강점이 있습니다.
  • Syft와 Trivy로 SBOM을 생성하고, OCI 레지스트리에 이미지와 함께 저장합니다.
  • Dependency-Track 같은 플랫폼으로 대규모 환경의 SBOM을 중앙 관리합니다.
  • 미국 EO 14028과 EU CRA 등 규제가 SBOM 의무화를 추진하고 있습니다.

다음 장에서는 빌드된 이미지의 무결성을 보장하는 이미지 서명을 다룹니다. Sigstore 에코시스템(Cosign, Fulcio, Rekor)을 활용한 키리스 서명과 검증, 그리고 SLSA 프레임워크를 실습합니다.

이 글이 도움이 되셨나요?

관련 주제 더 보기

#security#kubernetes#devops#infrastructure

관련 글

인프라

5장: Sigstore와 Cosign — 이미지 서명

Sigstore 에코시스템(Cosign, Fulcio, Rekor)으로 컨테이너 이미지에 키리스 서명을 적용하고, SLSA 프레임워크 기반의 빌드 출처 증명을 구현합니다.

2026년 3월 15일·15분
인프라

3장: 이미지 스캐닝과 취약점 관리

Trivy, Grype, Snyk 컨테이너 스캐너를 비교하고, CI/CD 파이프라인에 취약점 스캐닝 게이트를 통합하여 안전한 이미지만 배포하는 방법을 다룹니다.

2026년 3월 11일·15분
인프라

6장: 런타임 보안 — Falco와 위협 감지

Falco의 eBPF 기반 시스콜 모니터링으로 컨테이너 런타임 위협을 실시간 감지하고, 규칙 작성부터 알림 통합까지 런타임 보안 체계를 구축합니다.

2026년 3월 17일·14분
이전 글3장: 이미지 스캐닝과 취약점 관리
다음 글5장: Sigstore와 Cosign — 이미지 서명

댓글

목차

약 14분 남음
  • 학습 목표
  • SBOM이란 무엇인가
    • SBOM이 필요한 이유
  • SBOM 표준 형식
    • SPDX
    • CycloneDX
    • 형식 비교
  • Syft로 SBOM 생성
  • Trivy로 SBOM 생성
  • SBOM 저장과 배포
    • CI/CD에서 SBOM 아티팩트 관리
  • 의존성 추적
  • 라이선스 컴플라이언스
  • 규제 요구사항
    • 미국 EO 14028
    • EU Cyber Resilience Act
  • 정리