<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>CycloneDX | Haksung</title><link>https://haksungjang.github.io/tags/cyclonedx/</link><description>Haksung's Homepage 장학성 오픈소스 프로그램 매니저 / SK텔레콤</description><generator>Hugo</generator><language>ko-KR</language><lastBuildDate>Sat, 13 Jun 2026 23:47:21 +0900</lastBuildDate><atom:link href="https://haksungjang.github.io/tags/cyclonedx/index.xml" rel="self" type="application/rss+xml"/><item><title>3.9 AI SBOM</title><link>https://haksungjang.github.io/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/</link><pubDate>Sat, 13 Jun 2026 23:47:21 +0900</pubDate><guid>https://haksungjang.github.io/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/</guid><description>AI SBOM을 생성·관리하는 절차와 형식, 자동화 도구, 그리고 도구로 메우기 어려운 검증 영역을 안내한다.</description><content:encoded>&lt;![CDATA[<div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">구축 단계</div><p>이 조항은<strong>Phase 2 — AI 확장 프로세스</strong> 단계에서 구축한다.<a href="/docs/ai-sbom_guide/#%eb%8b%a8%ea%b3%84%eb%b3%84-%ea%b5%ac%ec%b6%95-%eb%a1%9c%eb%93%9c%eb%a7%b5">전체 구축 로드맵 보기</a></p></div><h2 id="1-조항-개요">1. 조항 개요</h2><p>AI SBOM(AI System Bill of Materials)은 AI 시스템을 구성하는 요소와 그 정보를 담은 목록이다.
전통적 SBOM이 소프트웨어 컴포넌트를 기록한다면, AI SBOM은 여기에 모델, 가중치, 데이터셋,
하이퍼파라미터를 더한다. 3.9는 AI SBOM을 생성하고 관리하는 절차를 갖출 것을 요구한다.</p><p>형식은 정해두지 않는다. 규격은 SPDX, CycloneDX, 또는 그 밖의 형식 등 어떤 것이든 무방하다고
명시한다. 다만 한 가지 의무가 있다. AI SBOM은 제3자로부터 유입되는 자재(inbound materials)를
반영해야 한다. 외부에서 도입한 사전학습 모델과 데이터셋이 빠지면 라이선스 의무(<a href="/docs/ai-sbom_guide/2-ai-extension/1-license-obligations/">3.5</a>)와
투명성 의무를 추적할 근거가 사라지기 때문이다.</p><p>AI SBOM 영역은 &ldquo;생성은 도구로 자동화되지만, 정확성과 준수 판단은 사람이 채운다"는 경계가
가장 뚜렷한 곳이다. 이 페이지는 그 경계를 따라 절차를 안내한다.</p><h2 id="2-해야-할-활동">2. 해야 할 활동</h2><ul><li>AI 시스템의 구성요소(모델, 데이터셋 등)에 대한 식별, 추적, 검토, 승인, 보관 절차를 수립한다.</li><li>AI SBOM 형식을 정한다(SPDX 3.0 AI Profile 또는 CycloneDX ML-BOM 권장).<em>([본 가이드 권고])</em></li><li>제3자에게서 유입되는 모델과 데이터셋을 AI SBOM에 반드시 포함한다.</li><li>생성 도구를 CI/CD에 연동해 AI SBOM을 반복 생성한다.<em>([본 가이드 권고])</em></li><li>생성된 AI SBOM의 라이선스와 출처 필드가 정확한지 사람이 검토한다.<em>([본 가이드 권고])</em></li><li>절차가 준수되었음을 입증하는 기록(생성 이력, 승인 이력)을 보관한다.</li></ul><h2 id="3-요구사항-및-입증자료">3. 요구사항 및 입증자료</h2><table><thead><tr><th>조항 번호</th><th>요구사항 (KO)</th><th>입증자료</th></tr></thead><tbody><tr><td>3.9</td><td>AI SBOM을 생성·관리하는 절차가 존재해야 한다. 형식은 SPDX, CycloneDX 등 어떤 것이든 무방하다. AI SBOM은 제3자로부터 유입되는 자재를 반영해야 한다.</td><td><strong>3.9.1</strong> AI 시스템의 구성요소(모델, 데이터셋 등)에 관한 정보를 식별, 추적, 검토, 승인, 보관하는 문서화된 절차<br><strong>3.9.2</strong> 공급 시스템에 대해 해당 절차가 적절히 준수되었음을 입증하는 기록</td></tr></tbody></table><details><summary>영문 원문 보기</summary><blockquote><p><strong>3.9 AI System Bill of Materials</strong>
A process shall exist for creating and managing an AI SBOM, this can be in any format e.g. SPDX,
CycloneDX, or another format. The AI SBOM shall account for inbound materials from third-parties.</p><p><strong>Verification material(s):</strong></p><ul><li>A documented procedure for identifying, tracking, reviewing, approving, and archiving
information related to the components of an AI system (e.g., model, datasets, etc).</li><li>Records for the supplied system that demonstrates the documented procedure was properly followed.</li></ul></blockquote></details><h2 id="4-입증자료별-준수-방법-및-샘플">4. 입증자료별 준수 방법 및 샘플</h2><h3 id="391-ai-sbom-관리-절차-식별-추적-검토-승인-보관">3.9.1 AI SBOM 관리 절차 (식별, 추적, 검토, 승인, 보관)</h3><p><strong>준수 방법</strong></p><p>AI SBOM 절차는 생성, 검토, 승인, 보관의 네 단계로 설계한다. 생성 단계는 도구로 자동화하고,
검토와 승인 단계는 사람이 맡는다. 도구가 모델 카드의 라이선스 필드를 그대로 옮겨 적더라도,
그 라이선스가 실제 사용 사례에 맞는지, 누락이나 오기재는 없는지는 도구가 판단하지 못하기
때문이다.</p><p>아래 그림은 AI SBOM 생성에서 보관까지의 흐름이다.</p><pre class="mermaid">flowchart TD
A([AI 시스템 자재]) --&gt; B[생성: SBOM 도구 실행\ncdxgen·OWASP AIBOM Generator]
B --&gt; C[형식 산출\nSPDX 3.0 AI Profile\n또는 CycloneDX ML-BOM]
C --&gt; D{인바운드 자재\n포함?}
D --&gt;|누락| E[제3자 모델·데이터셋\n추가 수집]
E --&gt; C
D --&gt;|포함| F[검토: 라이선스·출처\n필드 사람 확인]
F --&gt; G{정확·완전?}
G --&gt;|아니오| H[보강 또는 정정]
H --&gt; F
G --&gt;|예| I[승인: 거버넌스 책임자]
I --&gt; J([보관: 버전·이력 관리\n취약점 모니터링])
style A fill:#2d3748,color:#fff
style B fill:#2b6cb0,color:#fff
style F fill:#744210,color:#fff
style J fill:#22543d,color:#fff</pre><p><strong>그림 1.</strong> AI SBOM 생성에서 보관까지의 절차</p><p><strong>도구 매핑</strong></p><p>각 단계에 활용할 수 있는 오픈소스 도구다. &ldquo;자동화 수준"은 그 작업을 도구가 어디까지 대신하는지를
나타낸다.</p><table><thead><tr><th>단계</th><th>작업</th><th>자동화 수준</th><th>대표 도구</th></tr></thead><tbody><tr><td>생성</td><td>코드·의존성 BOM</td><td>성숙</td><td>cdxgen, Syft</td></tr><tr><td>생성</td><td>모델·메타데이터 AIBOM</td><td>도구 등장</td><td>OWASP AIBOM Generator, cdxgen<code>aibom</code></td></tr><tr><td>분석</td><td>모델 바이너리 정적 검사</td><td>도구 등장</td><td>Lab700x AI SBOM Scanner</td></tr><tr><td>관리</td><td>SBOM 저장·취약점 모니터링</td><td>성숙</td><td>Dependency-Track, SW360</td></tr><tr><td>검토</td><td>라이선스·출처 정확성 판단</td><td>사람·정책</td><td>도구 보완 단계</td></tr></tbody></table><p>각 도구의 설치와 사용법, 실행 화면은<a href="/docs/ai-sbom_guide/5-tools/">도구</a> 절에서 자세히 다룬다(<a href="/docs/ai-sbom_guide/5-tools/1-aibom-generator/">OWASP AIBOM
Generator</a>,<a href="/docs/ai-sbom_guide/5-tools/2-cdxgen/">cdxgen</a>,<a href="/docs/ai-sbom_guide/5-tools/3-scanners/">모델·컨테이너 스캐너</a>).</p><p>cdxgen으로 AI BOM을 생성하는 명령은 다음과 같다. Hugging Face 모델 URL과 purl, Modelfile,
GGUF 아티팩트를 직접 입력할 수 있다(<a href="https://github.com/cdxgen/cdxgen/blob/master/docs/AI_BOM.md">cdxgen AI-BOM 문서</a>).</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># AI 프로젝트 디렉토리에서 AI BOM 생성</span></span></span><span style="display:flex;"><span>cdxgen -t ai -o aibom.json .</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># AI/ML 메타데이터(formulation)를 포함해 생성</span></span></span><span style="display:flex;"><span>cdxgen -t ai --include-formulation -o aibom.json .</span></span></code></pre></div><p>OWASP AIBOM Generator는 Hugging Face 모델을 입력받아 CycloneDX 형식 AIBOM을 만들고 완전성
점수를 매긴다. OWASP Gen AI Security Project가 관리하며 Hugging Face Space로도 제공된다
(<a href="https://genai.owasp.org/resource/owasp-aibom-generator/">OWASP AIBOM Generator</a>).</p><p><strong>직접 실행 — cdxgen으로 생성해 보기</strong></p><p>사전학습 모델(<code>facebook/bart-large-cnn</code>)을 불러오는 요약 앱(<code>transformers</code>,<code>torch</code> 의존)에
cdxgen을 실제로 돌린 결과다. 도구가 의존성 5건을 자동으로 식별해 CycloneDX 1.7 형식 BOM을
만든다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>$ cdxgen -t python --include-formulation -o aibom.json .</span></span><span style="display:flex;"><span>CycloneDX Generator 12.5.1 (Node.js)</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>생성된 components — 5건 (CycloneDX 1.7):</span></span><span style="display:flex;"><span> transformers 4.44.2 pkg:pypi/transformers@4.44.2 license: 비어 있음</span></span><span style="display:flex;"><span> torch 2.4.0 pkg:pypi/torch@2.4.0 license: 비어 있음</span></span><span style="display:flex;"><span> numpy 1.26.4 pkg:pypi/numpy@1.26.4 license: 비어 있음</span></span><span style="display:flex;"><span> tokenizers 0.19.1 pkg:pypi/tokenizers@0.19.1 license: 비어 있음</span></span><span style="display:flex;"><span> huggingface-hub 0.24.6 pkg:pypi/huggingface-hub@0.24.6 license: 비어 있음</span></span></code></pre></div><p>생성된 BOM의 컴포넌트 한 건은 다음과 같다. 식별 근거(evidence)는 채워지지만<code>licenses</code>
필드는 비어 있다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"transformers"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"version"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"4.44.2"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"purl"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"pkg:pypi/transformers@4.44.2"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"library"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"evidence"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"identity"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"field"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"purl"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"confidence"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">0.5</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"methods"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[{</span><span style="color:#204a87;font-weight:bold">"technique"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"manifest-analysis"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"value"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"requirements.txt"</span><span style="color:#000;font-weight:bold">}]</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div><p><strong>그림 2.</strong> cdxgen 12.5.1 실행 출력<em>(실행일 2026-06-13,<code>-t python --include-formulation</code>)</em></p><div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">실행 결과가 보여주는 것 — 생성은 도구, 검증은 사람</div><ul><li>도구는<code>requirements.txt</code>에서 의존성 5건을 자동 식별해 BOM을 만들었다. 생성은 자동화된다.</li><li>그러나 각 컴포넌트의<code>licenses</code> 필드가 비어 있다. 라이선스 정확성은 사람이 확인해 채워야 한다.</li><li>앱이 불러오는 사전학습 모델<code>facebook/bart-large-cnn</code>은 코드 스캔만으로는 BOM에 잡히지
않았다. 인바운드 자재로 별도 수집해 추가해야 한다(아래 고려사항 참고).</li></ul><p>이 절이 말하는 &ldquo;생성은 도구가, 정확성과 완전성은 사람이"라는 경계가 실제 도구 출력에서 그대로
드러난다.</p></div><p><strong>형식 샘플 (CycloneDX ML-BOM)</strong></p><p>아래는 CycloneDX 1.6 ML-BOM의 모델 컴포넌트 구조를 줄인 예시다. 키 구조는<a href="https://cyclonedx.org/capabilities/mlbom/">CycloneDX 공식 스펙</a>의<code>machine-learning-model</code>
컴포넌트와<code>modelCard</code>를 따른다. 라이선스가 비표준(SPDX ID가 없는 경우)이면<code>name</code>으로 적는다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"bomFormat"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CycloneDX"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"specVersion"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"1.6"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"components"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"bom-ref"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"model-llama31-8b"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"machine-learning-model"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"group"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"meta-llama"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Llama-3.1-8B"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"version"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"1.0"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"licenses"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"license"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Llama 3.1 Community License"</span><span style="color:#000;font-weight:bold">}</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"modelCard"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"modelParameters"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"task"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"text-generation"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"architectureFamily"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"llama"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"datasets"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"dataset"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"사전학습 공개 코퍼스"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"classification"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"public"</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">},</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"considerations"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"useCases"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">"사내 문서 요약"</span><span style="color:#000;font-weight:bold">],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"technicalLimitations"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">"환각 가능성"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#4e9a06">"한국어 성능 편차"</span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div><p>SPDX 3.0을 쓴다면 AI 프로파일(AI Profile)과 데이터셋 프로파일(Dataset Profile)이 같은 정보를
표현한다(<a href="https://spdx.github.io/spdx-spec/v3.0.1/model/AI/AI/">SPDX 3.0 AI Profile</a>). 형식의
구체 필드와 생성 도구의 기술 상세는<a href="https://openchain-project.github.io/OpenChain-KWG/guide/iso42001_guide/4-operation/2-ai-sbom/">ISO/IEC 42001 가이드 — AI SBOM</a>에서
다룬다.</p><p><strong>고려사항</strong></p><ul><li><strong>인바운드 자재 반영(규격 의무)</strong>: 외부에서 도입한 모델과 데이터셋이 AI SBOM에 빠지지 않도록,
인입 시점에 SBOM 항목을 생성하는 절차를 둔다. 이것은<code>shall</code> 수준의 의무다.</li><li><strong>생성은 도구, 검토는 사람</strong>: 생성 도구는 모델 카드에 적힌 라이선스를 그대로 옮긴다. 모델
카드 자체에 라이선스가 누락되거나 잘못 적힌 경우가 흔하므로, 생성된 AI SBOM의 라이선스와
출처 필드를 사람이 원문과 대조해 검토한다.</li><li><strong>형식 일관성</strong>: 조직 내에서 SPDX와 CycloneDX 중 하나를 기본 형식으로 정해 도구와 저장소를
일관되게 운영한다. 두 형식 모두 모델과 데이터셋을 1급 구성요소로 다룬다.</li><li><strong>CI/CD 연동</strong>: AI SBOM은 한 번 만들고 끝나는 산출물이 아니다. 모델이나 데이터셋이 바뀔 때마다
다시 생성되도록 파이프라인에 연동한다.</li></ul><h3 id="392-절차-준수-입증-기록">3.9.2 절차 준수 입증 기록</h3><p><strong>준수 방법</strong></p><p>입증자료 3.9.2는 절차가 실제로 지켜졌음을 보여주는 기록이다. AI SBOM 파일 자체와 함께, 언제
누가 생성하고 검토하고 승인했는지의 이력을 남긴다. CI/CD에서 자동 생성한다면 빌드 로그와
생성된 SBOM 아티팩트가 기록이 되고, Dependency-Track 같은 관리 도구에 업로드한 이력도 증거가
된다.</p><p><strong>고려사항</strong></p><ul><li><strong>생성 이력 보존</strong>: 공급한 AI 시스템의 버전별로 그 시점의 AI SBOM을 보관해 추적성을 확보한다.</li><li><strong>승인 기록</strong>: 검토와 승인을 누가 했는지 기록한다.<a href="/docs/ai-sbom_guide/4-governance/1-governance/">거버넌스(3.10)</a>의
수명주기 검토와 연결된다.</li></ul><h2 id="5-참고">5. 참고</h2><ul><li>라이선스 의무 검토 절차:<a href="/docs/ai-sbom_guide/2-ai-extension/1-license-obligations/">3.5 라이선스 의무</a></li><li>AI SBOM 형식·생성 도구 기술 상세:<a href="https://openchain-project.github.io/OpenChain-KWG/guide/iso42001_guide/4-operation/2-ai-sbom/">ISO/IEC 42001 가이드 — AI SBOM</a></li><li>SBOM 관리 도구:<a href="https://openchain-project.github.io/OpenChain-KWG/guide/tools/7-dependency-track/">Dependency-Track</a>,<a href="https://openchain-project.github.io/OpenChain-KWG/guide/tools/8-cdxgen-dt/">cdxgen + Dependency-Track 연동</a></li><li>거버넌스와 수명주기 검토:<a href="/docs/ai-sbom_guide/4-governance/1-governance/">3.10 거버넌스</a></li></ul>
]]></content:encoded></item><item><title>cdxgen</title><link>https://haksungjang.github.io/docs/ai-sbom_guide/5-tools/2-cdxgen/</link><pubDate>Sat, 13 Jun 2026 23:47:21 +0900</pubDate><guid>https://haksungjang.github.io/docs/ai-sbom_guide/5-tools/2-cdxgen/</guid><description>프로젝트와 모델에서 CycloneDX SBOM을 생성하는 OWASP cdxgen의 AI BOM 모드 사용법을 실행 출력과 함께 안내한다.</description><content:encoded>&lt;![CDATA[<h2 id="개요">개요</h2><p>cdxgen은 OWASP CycloneDX 프로젝트의 공식 SBOM 생성기다. 20개 이상의 언어와 패키지 매니저를
지원하고, 최신 버전에서 AI BOM 전용 모드를 제공한다. AI 애플리케이션의 의존성(PyTorch,
Transformers 등)을 자동으로 식별하며, CI/CD 파이프라인에 연동하기 좋다.</p><p>AI SBOM 관점에서 cdxgen의 강점은 속도와 자동화다. 약점은 라이선스 정보를 기본 실행에서 채우지
않는다는 점이다. 아래 실행 결과에서 이 특성이 드러난다. OWASP AIBOM Generator가 모델 카드 메타데이터
중심이라면, cdxgen은 코드와 의존성 중심이다. 둘을 함께 쓰면 모델과 의존성을 모두 다룬다.</p><h2 id="주요-기능">주요 기능</h2><ul><li>소스 코드와 컨테이너 이미지에서 의존성을 식별해 CycloneDX SBOM을 생성한다.</li><li>AI BOM 모드(<code>-t ai</code>)로 AI/ML 메타데이터(formulation)를 포함한다.</li><li>Hugging Face 모델 URL, Modelfile, GGUF 아티팩트를 직접 입력으로 받는다.</li><li>Dependency-Track 서버에 SBOM을 자동 제출해 지속 관리할 수 있다.</li></ul><h2 id="설치">설치</h2><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 일회성 실행 (Node.js 필요)</span></span></span><span style="display:flex;"><span>npx @cyclonedx/cdxgen@latest --version</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 전역 설치</span></span></span><span style="display:flex;"><span>npm install -g @cyclonedx/cdxgen</span></span></code></pre></div><h2 id="사용법--ai-bom-생성">사용법 — AI BOM 생성</h2><p>AI 프로젝트 디렉토리에서 AI BOM 모드로 실행한다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># AI BOM 생성</span></span></span><span style="display:flex;"><span>cdxgen -t ai -o aibom.json .</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># AI/ML 메타데이터(formulation)를 포함해 생성</span></span></span><span style="display:flex;"><span>cdxgen -t ai --include-formulation -o aibom.json .</span></span></code></pre></div><p>아래는 사전학습 모델(<code>facebook/bart-large-cnn</code>)을 불러오는 요약 앱(<code>transformers</code>,<code>torch</code>
의존)에 cdxgen을 실제로 돌린 결과다. 의존성 5건을 자동 식별해 CycloneDX 1.7 BOM을 만든다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>$ cdxgen -t python --include-formulation -o aibom.json .</span></span><span style="display:flex;"><span>CycloneDX Generator 12.5.1 (Node.js)</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>생성된 components — 5건 (CycloneDX 1.7):</span></span><span style="display:flex;"><span> transformers 4.44.2 pkg:pypi/transformers@4.44.2 license: 비어 있음</span></span><span style="display:flex;"><span> torch 2.4.0 pkg:pypi/torch@2.4.0 license: 비어 있음</span></span><span style="display:flex;"><span> numpy 1.26.4 pkg:pypi/numpy@1.26.4 license: 비어 있음</span></span><span style="display:flex;"><span> tokenizers 0.19.1 pkg:pypi/tokenizers@0.19.1 license: 비어 있음</span></span><span style="display:flex;"><span> huggingface-hub 0.24.6 pkg:pypi/huggingface-hub@0.24.6 license: 비어 있음</span></span></code></pre></div><p><strong>그림 1.</strong> cdxgen 실행 출력<em>(cdxgen 12.5.1, 실행 2026-06-13)</em></p><p>생성된 컴포넌트 한 건은 다음과 같다. 식별 근거(evidence)는 채워지지만<code>licenses</code> 필드는 비어
있다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"transformers"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"version"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"4.44.2"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"purl"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"pkg:pypi/transformers@4.44.2"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"library"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"evidence"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"identity"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"field"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"purl"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"confidence"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">0.5</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"methods"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[{</span><span style="color:#204a87;font-weight:bold">"technique"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"manifest-analysis"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"value"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"requirements.txt"</span><span style="color:#000;font-weight:bold">}]</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div><h2 id="실행-결과가-보여주는-것">실행 결과가 보여주는 것</h2><div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">cdxgen은 식별이 빠르되 라이선스는 사람이 보강한다</div><p>cdxgen은<code>requirements.txt</code>에서 의존성 5건을 빠르게 식별했지만, 각 컴포넌트의<code>licenses</code> 필드가
비어 있다. 또 앱이 불러오는 사전학습 모델<code>facebook/bart-large-cnn</code>은 코드 스캔만으로는 BOM에
잡히지 않았다. 인바운드 자재로 별도 수집해 추가해야 한다. cdxgen으로 의존성 골격을 빠르게 만든
뒤, 라이선스는 사람이 확인해 채우고 모델은 OWASP AIBOM Generator로 별도 생성해 병합하는 조합이
현실적이다.</p></div><h2 id="참고">참고</h2><ul><li>AI SBOM 생성과 관리 절차:<a href="/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/">3.9 AI SBOM</a></li><li>모델 메타데이터 중심 생성기:<a href="/docs/ai-sbom_guide/5-tools/1-aibom-generator/">OWASP AIBOM Generator</a></li><li>SBOM 관리:<a href="https://openchain-project.github.io/OpenChain-KWG/guide/tools/7-dependency-track/">Dependency-Track</a>,<a href="https://openchain-project.github.io/OpenChain-KWG/guide/tools/8-cdxgen-dt/">cdxgen + Dependency-Track 연동</a></li><li>공식:<a href="https://github.com/cdxgen/cdxgen/blob/master/docs/AI_BOM.md">cdxgen AI-BOM 문서</a></li></ul>
]]></content:encoded></item><item><title>OWASP AIBOM Generator</title><link>https://haksungjang.github.io/docs/ai-sbom_guide/5-tools/1-aibom-generator/</link><pubDate>Sat, 13 Jun 2026 23:47:21 +0900</pubDate><guid>https://haksungjang.github.io/docs/ai-sbom_guide/5-tools/1-aibom-generator/</guid><description>Hugging Face 모델에서 CycloneDX 형식 AI SBOM을 생성하고 완전성 점수를 매기는 OWASP 도구의 사용법을 실행 화면과 함께 안내한다.</description><content:encoded>&lt;![CDATA[<h2 id="개요">개요</h2><p>OWASP AIBOM Generator는 Hugging Face 모델 ID를 입력받아 모델 카드 메타데이터를 가져오고,
CycloneDX 형식의 AI SBOM을 생성하는 오픈소스 도구다. OWASP Gen AI Security Project가 관리하며,
생성된 BOM이 얼마나 완전한지를 점수로 평가하는 기능이 특징이다.</p><p>cdxgen이 의존성을 빠르게 식별하되 라이선스를 비워 두는 것과 달리, 이 도구는 모델 카드에 적힌
라이선스와 작성자, 외부 참조를 채운다.<a href="/docs/ai-sbom_guide/2-ai-extension/1-license-obligations/">3.5 라이선스 의무</a>가
요구하는 라이선스 검토의 출발점으로 쓰기 좋다.</p><h2 id="주요-기능">주요 기능</h2><ul><li>Hugging Face 모델의 메타데이터를 가져와 CycloneDX 1.6과 1.7 형식 AIBOM을 생성한다.</li><li>생성된 BOM의 완전성을 점수(0~100)와 프로파일로 평가하고 섹션별로 분해해 보여준다.</li><li>모델 정보, 모델 카드, 라이선스, 외부 참조를 사람이 읽기 쉬운 화면으로 보여준다.</li><li>웹 UI와 명령줄(CLI) 두 가지로 쓸 수 있다.</li></ul><h2 id="사용법-a--웹-ui">사용법 A — 웹 UI</h2><p>브라우저에서 모델 ID만 넣으면 되어 가장 간단하다. OWASP Gen AI Security Project가 제공하는
Hugging Face Space를 쓰거나, 저장소를 받아 로컬에서 띄운다.</p><p>먼저 입력 화면에서 Hugging Face 모델 ID(예:<code>facebook/bart-large-cnn</code>)를 넣고 생성을 누른다.</p><p><img src="/docs/ai-sbom_guide/5-tools/1-aibom-generator/images/input-form.png" alt="OWASP AIBOM Generator 입력 화면"/><p><strong>그림 1.</strong> OWASP AIBOM Generator 입력 화면<em>(GenAI Security Project, 캡처 2026-06-13)</em></p><p>생성이 끝나면 결과 화면에 AIBOM 요약, 완전성 평가, 다운로드 버튼(CycloneDX 1.6과 1.7), AI 모델
정보, 모델 카드가 표시된다. 화면 상단의 완전성 평가는 BOM이 식별에 필요한 최소 항목을 갖췄는지
한눈에 보여준다.</p><p><img src="/docs/ai-sbom_guide/5-tools/1-aibom-generator/images/result-view.png" alt="OWASP AIBOM Generator 결과 화면"/><p><strong>그림 2.</strong> 생성 결과 화면 — 모델 정보, 라이선스(MIT), 완전성 평가(Basic)<em>(캡처 2026-06-13)</em></p><p>결과 화면은 사람이 읽는 보기(Human-Friendly View)와 함께 필드 체크리스트, 점수 보고서, JSON
보기 탭을 제공한다. 라이선스 의무 검토와 AI SBOM 보관에 필요한 항목을 화면에서 바로 확인하고
CycloneDX 파일로 내려받는다.</p><h2 id="사용법-b--명령줄cli">사용법 B — 명령줄(CLI)</h2><p>CI/CD에 넣거나 여러 모델을 일괄 처리할 때는 CLI가 편하다. 설치 후 모델 ID를 인자로 준다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 설치 (Python 가상환경 권장)</span></span></span><span style="display:flex;"><span>pip install<span style="color:#4e9a06">"git+https://github.com/GenAI-Security-Project/aibom-generator"</span></span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 모델 ID로 AIBOM 생성</span></span></span><span style="display:flex;"><span>aibom facebook/bart-large-cnn -o aibom.json</span></span></code></pre></div><p>아래는 실제 실행 결과다. CycloneDX 1.6과 1.7을 생성하고 스키마 검증을 통과하며, 완전성 점수를
섹션별로 보여준다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>$ aibom facebook/bart-large-cnn -o aibom.json</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>✅ Successfully generated CycloneDX 1.6 SBOM — Schema Validation (1.6): Valid</span></span><span style="display:flex;"><span>✅ Successfully generated CycloneDX 1.7 SBOM — Schema Validation (1.7): Valid</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>📊 Completeness Score: 58.7/100 Profile: Basic</span></span><span style="display:flex;"><span> - Required Fields: 20/20</span></span><span style="display:flex;"><span> - Metadata: 8/20</span></span><span style="display:flex;"><span> - Component Basic: 17.1/20</span></span><span style="display:flex;"><span> - Component Model Card: 6.7/30</span></span><span style="display:flex;"><span> - External References: 10/10</span></span></code></pre></div><p><strong>그림 3.</strong> CLI 실행 출력<em>(aibom CLI, 모델 facebook/bart-large-cnn, 실행 2026-06-13)</em></p><p>생성된 BOM의 모델 컴포넌트는 라이선스와 모델 카드가 채워진다. cdxgen 출력과 달리<code>licenses</code>
필드가 비어 있지 않다.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"machine-learning-model"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"bart-large-cnn"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"purl"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"pkg:huggingface/facebook/bart-large-cnn"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"licenses"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[{</span><span style="color:#204a87;font-weight:bold">"license"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"id"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"MIT"</span><span style="color:#000;font-weight:bold">}</span><span style="color:#000;font-weight:bold">}],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"authors"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[{</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"facebook"</span><span style="color:#000;font-weight:bold">}],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"modelCard"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"modelParameters"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#000;font-weight:bold">},</span><span style="color:#204a87;font-weight:bold">"considerations"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#000;font-weight:bold">}</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div><h2 id="실행-결과가-보여주는-것">실행 결과가 보여주는 것</h2><div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">완전성 점수는 입력 메타데이터 품질에 좌우된다</div><p>실제 실행에서 완전성 점수는 58.7/100(Basic)이었다. Required Fields와 External References는 만점이지만
모델 카드 점수가 6.7/30으로 낮다. 이는 도구의 한계가 아니라, 모델 제공자가 Hugging Face 모델
카드에 정보를 충분히 채우지 않았기 때문이다. 도구는 있는 메타데이터를 충실히 가져오지만, 없는
정보를 만들어 내지는 못한다. 모델 카드가 부실하면 사람이 출처를 확인해 보강해야 한다.</p></div><h2 id="참고">참고</h2><ul><li>AI SBOM 생성과 관리 절차:<a href="/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/">3.9 AI SBOM</a></li><li>라이선스 의무 검토:<a href="/docs/ai-sbom_guide/2-ai-extension/1-license-obligations/">3.5 라이선스 의무</a></li><li>다른 생성 도구:<a href="/docs/ai-sbom_guide/5-tools/2-cdxgen/">cdxgen</a></li><li>공식:<a href="https://genai.owasp.org/resource/owasp-aibom-generator/">OWASP AIBOM Generator</a></li></ul>
]]></content:encoded></item></channel></rss>