본문으로 건너뛰기

SBOM 적합성 기준선

업로드한 SBOM(Software Bill of Materials)이 AI 시스템을 기술하는 문서, 즉 CycloneDX machine-learning-model 컴포넌트가 하나 이상 있는 문서라면 TRUSCA는 적합성 결과G7 AI SBOM 최소요소(Minimum Elements) 체크리스트를 추가합니다. 7개 클러스터, 51개 요소를 각각 존재·부재·사람 검토 필요로 보고합니다. 이 체크리스트는 전부 권고(advisory)이며 전체 pass / warn / fail 판정을 바꾸지 않습니다.

대상 독자

AI SBOM(ML-BOM)을 받거나 만들면서 그 완전성을 판단해야 하는 엔지니어와 컴플라이언스 담당자. TRUSCA 프로젝트에 SBOM을 업로드하는 방법을 이미 안다고 가정합니다.

G7 최소요소 소개

G7 Software Bill of Materials for AI — Minimum Elements(2026년 5월)는 독일 연방정보보안청(BSI)과 이탈리아 국가사이버보안청(ACN)이 주도해 만든 공동 기준입니다. AI 시스템의 SBOM이 담아야 할 정보를 규정합니다. 기존 SBOM이 나열하는 소프트웨어 의존성뿐 아니라 모델, 학습에 쓴 데이터셋, 실행 인프라, 그리고 시스템을 평가할 때 필요한 보안·성능 정보까지 포함합니다.

시점도 의미가 있습니다. EU 인공지능법(AI Act)의 주요 의무가 2026년 8월 2일부터 적용되며, 고위험 AI 시스템에는 기술 문서 작성 의무가 따릅니다. G7 최소요소가 AI Act 준수 체크리스트는 아니지만, 그런 기술 문서가 근거로 삼는 목록 정보(모델, 데이터셋, 라이선스, 출처)를 항목으로 정리한 것이므로, ML-BOM을 이 기준으로 점검하면 준비 상태를 가늠할 수 있습니다.

2026 SBOM 최소 요소

업로드한 문서를 채점하는 기준선은 이제 둘이며, 적용 대상이 다릅니다.

「2026 Minimum Elements for a Software Bill of Materials (SBOM)」(v2.1, 2026년 7월 29일 발행. CISA·NSA·FBI가 독일 BSI, 일본 METI, 한국 KISA를 포함한 15개 국제 파트너와 공동 작성)은 2021년 NTIA 최소 요소를 대체합니다. 특정 부류가 아니라 모든 소프트웨어에 적용되므로, TRUSCA는 AI 여부와 무관하게 모든 CycloneDX 문서에 이 기준을 적용합니다. 데이터 필드 17종과 실무 6종, 세 묶음으로 나뉜 검사 23종입니다.

이 중 열 가지는 2021년에 없던 항목입니다. SBOM 작성자 서명, 데이터 형식 이름과 버전, 생성 시점, 생성 도구 이름과 버전, SBOM 문서 버전, 컴포넌트 해시 값과 해시 알고리즘, 컴포넌트 라이선스입니다. 2021년 항목 하나(접근 통제)는 삭제되어 배포와 전달 항목으로 흡수됐습니다.

행을 읽기 전에 알아 둘 것이 셋 있습니다.

첫째, 모든 항목이 권고입니다. pass / warn / fail 판정을 움직이지 않으며, 판정은 핵심 검사가 그대로 결정합니다. 기준 문서 자체는 그런 구분을 두지 않지만, 필수로 올리면 정당하게 값이 없을 수 있는 항목 때문에 SBOM이 실패합니다. 이 지침은 값을 적을 수 없을 때 값 대신 "확인하지 못했다"는 명시를 받아들이기 때문입니다. 읽을 가치가 있는 것은 스캔이 실제로 확인한 비율이고, 그것은 커버리지 행이 이미 보고합니다.

