SBOM-generering, registrerad under bygget
CRACI är ett verktyg för SBOM-generering som registrerar vad varje GitHub Actions-bygge faktiskt hämtade, i stället för att skanna filer i efterhand. Varje SBOM anger hur komplett den är.
Kort sagt: kör dina GitHub Actions-jobb på CRACI-runners så får varje jobb en SBOM över paketen det hämtade, inklusive transitiva beroenden och paket som återställs från CI-cachar, exporterad i CycloneDX eller SPDX. Varje SBOM har en fullständighetsstatus och bevakas för nya sårbarheter efter release. Skanningsverktyg som Syft och Trivy rekonstruerar en SBOM från filer; CRACI registrerar den från bygget. Varför SBOM:er från bygget skiljer sig.
Registrerad under bygget, inte skannad i efterhand
De flesta SBOM-generatorer läser filer efter bygget och rekonstruerar vad de tror att det innehöll. CRACI genererar SBOM:en i sin egen CI-runner. En paketmedveten proxy bevakar varje jobbs trafik till paketkällorna, så SBOM:en listar vad jobbet faktiskt hämtade, transitiva beroenden inräknade, i stället för vad ett manifest säger att det borde behöva. Det krävs ingen lockfile, inga installerade beroenden och inget extra skanningssteg för att registreringen ska finnas.
Transitiva beroenden i alla led
Det mesta ett bygge hämtar är inga direkta beroenden. Det är beroenden till beroenden, flera led ner, och en del av det syns aldrig i någon lockfile: förkompilerade binärer som ett byggskript laddar ner, paket som återställs från en cache, operativsystemspaket. CRACI registrerar varje paket som jobbet hämtade, i alla led, så att sårbarheter matchas mot hela beroendeträdet. I direkta jämförelser med andra SBOM-verktyg har den mer kompletta registreringen hittat sårbarheter som de andra verktygen inte rapporterade.
Paket som återställs från CI-cachar stannar i SBOM:en
Det är i cachar som registrering under bygget brukar fallera: ett paket som återställs från en cache når aldrig något register, så en proxy ensam skulle missa det. CRACI låter beroendebevisen följa med cachen, så paket som återställs från en CI-cache stannar i SBOM:en för det jobb som återställde dem.
En fullständighetsstatus för varje jobb
Sårbarhetsbevakning kan bara matcha de komponenter som din SBOM listar. Ett paket som saknas i SBOM:en är en sårbarhet som ingen får någon varning om. I stället för att presentera varje SBOM som komplett anger CRACI fullständigheten för varje jobb och varje cache: Complete, Complete with connections, Incomplete, Unavailable eller Not recorded. Du vet vilka SBOM:er du kan lita på och vilka som behöver granskas närmare.
De ekosystem och format du levererar
CRACI registrerar paket från npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk och Git-källor, plus nedladdningsförinställningar för Yocto och OpenEmbedded, och behandlar JFrog Artifactory-speglar för npm och PyPI som kända källor. Stöd för Maven och Java finns på roadmapen. SBOM:er exporteras i CycloneDX och SPDX, transitiva beroenden inräknade, redo att delas med kunder, partner och revisorer.
Deklarerade licenser för varje komponent
Varje registrerat paket tar med sin deklarerade licens in i SBOM:en. Du ser vilka beroenden som har en kommersiell eller på annat sätt restriktiv licens innan du levererar, och copyleft-licenser upptäcks innan de hamnar i din produkt.
Proveniens via API:t
SBOM:en är en del av det som CRACI registrerar för varje jobb. Det publika REST API:t returnerar SBOM:er, nätverksspårningar och proveniens, allt registrerat från samma bygge.
Bevakad efter release
En SBOM är hur ett företag vet vad som finns i programvaran det levererar, och kunder och tillsynsmyndigheter efterfrågar allt oftare en. Cyber Resilience Act kräver att tillverkare tar fram en för produkter som säljs i EU. CRACI omvärderar bevakade SBOM:er löpande när nya sårbarheter publiceras, sammanställer fynd över byggen och repon och har stöd för VEX. De SBOM:er du samlar in från dina egna leverantörer bevakas tillsammans med dina byggen.
En registrerad SBOM bredvid en skannad
Skannrar är rätt verktyg för programvara du inte har byggt. För dina egna releaser är det här vad registreringen av bygget förändrar. En skanner läser lockfilen eller byggresultatet och räknar ut vad som ingick. CRACI ser trafiken som kommer in i bygget, så de dolda beroenden som installationshookar, byggskript och basavbilder drar in hamnar också i SBOM:en.
| Funktion | CRACI | Skannerbaserat SBOM-verktyg |
|---|---|---|
| Hur komponentlistan tas fram | Registreras från byggets egen pakettrafik | Rekonstrueras från filer i efterhand |
| Kräver en lockfile eller installerade beroenden | Nej | Oftast det ena eller det andra |
| Paket som återställs från CI-cachar | Bevisen följer med cachen | Bara om filerna finns där vid skanningen |
| Fullständighetsstatus per jobb | Fem statusar, per jobb och per cache | |
| Signerad koppling från artefakt till bygge | Ingen signerad proveniens | Med ett separat signeringssteg |
| Programvara du inte har byggt | Lägg till leverantörens SBOM i stället | |
| CI-system | GitHub Actions i dag; andra CI-system på roadmapen | Körs i vilken CI som helst |
- Ingår
- Delvis
- Ingår inte
- På roadmapen
Jämför du specifika verktyg? Se SBOM-verktyg i jämförelse för Syft, Trivy, cdxgen, Microsoft SBOM Tool, Dependency-Track med flera. För den större bilden, se verktyg för säkerhet i leveranskedjan i jämförelse.
SBOM basics: SPDX, CycloneDX and OpenVEX
Vad en SBOM registrerar, hur formaten SPDX och CycloneDX skiljer sig åt i praktiken och vad OpenVEX tillför om huruvida en sårbarhet faktiskt påverkar en produkt.
Petteri Pulkkinen och Erika Marttinen på Kubernetes Community Days Helsinki 2026, 16:50 till 22:05 av SBOMbastic: Getting Ready for Upcoming EU Cybersecurity Regulation in Software Supply Chains.
SBOM-generering: vanliga frågor
Vad är SBOM-generering?
SBOM-generering innebär att ta fram en software bill of materials, en programvaruförteckning: en maskinläsbar lista över komponenterna och beroendena i en programvara. Det kan göras från källfiler, under bygget eller genom att analysera en färdig artefakt som en containeravbild. CRACI genererar SBOM:en under bygget, utifrån vad bygget faktiskt hämtade.
Hur genererar CRACI en SBOM?
Dina GitHub Actions-jobb körs på CRACI-runners. Medan varje jobb körs bevakar en paketmedveten proxy dess trafik till paketkällorna och registrerar paketen det hämtar, inklusive transitiva beroenden och paket som återställs från CI-cachar. Varje jobb får en egen SBOM med en fullständighetsstatus.
Måste jag ändra mina arbetsflöden?
Du ändrar runs-on till craci. CRACI ersätter runnern, inte GitHub Actions, så dina arbetsflöden och deras körningar stannar i GitHub.
Vilka paketekosystem registrerar CRACI?
npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk och Git-källor, plus nedladdningsförinställningar för Yocto och OpenEmbedded. JFrog Artifactory-speglar för npm och PyPI behandlas som kända källor. Stöd för Maven och Java finns på roadmapen.
Vilka SBOM-format kan jag exportera?
CycloneDX och SPDX, inklusive transitiva beroenden och varje komponents deklarerade licens.
Vad betyder fullständighetsstatusen?
Complete betyder att CRACI observerade fullständiga bevis för jobbet och att varje återställd cache var komplett. Complete with connections betyder att jobbet dessutom använde egna nätverksanslutningar som är värda att granska. Incomplete betyder att något förhållande kan ha lämnat beroenden utanför. Unavailable betyder att bevisen inte kunde utvärderas, och Not recorded betyder att jobbet är äldre än fullständighetsrapporteringen.
Hittar CRACI sårbarheter i SBOM:en?
Ja. CRACI omvärderar bevakade SBOM:er löpande när nya sårbarheter publiceras, sammanställer fynd över byggen och repon och har stöd för VEX. Säkerhetsteamen triagerar fynden och skickar dem vidare till de team som äger åtgärden.
Kan CRACI generera en SBOM för programvara jag inte har byggt?
Nej. CRACI registrerar de byggen som körs på dess runners. För programvara du köper in lägger du till leverantörens SBOM, och CRACI bevakar den tillsammans med dina egna byggen. För en tredjepartsavbild som du inte har byggt är en skanner det praktiska valet; se SBOM-verktyg i jämförelse.
Se SBOM:en för ditt eget bygge
Boka en demo, kör ett av dina GitHub Actions-arbetsflöden på CRACI och se vad det faktiskt hämtade
Boka en demo