SBOM-generointi, tallennettu buildin aikana
CRACI on SBOM-generointityökalu, joka tallentaa, mitä kukin GitHub Actions -buildi todella toi mukanaan, sen sijaan että se skannaisi tiedostoja jälkikäteen. Jokainen SBOM kertoo, kuinka kattava se on.
Lyhyesti: aja GitHub Actions -jobisi CRACI-runnereilla, niin jokainen jobi saa SBOM:n hakemistaan paketeista, transitiiviset riippuvuudet ja CI-välimuisteista palautetut paketit mukaan lukien, CycloneDX- tai SPDX-muodossa. Jokaisella SBOM:lla on kattavuustila, ja sitä valvotaan uusien haavoittuvuuksien varalta julkaisun jälkeen. Skannaustyökalut, kuten Syft ja Trivy, päättelevät SBOM:n tiedostoista; CRACI tallentaa sen buildista. Miksi buildin aikana tallennetut SBOM:t eroavat.
Tallennettu buildin aikana, ei skannattu jälkikäteen
Useimmat SBOM-generaattorit lukevat tiedostoja buildin jälkeen ja päättelevät, mitä buildiin luultavasti meni. CRACI generoi SBOM:n omassa CI-runnerissaan. Paketit tunnistava välityspalvelin (proxy) seuraa jokaisen jobin liikennettä pakettilähteisiin, joten SBOM luettelee sen, mitä jobi todella haki, transitiiviset riippuvuudet mukaan lukien, eikä sitä, mitä manifestin mukaan pitäisi tarvita. Tallenne syntyy ilman lukitustiedostoa (lockfile), asennettua riippuvuuspuuta tai erillistä skannausvaihetta.
Transitiiviset riippuvuudet joka tasolla
Suurin osa siitä, mitä buildi tuo mukanaan, ei ole suoria riippuvuuksia. Ne ovat riippuvuuksien riippuvuuksia monen tason syvyydessä, eikä osa niistä näy lukitustiedostossa lainkaan: build-skriptin lataamat valmiiksi käännetyt binäärit, välimuistista palautetut paketit, käyttöjärjestelmän paketit. CRACI tallentaa jokaisen paketin, jonka jobi haki, joka tasolla, joten haavoittuvuuksia verrataan koko riippuvuuspuuhun. Rinnakkaisvertailuissa muiden SBOM-työkalujen kanssa tämä kattavampi tallenne on tuonut esiin haavoittuvuuksia, joita muut työkalut eivät raportoineet.
CI-välimuisteista palautetut paketit pysyvät SBOM:ssa
Välimuistit ovat kohta, jossa buildin aikainen tallennus yleensä pettää: välimuistista palautettu paketti ei koskaan käy rekisterissä, joten pelkkä välityspalvelin ei näkisi sitä. CRACI kuljettaa riippuvuustiedot välimuistin mukana, joten CI-välimuistista palautetut paketit pysyvät sen jobin SBOM:ssa, joka ne palautti.
Kattavuustila jokaiselle jobille
Haavoittuvuuksien seuranta voi verrata vain niitä komponentteja, jotka SBOM:si luettelee. SBOM:sta puuttuva paketti on haavoittuvuus, josta kukaan ei saa hälytystä. Siksi CRACI ei esitä jokaista SBOM:ia kattavana, vaan ilmoittaa kattavuuden jokaiselle jobille ja välimuistille: Complete, Complete with connections, Incomplete, Unavailable tai Not recorded. Tiedät, mihin SBOM:eihin voit luottaa ja mitkä kaipaavat tarkempaa katsomista.
Ekosysteemit ja formaatit, joita toimitat
CRACI tallentaa paketteja npm-, PyPI-, RubyGems-, Cargo-, Go-, Nix-, OCI-, apt-, apk- ja Git-lähteistä sekä Yocton ja OpenEmbeddedin latausesiasetuksista, ja käsittelee JFrog Artifactoryn npm- ja PyPI-peilejä tunnettuina lähteinä. Mavenin ja Javan tuki on tiekartalla. SBOM:t viedään CycloneDX- ja SPDX-muodossa transitiivisine riippuvuuksineen, valmiina jaettaviksi asiakkaille, kumppaneille ja auditoijille.
Ilmoitettu lisenssi jokaisella komponentilla
Jokainen tallennettu paketti tuo ilmoitetun lisenssinsä SBOM:iin. Näet ennen julkaisua, mitkä riippuvuudet ovat kaupallisen tai muuten rajoittavan lisenssin alaisia, ja copyleft-lisenssit huomataan ennen kuin ne päätyvät tuotteeseesi.
Alkuperätiedot API:n kautta
SBOM on yksi osa sitä, mitä CRACI tallentaa jokaisesta jobista. Julkinen REST-API palauttaa SBOM:t, verkkojäljet ja alkuperätiedot (provenance), jotka kaikki on tallennettu samasta buildista.
Valvonta julkaisun jälkeen
SBOM:n avulla yritys tietää, mitä sen toimittamassa ohjelmistossa on, ja asiakkaat ja viranomaiset pyytävät sitä yhä useammin: EU:n kyberkestävyyssäädös (Cyber Resilience Act, CRA) velvoittaa valmistajat laatimaan sellaisen EU:ssa myytäville tuotteille. CRACI arvioi valvotut SBOM:t uudelleen aina, kun uusia haavoittuvuuksia julkaistaan, kokoaa löydökset kaikista buildeista ja repositorioista ja tukee VEX:iä. Omilta toimittajiltasi keräämiäsi SBOM:eja valvotaan buildiesi rinnalla.
Tallennettu SBOM skannatun rinnalla
Skannerit ovat oikea työkalu ohjelmistoille, joita et itse buildannut. Omissa julkaisuissasi buildin tallentaminen muuttaa tämän. Skanneri lukee lukitustiedoston tai buildin tuotoksen ja päättelee, mitä buildiin meni. CRACI näkee buildiin tulevan liikenteen, joten myös asennuskoukkujen, build-skriptien ja peruskuvien tuomat piilotetut riippuvuudet päätyvät SBOM:iin.
| Ominaisuus | CRACI | Skanneripohjainen SBOM-työkalu |
|---|---|---|
| Miten komponenttiluettelo syntyy | Tallennetaan buildin omasta pakettiliikenteestä | Päätellään tiedostoista jälkikäteen |
| Vaatii lukitustiedoston tai asennetut riippuvuudet | Ei | Yleensä jommankumman |
| CI-välimuisteista palautetut paketit | Näyttö kulkee välimuistin mukana | Vain jos tiedostot ovat paikalla skannatessa |
| Kattavuustila jobikohtaisesti | Viisi tilaa, jobi- ja välimuistikohtaisesti | |
| Allekirjoitettu linkki artefaktista buildiin | Ei allekirjoitettuja alkuperätietoja | Erillisellä allekirjoitusvaiheella |
| Ohjelmistot, joita et itse buildannut | Lisää toimittajan SBOM sen sijaan | |
| CI-järjestelmät | GitHub Actions nyt; muut CI-järjestelmät tiekartalla | Toimii missä tahansa CI:ssä |
- Sisältyy
- Osittain
- Ei sisälly
- Tiekartalla
Vertailetko tiettyjä työkaluja? Katso SBOM-työkalut vertailussa: Syft, Trivy, cdxgen, Microsoft SBOM Tool, Dependency-Track ja muut. Laajemman kuvan saat sivulta ohjelmistotoimitusketjun tietoturvatyökalut vertailussa. Otatko SBOM:t käyttöön monessa tiimissä? Katso SBOM-generointi kehitystiimeissä.
SBOM basics: SPDX, CycloneDX and OpenVEX
Mitä SBOM kirjaa, miten SPDX- ja CycloneDX-formaatit eroavat käytännössä ja mitä OpenVEX lisää tietoon siitä, vaikuttaako haavoittuvuus tuotteeseen todella.
Petteri Pulkkinen ja Erika Marttinen, Kubernetes Community Days Helsinki 2026, 16:50–22:05 videosta SBOMbastic: Getting Ready for Upcoming EU Cybersecurity Regulation in Software Supply Chains.
SBOM-generointi: usein kysytyt kysymykset
Mitä SBOM-generointi on?
SBOM-generointi tarkoittaa ohjelmistojen materiaaliluettelon (SBOM) tuottamista: koneluettavaa luetteloa ohjelmiston komponenteista ja riippuvuuksista. Sen voi tehdä lähdekooditiedostoista, buildin aikana tai analysoimalla valmiin artefaktin, kuten konttikuvan. CRACI generoi SBOM:n buildin aikana sen perusteella, mitä buildi todella haki.
Miten CRACI generoi SBOM:n?
GitHub Actions -jobisi ajetaan CRACI-runnereilla. Jokaisen jobin aikana paketit tunnistava välityspalvelin seuraa sen liikennettä pakettilähteisiin ja tallentaa paketit, jotka jobi tuo mukanaan, myös transitiiviset riippuvuudet ja CI-välimuisteista palautetut paketit. Jokainen jobi saa oman SBOM:nsa ja kattavuustilan.
Pitääkö työnkulkujani muuttaa?
Vaihdat runs-on-arvoksi craci. CRACI korvaa runnerin, ei GitHub Actionsia, joten työnkulkusi ja niiden ajot pysyvät GitHubissa.
Mitä pakettiekosysteemejä CRACI tallentaa?
npm-, PyPI-, RubyGems-, Cargo-, Go-, Nix-, OCI-, apt-, apk- ja Git-lähteet sekä Yocton ja OpenEmbeddedin latausesiasetukset. JFrog Artifactoryn npm- ja PyPI-peilejä käsitellään tunnettuina lähteinä. Mavenin ja Javan tuki on tiekartalla.
Missä SBOM-formaateissa voin viedä?
CycloneDX ja SPDX, mukana transitiiviset riippuvuudet ja kunkin komponentin ilmoitettu lisenssi.
Mitä kattavuustila tarkoittaa?
Complete tarkoittaa, että CRACI havaitsi jobista kattavan näytön ja jokainen palautettu välimuisti oli kattava. Complete with connections tarkoittaa, että jobi käytti lisäksi mukautettuja verkkoyhteyksiä, jotka kannattaa tarkistaa. Incomplete tarkoittaa, että jokin tilanne on voinut jättää riippuvuuksia pois. Unavailable tarkoittaa, ettei näyttöä voitu arvioida, ja Not recorded, että jobi on vanhempi kuin kattavuusraportointi. Katso SBOM:n kattavuus.
Löytääkö CRACI haavoittuvuuksia SBOM:sta?
Kyllä. CRACI arvioi valvotut SBOM:t uudelleen aina, kun uusia haavoittuvuuksia julkaistaan, kokoaa löydökset kaikista buildeista ja repositorioista ja tukee VEX:iä. Tietoturvatiimit luokittelevat ja priorisoivat (triage) löydökset ja ohjaavat ne korjauksesta vastaaville tiimeille.
Voiko CRACI generoida SBOM:n ohjelmistolle, jota en itse buildannut?
Ei. CRACI tallentaa buildit, jotka ajetaan sen runnereilla. Ostamillesi ohjelmistoille lisää toimittajan SBOM, niin CRACI valvoo sitä omien buildiesi rinnalla. Kolmannen osapuolen konttikuvalle, jota et buildannut, skanneri on käytännöllinen valinta; katso SBOM-työkalut vertailussa.
Katso oman buildisi SBOM
Varaa demo, aja yksi GitHub Actions -työnkuluistasi CRACI:ssa ja näe, mitä se todella toi mukanaan
Varaa demo