둘째, 실무 6종 가운데 넷은 사람이 확인해야 합니다. 포함 범위, SBOM 데이터 갱신 수용, 배포와 전달, 갱신 주기는 문서에 담긴 내용이 아니라 조직이 일하는 방식을 기술하므로 스캔으로 판정할 수 없습니다. 그래서 점수를 매기거나 조용히 빼지 않고, 무엇을 확인해야 하는지 안내와 함께 검토 항목으로 표시합니다. 도구가 답할 수 있는 둘은 기계 판독 가능 데이터(포맷 판정으로 이미 답이 나옵니다)와 미확인 정보의 명시(문서 단위 선언으로 충족합니다)입니다.

셋째, 이 기준선의 식별 인정 범위가 제출 기준보다 넓습니다. PURL, CPE, SWHID, 또는 해시 같은 내재적 식별자 가운데 하나만 있어도 식별된 것으로 봅니다. 반면 PURL 커버리지 검사는 여전히 PURL을 요구합니다. 해시만 있는 파일 항목은 한쪽에서는 식별된 것이고 다른 쪽에서는 부족한 것이며, 리포트는 더 엄격한 쪽만 말하지 않고 둘 다 보여 줍니다.

TRUSCA가 생성한 문서에서 통과하지 못하는 행이 하나 있습니다. SBOM 작성자 서명 항목은 문서 안에 담긴 서명을 찾는데, TRUSCA는 SBOM 옆에 서명 파일을 두는 분리 서명 방식을 씁니다(검증 방법). 이 행에는 그 사실을 알리는 검토 안내가 붙습니다. 분리 서명으로 보낸 공급자를 서명하지 않은 것으로 읽으면 안 되기 때문입니다.

API에서는 같은 checks[] 배열에 cisa-로 시작하는 항목으로 돌아옵니다. 통과가 아닌 행에는 읽는 시점에 조인된 guidance(그 항목을 충족시킬 CycloneDX 조각)나 review(사람이 대신 확인할 사항)가 함께 실릴 수 있습니다.

ML-BOM 업로드

별도의 업로드 경로나 설정은 없습니다. 기존 받은-SBOM 인제스트로 문서를 보내면(SBOM 업로드 참고) TRUSCA가 AI 내용을 자동 감지합니다.

  • CycloneDX specVersion 1.7을 받습니다. 1.7이 ML-BOM 필드(modelCard, 모델 파라미터, 데이터셋 거버넌스)를 담는 버전입니다. 이전 버전(1.2~1.6)도 종전대로 받습니다.
  • 감지는 자동입니다. 문서에 machine-learning-model 타입 컴포넌트가 하나라도 있으면 스캔의 적합성 결과에 G7 검사 51개가 추가됩니다. 문서 자신이 기술하는 대상도 셉니다. 모델을 공개하며 만든 BOM은 모델을 컴포넌트 목록이 아니라 metadata.component에 두는데, 이쪽도 똑같이 읽습니다. 없으면 핵심 검사와 규제 필드 검사만 수행합니다.
  • 생성 도구는 제한이 없습니다. BomLens나 OWASP AIBOM Generator 같은 도구가 만든 CycloneDX 1.7 ML-BOM을 그대로 평가하며, 유효한 CycloneDX JSON이라면 손으로 작성한 문서도 됩니다.

체크리스트 읽는 법

체크리스트는 스캔 상세 페이지에서 핵심 검사 표 아래에 G7 AI SBOM 최소요소라는 전용 섹션으로 표시됩니다. 맨 위 집계 줄이 충족 현황(자동 검사 가능한 41개 중 충족 수, 권고 건수, 사람 검토 필요 건수)을 요약하고, 그 아래에 클러스터별 카드가 정해진 순서로 이어집니다. 각 행에는 상태 배지와 source 배지가 함께 붙고, 알려진 요소라면 올바른 CycloneDX 작성 예시와 함께 공식 명세로 가는 "자세히 보기" 링크(예: CycloneDX ML-BOM 소개 페이지)도 제공합니다.

API도 같은 데이터를 반환합니다. GET /v1/projects/{project_id}/scans/{scan_id}/conformance 응답의 checks[]에서 G7 항목에는 cluster·source·role 필드와 (추출된 값이 있으면) evidence 필드가 추가되고, G7 이외의 검사에는 이 필드가 없습니다(예외로 file-propertiessource 태그를 가집니다).

