SPDX와 CycloneDX: SBOM 형식 선택
Sytance · 업데이트
SPDX와 CycloneDX는 모두 소프트웨어 구성 요소와 그 관계를 기술합니다. 어떤 형식을 선택할지는 수신자에게 필요한 정보와 수신자 도구가 처리할 수 있는 버전에 따라 달라집니다. 따라서 형식을 합의할 때는 버전, 인코딩, 필수 필드도 함께 정해야 합니다.
수신자에게 필요한 정보
펌웨어 공급업체가 제조업체에 SBOM을 보내는 경우와 팀이 취약점 관리 서비스에 SBOM을 불러오는 경우에는 요구사항이 다를 수 있습니다. 수신자가 지원하는 버전과 인코딩에 따라 처리할 수 있는 파일이 결정됩니다. 대표 파일을 사용하면 지원 여부를 확인하는 데 도움이 됩니다.
제품 식별 정보, 구성 요소 식별자, 관계, 라이선스, 취약점 또는 출처 정보 등 필요한 정보를 문서화하세요. 수신자가 형식의 일부만 지원한다면, 생략되는 필드가 정보 교환의 목적에 영향을 주는지 판단하세요.
규격 버전과 도구 지원
SPDX 2.3과 SPDX 3.0.1은 별도로 발행된 규격입니다. SPDX 3.0.1은 소프트웨어 SBOM 클래스를 포함해 프로파일을 사용하는 모델입니다. SPDX 2.3 JSON을 받아들이는 소비 도구가 3.x 문서도 받아들인다고 가정해서는 안 됩니다.
CycloneDX 규격 개요에는 버전 1.7이 기재되어 있습니다. 객체 모델에는 구성 요소, 서비스, 종속 관계, 취약점 정보가 포함됩니다. 생산 도구가 최신 규격을 지원하더라도 후속 가져오기 도구는 이전 버전만 지원할 수 있습니다.
| 교환 세부 정보 | SPDX 예 | CycloneDX 예 |
|---|---|---|
| 버전 | 2.3 또는 3.0.1 | 1.7 |
| 문서 식별 정보 | 버전별 문서 모델 | 일련번호 및 BOM 버전 |
| 종속성 | 유형이 지정된 관계 | 종속성 그래프 |
| 검증 | 선택한 버전의 규칙 | 선택한 버전의 스키마 |
관계 및 라이선스 필드
SPDX 2.3에서 CONTAINS는 포함 관계를, DEPENDS_ON은 종속 관계를 나타냅니다. 패키지가 아카이브에 들어 있는 것과 다른 패키지가 빌드 또는 실행을 위해 해당 패키지를 필요로 하는 것은 다릅니다. 가져올 때 관계 유형과 방향을 보존하세요.
SPDX 2.3은 선언된 라이선스와 결론된 라이선스도 구분합니다. 공급업체의 선언과 분석자의 결론을 아무 설명 없이 동일한 필드로 합쳐서는 안 됩니다. 검토에 이 구분이 중요하다면 수신 도구가 이를 보존해야 합니다.
CycloneDX를 사용할 때는 선택한 버전의 종속성 그래프와 구성 요소 참조를 확인하세요. 변환 후에도 평면 구성 요소 목록은 읽을 수 있지만, 어떤 제품이 해당 구성 요소를 사용하는지 조사하는 데 필요한 경로가 사라질 수 있습니다.
변환된 정보 확인
작은 테스트 파일로 변환 중 손실되는 정보를 찾아낼 수 있습니다. 제품, 직접 종속성, 간접 종속성을 포함하세요. 동일한 구성 요소의 두 버전, 라이선스 표현식, 명시적으로 알 수 없음으로 표시한 필드를 넣으면 단순히 파일을 받아들이는지보다 더 많은 것을 확인할 수 있습니다.
- 원본을 선언된 규격 버전에 따라 검증합니다.
- 수신 도구로 가져온 뒤 대상 제품을 확인합니다.
- 구성 요소 식별 정보, 버전, 관계 방향을 비교합니다.
- 라이선스 필드와 알 수 없는 정보의 표현을 확인합니다.
- 지원되는 경우 다시 내보낸 뒤, 파일 형식이 아니라 의미를 비교합니다.
전달 형식 선택
고객이 SPDX 2.3을 요구한다면 합의한 필드를 포함해 해당 버전으로 전달하고, 변환으로 다른 데이터가 제거되는 경우에는 더 상세한 원본 기록을 보관하세요. 수신 워크플로가 이미 CycloneDX를 사용하며 필요한 그래프를 보존한다면 지원되는 CycloneDX 버전을 사용하세요.
고객이 두 형식 모두 필요로 한다면 형식 간 필드 매핑을 유지하고 테스트하세요. 변환 과정에서 손실되거나 확장 기능으로 옮겨지는 정보를 문서화하세요. 변환은 대상 규격에 따라 데이터를 변환해야 합니다.
가져온 후에도 수신자가 의도한 대로 정보를 사용할 수 있는지 확인하세요. 취약점 분석의 경우 구성 요소에서 시작해 이를 사용하는 제품과 릴리스를 찾을 수 있어야 합니다.