빌드 중에 기록하는 SBOM 생성
CRACI는 빌드 후 파일을 스캔하는 대신, 각 GitHub Actions 빌드가 실제로 가져온 것을 기록하는 SBOM 생성 도구입니다. 모든 SBOM에는 얼마나 완전한지가 표시됩니다.
요약: GitHub Actions 작업을 CRACI 러너에서 실행하면, 모든 작업이 가져온 패키지의 SBOM을 전이적 종속성과 CI 캐시에서 복원된 패키지까지 포함해 얻을 수 있으며, CycloneDX 또는 SPDX로 내보낼 수 있습니다. 각 SBOM에는 완전성 상태가 표시되고, 출시 후에도 새로운 취약점이 있는지 모니터링됩니다. Syft나 Trivy 같은 스캔 도구는 파일에서 SBOM을 재구성하지만, CRACI는 빌드에서 직접 기록합니다. 빌드 시점 SBOM이 다른 이유.
사후 스캔이 아닌 빌드 중 기록
대부분의 SBOM 생성 도구는 빌드가 끝난 뒤 파일을 읽고, 무엇이 들어갔을지 추정해 재구성합니다. CRACI는 자사 CI 러너 안에서 SBOM을 생성합니다. 패키지를 인식하는 프록시가 각 작업이 패키지 소스로 보내는 트래픽을 관찰하므로, SBOM에는 매니페스트상 필요하다고 적힌 것이 아니라 작업이 실제로 가져온 패키지가 전이적 종속성까지 포함해 기록됩니다. 잠금 파일, 설치된 종속성 트리, 별도의 스캔 단계 없이도 기록이 만들어집니다.
모든 계층의 전이적 종속성
빌드가 가져오는 패키지의 대부분은 직접 종속성이 아닙니다. 여러 계층 아래에 있는 종속성의 종속성이며, 그중 일부는 잠금 파일에 아예 나타나지 않습니다. 빌드 스크립트가 내려받는 사전 빌드 바이너리, 캐시에서 복원된 패키지, 운영체제 패키지가 그렇습니다. CRACI는 작업이 가져온 모든 패키지를 깊이와 관계없이 기록하므로, 전체 종속성 트리를 대상으로 취약점을 매칭합니다. 다른 SBOM 도구와 나란히 비교한 결과, 더 완전한 이 기록에서 다른 도구가 보고하지 않은 취약점이 드러났습니다.
CI 캐시에서 복원된 패키지도 SBOM에 유지
빌드 중 기록이 흔히 끊기는 지점은 캐시입니다. 캐시에서 복원된 패키지는 레지스트리를 거치지 않으므로 프록시만으로는 놓치게 됩니다. CRACI는 종속성 증거를 캐시와 함께 전달하므로, CI 캐시에서 복원된 패키지도 이를 복원한 작업의 SBOM에 그대로 남습니다.
모든 작업에 완전성 상태 표시
취약점 추적은 SBOM에 나열된 구성 요소만 매칭할 수 있습니다. SBOM에서 빠진 패키지는 아무도 알림을 받지 못하는 취약점이 됩니다. 그래서 CRACI는 모든 SBOM을 완전하다고 내세우는 대신, 작업과 캐시마다 완전성을 Complete, Complete with connections, Incomplete, Unavailable, Not recorded 중 하나로 표시합니다. 어떤 SBOM을 신뢰할 수 있고 어떤 SBOM을 다시 확인해야 하는지 알 수 있습니다.
제품에 쓰는 생태계와 형식 지원
CRACI는 npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk, Git 소스의 패키지와 Yocto 및 OpenEmbedded 다운로드 프리셋을 기록하며, JFrog Artifactory의 npm 및 PyPI 미러를 알려진 소스로 취급합니다. Maven 및 Java 지원은 로드맵에 있습니다. SBOM은 전이적 종속성을 포함해 CycloneDX와 SPDX로 내보낼 수 있어 고객, 파트너, 감사인과 바로 공유할 수 있습니다.
모든 구성 요소에 선언된 라이선스 포함
기록된 모든 패키지는 선언된 라이선스를 SBOM에 함께 담습니다. 출시 전에 어떤 종속성이 상용 라이선스나 그 밖의 제한적 라이선스를 따르는지 확인할 수 있으며, 카피레프트 라이선스가 제품에 들어가기 전에 잡아낼 수 있습니다.
API로 제공되는 출처 증명
SBOM은 CRACI가 작업마다 기록하는 정보의 일부입니다. 공개 REST API는 같은 빌드에서 기록된 SBOM, 네트워크 추적, 출처 증명을 모두 반환합니다.
출시 후에도 지속 모니터링
SBOM은 기업이 출시하는 소프트웨어에 무엇이 들어 있는지 파악하는 수단이며, 고객과 규제 기관의 요구도 늘고 있습니다. EU Cyber Resilience Act는 EU에서 판매되는 제품에 대해 제조사가 SBOM을 작성하도록 요구합니다. CRACI는 새로운 취약점이 공개될 때마다 모니터링 중인 SBOM을 계속 재평가하고, 빌드와 리포지토리 전반의 발견 사항을 집계하며, VEX를 지원합니다. 공급업체에서 받은 SBOM도 자체 빌드와 함께 모니터링됩니다.
기록된 SBOM과 스캔된 SBOM 비교
직접 빌드하지 않은 소프트웨어에는 스캐너가 적합한 도구입니다. 자체 릴리스의 경우, 빌드를 기록하면 다음과 같은 점이 달라집니다. 스캐너는 잠금 파일이나 빌드 결과물을 읽고 무엇이 들어갔는지 추정합니다. CRACI는 빌드로 들어오는 트래픽을 직접 보기 때문에, 설치 훅, 빌드 스크립트, 베이스 이미지가 끌어오는 숨은 종속성까지 SBOM에 담깁니다.
| 기능 | CRACI | 스캐너 기반 SBOM 도구 |
|---|---|---|
| 구성 요소 목록 생성 방식 | 빌드 자체의 패키지 트래픽에서 기록 | 사후에 파일로부터 재구성 |
| 잠금 파일 또는 설치된 종속성 필요 여부 | 불필요 | 대개 둘 중 하나 필요 |
| CI 캐시에서 복원된 패키지 | 증거가 캐시와 함께 전달 | 스캔 시점에 파일이 있는 경우에만 |
| 작업별 완전성 상태 | 작업 및 캐시별 5가지 상태 | |
| 아티팩트와 빌드를 잇는 서명된 연결 | 서명된 출처 증명 미제공 | 별도 서명 단계 필요 |
| 직접 빌드하지 않은 소프트웨어 | 대신 공급업체의 SBOM 추가 | |
| CI 시스템 | 현재 GitHub Actions 지원, 기타 CI 시스템은 로드맵에 포함 | 모든 CI에서 실행 |
- 포함
- 일부 지원
- 미포함
- 로드맵에 포함
특정 도구를 비교하고 계신가요? Syft, Trivy, cdxgen, Microsoft SBOM Tool, Dependency-Track 등은 SBOM 도구 비교를 참조하세요. 더 넓은 관점은 소프트웨어 공급망 보안 도구 비교에서 확인할 수 있습니다. 여러 팀에 SBOM을 도입하나요? 엔지니어링 팀 전반의 SBOM 생성을 참고하세요.
SBOM basics: SPDX, CycloneDX and OpenVEX
SBOM이 기록하는 내용, SPDX와 CycloneDX 형식이 실제로 어떻게 다른지, 그리고 취약점이 실제로 제품에 영향을 주는지에 대해 OpenVEX가 더하는 정보를 설명합니다.
Kubernetes Community Days Helsinki 2026의 Petteri Pulkkinen 및 Erika Marttinen, SBOMbastic: Getting Ready for Upcoming EU Cybersecurity Regulation in Software Supply Chains 중 16:50~22:05.
SBOM 생성: 자주 묻는 질문
SBOM 생성이란 무엇인가요?
SBOM 생성은 소프트웨어 자재 명세서, 즉 소프트웨어를 구성하는 구성 요소와 종속성을 기계가 읽을 수 있는 형태로 정리한 목록을 만드는 일입니다. 소스 파일에서 만들 수도 있고, 빌드 중에 만들 수도 있으며, 컨테이너 이미지 같은 완성된 아티팩트를 분석해 만들 수도 있습니다. CRACI는 빌드가 실제로 가져온 것을 바탕으로 빌드 중에 SBOM을 생성합니다.
CRACI는 SBOM을 어떻게 생성하나요?
GitHub Actions 작업이 CRACI 러너에서 실행됩니다. 각 작업이 실행되는 동안 패키지를 인식하는 프록시가 패키지 소스로 향하는 트래픽을 관찰하고, 작업이 가져온 패키지를 전이적 종속성과 CI 캐시에서 복원된 패키지까지 포함해 기록합니다. 각 작업은 완전성 상태가 표시된 자체 SBOM을 갖습니다.
워크플로를 변경해야 하나요?
runs-on을 craci로 바꾸기만 하면 됩니다. CRACI는 GitHub Actions가 아니라 러너를 대체하므로, 워크플로와 그 실행 내역은 GitHub에 그대로 남습니다.
CRACI는 어떤 패키지 생태계를 기록하나요?
npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk, Git 소스와 Yocto 및 OpenEmbedded 다운로드 프리셋을 기록합니다. JFrog Artifactory의 npm 및 PyPI 미러는 알려진 소스로 취급합니다. Maven 및 Java 지원은 로드맵에 있습니다.
어떤 SBOM 형식으로 내보낼 수 있나요?
CycloneDX와 SPDX로 내보낼 수 있으며, 전이적 종속성과 각 구성 요소의 선언된 라이선스가 포함됩니다.
완전성 상태는 무엇을 의미하나요?
Complete는 CRACI가 작업의 증거를 완전하게 관찰했고 복원된 모든 캐시도 완전했다는 뜻입니다. Complete with connections는 작업이 검토가 필요한 사용자 지정 네트워크 연결도 사용했다는 뜻입니다. Incomplete는 종속성이 누락될 수 있는 조건이 있었다는 뜻입니다. Unavailable은 증거를 평가할 수 없었다는 뜻이며, Not recorded는 완전성 보고 기능이 도입되기 전의 작업이라는 뜻입니다. SBOM 완전성도 참고하세요.
CRACI는 SBOM에서 취약점을 찾아내나요?
네. CRACI는 새로운 취약점이 공개될 때마다 모니터링 중인 SBOM을 계속 재평가하고, 빌드와 리포지토리 전반의 발견 사항을 집계하며, VEX를 지원합니다. 보안팀은 발견된 내용을 분류해 수정을 담당하는 팀에 전달합니다.
직접 빌드하지 않은 소프트웨어의 SBOM도 CRACI로 생성할 수 있나요?
아니요. CRACI는 CRACI 러너에서 실행되는 빌드를 기록합니다. 구매한 소프트웨어는 공급업체의 SBOM을 추가하면 CRACI가 자체 빌드와 함께 모니터링합니다. 직접 빌드하지 않은 서드파티 이미지에는 스캐너가 현실적인 선택입니다. SBOM 도구 비교를 참조하세요.