클러스터 7종

클러스터요소 수다루는 내용
메타데이터10SBOM 문서 자체 — 작성자, 포맷 이름·버전, 생성 도구, 타임스탬프, 서명, 의존 관계.
시스템 수준 속성9AI 시스템 전체 — 이름, 버전, 생산자, 컴포넌트 구성, 데이터 흐름, 의도된 적용 분야.
모델14machine-learning-model 컴포넌트 — 식별자, 버전, 해시, 모델 카드, 입력·출력, 학습 속성, 라이선스와 개방성.
데이터셋 속성10data 컴포넌트 — 이름, 식별자, 내용, 해시, 출처(provenance), 의존성 관계, 민감도(PII·저작권), 라이선스. 통계와 민감도를 뺀 나머지는 컴포넌트에서 읽으며, 대부분 CycloneDX data 배열에 담깁니다.
인프라2시스템이 실행되는 소프트웨어 의존성과 (HBOM 링크로 연결되는) 하드웨어.
보안 속성4보안 통제, 컴플라이언스, 사이버보안 정책 정보, 취약점 참조.
핵심성과지표2보안 지표와 운영 성능 수치.

요소별 상태

각 요소는 세 가지 결과 중 하나로 보고됩니다.

  • pass(present) — 문서에서 요소를 찾았습니다.
  • 권고 warn(not present in the SBOM) — 자동 검사가 가능한 요소인데 문서에 없습니다. 핵심 검사의 warn과 달리 전체 판정에는 반영되지 않습니다.
  • 사람 검토 필요(requires human review (no automated source)) — G7 문서가 요구하는 요소지만 이를 증명할 CycloneDX 필드가 없습니다. 51개 중 10개가 이 그룹이며(예: 데이터셋 민감도, 보안 통제) 문서 품질과 무관하게 항상 이렇게 표시되고, 집계 줄에서 "사람 검토 필요"로 따로 셉니다.

source 태그 4종

각 요소에는 충족 값의 출처를 기록하는 source 태그가 붙습니다.

SourceUI 배지의미
auto자동 확인표준 CycloneDX 필드에서 그대로 읽음(예: 모델의 purl).
inferred신호 추정전용 필드가 아니라 신호에서 유추(예: 이름에 timestamp가 들어간 속성).
declared제공 값사람이나 매니페스트가 직접 기입해야만 존재(예: 문서 서명, publisher).
na사람 검토 필요자동 검사 원천 없음 — 항상 "사람 검토 필요"로 보고.

role 필드는 참고 정보입니다. G7 문서가 해당 요소의 제공자로 지목하는 주체(SBOM 작성자, 시스템 생산자, 모델 생산자, 데이터셋 제작자)를 표시할 뿐, 필수·선택을 가르는 기준이 아닙니다. G7 문서에는 역할별 필수 매트릭스가 없습니다.

충족된 요소 중 모델 식별자, 해시 알고리즘, 모델 라이선스, 개방성 속성은 추출한 evidence 값(최대 8개, 각 200자 제한)도 함께 표시하므로, 문서를 다시 열지 않아도 어떤 PURL·라이선스가 검사를 충족했는지 확인할 수 있습니다.

전부 권고

G7 검사 51개는 모두 권고(required: false)이며 판정의 n_warn 카운터에서 제외됩니다. G7 요소가 절반 빠진 ML-BOM도 핵심 검사 9개를 통과하면 전체 판정은 pass입니다. 체크리스트는 차단 게이트가 아니라 SBOM 생산자와 완전성을 논의하는 자료로 쓰세요.

규제 대응표 (EU 인공지능법·AI 기본법)

G7 요소는 규제 기술 문서가 근거로 삼는 목록 정보를 항목으로 정리한 것이므로, 적합성 응답은 여기에 **규제 대응표(crosswalk)**를 결합합니다. 대응 관계를 세울 수 있는 G7 요소에는 regulations 참조가 붙습니다. EU 인공지능법은 부속서 IV 기술문서를 섹션 단위로 가리키고(예: 학습 데이터 요소는 부속서 IV(2)(d)), AI 기본법(대한민국)은 조문 단위로 가리킵니다(제31조 투명성부터 제35조 영향평가까지). 대응은 의도적으로 보수적입니다. 근거를 세울 수 없는 요소에는 항목 자체가 없습니다.

응답의 regulatory_crosswalk.frameworks[] 블록은 대응된 요소를 프레임워크별로 충족·결측·사람 검토 필요로 집계하고, 스캔 상세 페이지의 적합성 패널에도 같은 롤업이 표시됩니다. AI와 무관한 일반 검사도 같은 방식으로 BSI TR-03183-2와 NTIA 최소 요소에 대응됩니다. 필드 형태와 롤업 집계 방식은 SBOM 업로드 → 규제 대응표에 정리돼 있습니다.

컴플라이언스 판정이 아닙니다

대응표는 문서화 준비를 돕는 자료입니다. TRUSCA는 EU 인공지능법, AI 기본법을 비롯한 어떤 규제의 준수 여부도 인증하거나 판정하지 않으며, SBOM이 담을 수 있는 항목만 다룹니다. 인공지능법의 공정성·차별 금지 의무(편향 검토, 기본권 영향평가)는 SBOM으로 표현할 수 없어 대응표가 다루지 않고, AI 기본법 제32조 링크는 그 의무의 대상 항목을 가리킬 뿐 의무가 해당 시스템에 적용된다는 판정이 아닙니다. 위 문장은 요약이며, 응답에는 대응표 자체의 면책 문구가 전문으로 실립니다. 전문은 SBOM 업로드에 인용해 두었습니다.

사용 시나리오별 라이선스 판정

모델 라이선스는 내부 실험에는 아무 조건을 걸지 않다가, 제품에 넣어 배포하면 조건이 붙고, 모델 자체를 재배포하면 조건이 더 붙는 경우가 많습니다. 같은 라이선스인데 답이 셋입니다. 그래서 모델이 들어 있는 문서라면 적합성 패널에 AI 사용 판정 절이 나타나고, 알려 준 용도를 기준으로 모델과 데이터셋을 하나씩 판정합니다.

용도는 프로젝트마다 설정 탭의 AI 사용 시나리오에서 고릅니다.

시나리오
internal사내에서만 쓰고 밖으로 내보내지 않습니다.
product배포하는 제품 안에 모델이 들어갑니다.
redistribute모델 자체를 넘겨줍니다.
outputs-only출력물만 쓰고 모델은 배포하지 않습니다.

지정하지 않는 것도 정당한 선택이며 비워 둔 항목이 아닙니다. 이 경우 모든 조건을 적용하는데, 이쪽이 더 보수적인 해석입니다.

판정 값은 네 가지입니다. 나쁜 순서대로 caution, review, conditional, ok이고, 모델은 자신이 의존한다고 선언한 데이터셋의 판정까지 함께 반영합니다. 모델은 그 뒤에 있는 데이터보다 깨끗할 수 없기 때문입니다.

판정
caution이 용도를 막는 조건이거나, 쓰기 전에 사람이 풀어야 하는 조건입니다.
review레지스트리에 없는 라이선스이거나 선언된 라이선스가 없습니다. 허용적이라고 가정하지 않습니다.
conditional사용은 가능하지만 이 용도에 걸리는 의무가 있습니다.
ok이 용도에 걸리는 조건이 없습니다.

reviewconditional보다 높은 것은 의도한 순서입니다. 아무도 분류하지 않은 라이선스가, 누군가 이미 읽어 본 라이선스 뒤로 묻히면 안 됩니다.

판정을 계산하는 시점에서 두 가지가 따라옵니다. 업로드 때 저장해 두는 것이 아니라 화면을 열 때 계산하므로, 시나리오를 바꾸면 한참 전에 인제스트한 스캔의 판정도 함께 바뀝니다. 다시 올릴 필요가 없습니다. 그리고 규제 대응표와 같은 뜻에서 참고용입니다. 이 판정은 빌드 게이트나 승인 워크플로우로 이어지지 않으며, 응답에는 레지스트리의 면책 문구가 판정 옆에 함께 실립니다.

도구가 검사하지 않는 것

OpenChain AI SBOM 가이드와 같은 원칙, 즉 생성은 도구로, 해석은 사람으로를 따릅니다. TRUSCA는 필드가 존재하는지 확인하고 값을 추출할 뿐, 값의 의미까지 보증하지 않습니다.

  • 비표준 라이선스 해석. 많은 모델 라이선스(OpenRAIL 계열, 연구용 맞춤 라이선스)는 SPDX 식별자가 없고 조항 해석이 필요합니다. 모델 라이선스 검사는 라이선스 항목의 존재만 확인합니다. 그 조항이 실제 사용 방식을 허용하는지는 정책과 법무의 판단입니다.
  • 데이터셋 출처의 진위. 데이터셋 출처 검사는 출처·거버넌스 필드가 채워져 있는지만 확인합니다. 기재된 출처가 사실인지, 데이터가 적법하게 수집됐는지는 SBOM만으로 기계가 검증할 수 없습니다.
  • 사람 검토 요소. na 요소 10개(데이터 흐름, 데이터셋 민감도, 보안 통제 등)는 시스템의 실제 문서를 사람이 읽어야 합니다.

운영상 경계 두 가지도 알아 두세요.

  • ML 컴포넌트는 CVE 매칭 대상이 아닙니다. Trivy가 machine-learning-model을 지원하지 않는 컴포넌트 타입으로 건너뛰므로, 인제스트한 ML-BOM의 취약점 결과는 소프트웨어 의존성만 다룹니다. CVE(Common Vulnerabilities and Exposures 식별자)가 모델 자체에 붙는 일은 없습니다.
  • PURL 없는 모델은 Components 탭에 나오지 않습니다. 컴포넌트 적재에는 패키지 URL이 필요합니다. G7 검사는 적재된 컴포넌트 목록이 아니라 업로드된 원본 문서를 평가하므로 영향이 없습니다.

동작 확인

  1. machine-learning-model 컴포넌트가 하나 이상 든 CycloneDX 1.7 문서를 업로드합니다(SBOM 업로드).
  2. 스캔이 succeeded에 도달하면 스캔 상세 페이지를 엽니다. 핵심 검사 표 아래에 G7 AI SBOM 최소요소 섹션이 나타나고, 집계 줄과 함께 클러스터 카드 7장이 순서대로(메타데이터부터 핵심성과지표까지) 표시됩니다.
  3. 전체 적합성 배지는 ML 내용이 없을 때와 같습니다 — G7 미충족만으로 passwarn으로 바뀌지 않습니다.

문제 해결

체크리스트가 나오지 않음

문서에 "type": "machine-learning-model" 컴포넌트가 없는 경우입니다 — AI 관련 SBOM이라도 라이브러리만 나열한 문서가 많습니다. 업로드한 파일의 components[].typemetadata.component.type을 확인하세요. 두 자리 모두 인정합니다. 그리고 스캔 종류가 sbom인지도 확인하세요. 소스·컨테이너 스캔에는 적합성 결과가 생성되지 않습니다.

업로드가 422로 거부됨

이 기능 이전의 TRUSCA 릴리스는 인제스트에서 specVersion: 1.7을 거부합니다. 포털을 업그레이드한 뒤 다시 업로드하세요. 오류의 detail 필드가 구체적 사유를 알려 줍니다 — SBOM 업로드 → 문제 해결 참고.

"사람 검토 필요" 행이 많음

정상입니다. 51개 요소 중 10개는 자동 검사 원천이 없어(source: na) 항상 사람 검토를 요청합니다. SBOM의 결함이 아니라 G7 문서의 성격을 반영한 결과입니다.

모델이 Components 탭에 없음

모델 컴포넌트에 purl이 없어 컴포넌트 목록에 적재되지 않은 경우입니다. 모델을 소프트웨어 컴포넌트와 함께 목록에 올리려면 패키지 URL(예: pkg:huggingface/...)을 추가하세요. G7 체크리스트는 PURL 유무와 무관하게 동작합니다.

더 보기