2026年に報告されたCVEは、1日あたり前年比131%増加しています。

ビルド中に記録するSBOM生成

CRACIは、ビルド後にファイルをスキャンするのではなく、GitHub Actionsの各ビルドが実際に取り込んだものを記録するSBOM生成ツールです。すべてのSBOMが、自らの完全性を示します。

概要:GitHub ActionsのジョブをCRACIのランナーで実行すると、各ジョブに、取得したパッケージのSBOMが作成されます。推移的依存関係やCIキャッシュから復元されたパッケージも含まれ、CycloneDXまたはSPDXでエクスポートできます。各SBOMには完全性の状態が付与され、リリース後も新たな脆弱性が監視されます。SyftやTrivyなどのスキャンツールはファイルからSBOMを再構成しますが、CRACIはビルドから記録します。ビルド時SBOMが異なる理由。

ビルド後のスキャンではなく、ビルド中に記録

多くのSBOM生成ツールは、ビルド後にファイルを読み取り、何が含まれたかを推測して再構成します。CRACIは独自のCIランナー内でSBOMを生成します。パッケージを認識するプロキシが各ジョブからパッケージソースへの通信を監視するため、SBOMにはマニフェスト上で必要とされるものではなく、ジョブが実際に取り込んだもの(推移的依存関係を含む)が記載されます。記録を残すために、ロックファイルも、インストール済みの依存関係ツリーも、追加のスキャン工程も必要ありません。

Recorded during the build, not scanned afterwards A scanner reads a lockfile or manifest after the fact and reconstructs what it thinks went in. CRACI observes the job's traffic to package sources while the build runs, including packages restored from CI caches, so the SBOM lists what the job actually pulled in. A scanner, after the build Lockfile Scanner SBOM Reconstructs what it thinks went in, from the files it can read Nothing tells you what it missed CRACI, during the build Job fetches Proxy records Job SBOM Lists what the job actually pulled in, including packages restored from CI caches Completeness stated for every job

推移的依存関係をすべての階層まで

ビルドが取り込むものの大半は、直接の依存関係ではありません。何階層も下にある「依存関係の依存関係」であり、その一部はロックファイルにまったく現れません。ビルドスクリプトがダウンロードするビルド済みバイナリ、キャッシュから復元されたパッケージ、OSパッケージなどです。CRACIはジョブが取得したすべてのパッケージをあらゆる階層で記録するため、依存関係ツリー全体に対して脆弱性を照合できます。他のSBOMツールとの比較では、このより完全な記録によって、他のツールが報告しなかった脆弱性が見つかっています。

Every layer of transitive dependencies A dependency tree three layers deep. The app depends directly on express, pg and a build script. Express pulls in body-parser and router, which pull in raw-body and path-to-regexp; pg pulls in pg-protocol. The build script fetches a prebuilt library during the build, which bundles a native codec that matches a vulnerability advisory. A lockfile scanner sees the packages the lockfile lists; CRACI records every package the job fetched, at every depth, including the ones only the build pulls in. Your app Direct Layer 2 Layer 3 your-app express pg build script body-parser router pg-protocol prebuilt lib raw-body path-to-regexp native-codec advisory match In the lockfile and the build record Only in the build record: fetched while the job ran Matched an advisory, so it is tracked like any other

CIキャッシュから復元したパッケージもSBOMに残る

ビルド時の記録が途切れやすいのがキャッシュです。キャッシュから復元されたパッケージはレジストリにアクセスしないため、プロキシだけでは捕捉できません。CRACIは依存関係のエビデンスをキャッシュと一緒に引き継ぐため、CIキャッシュから復元されたパッケージも、それを復元したジョブのSBOMに残ります。

Packages restored from CI caches stay in the SBOM A first job fetches packages from a registry through CRACI's proxy and saves a cache. The dependency evidence travels with the cache, so when a later job restores it, those packages stay in that job's SBOM even though they never touched a registry. First run: cache miss npm registry Job 1 fetches Cache + evidence Packages recorded through the proxy Later run: cache hit Job 2 restores Cache + evidence No registry request, packages still recorded Job 2 SBOM express 5.2.1 (from cache) lodash 4.17.21 (from cache) Cache-restored packages stay in the SBOM

すべてのジョブに完全性の状態を表示

脆弱性トラッキングで照合できるのは、SBOMに記載されたコンポーネントだけです。SBOMから漏れたパッケージは、誰にも通知されない脆弱性になります。そこでCRACIは、すべてのSBOMを完全なものとして示すのではなく、ジョブとキャッシュごとに完全性を明示します。状態はComplete、Complete with connections、Incomplete、Unavailable、Not recordedのいずれかです。信頼できるSBOMと再確認が必要なSBOMを見分けられます。

A completeness state for every job Instead of presenting every SBOM as complete, CRACI states completeness for each job and each cache: Complete, Complete with connections, Incomplete, Unavailable or Not recorded. Workflow run: SBOM completeness Job Completeness build Complete test Complete with connections integration Incomplete docs Not recorded Why it matters Vulnerability tracking can only match listed components. A package missing from the SBOM is a vulnerability nobody is alerted about, so CRACI says when a list is partial.

出荷するエコシステムとフォーマットに対応

CRACIはnpm、PyPI、RubyGems、Cargo、Go、Nix、OCI、apt、apk、Gitの各ソースに加え、YoctoとOpenEmbeddedのダウンロードプリセットからパッケージを記録し、JFrog ArtifactoryのnpmとPyPIのミラーを既知のソースとして扱います。MavenとJavaへの対応はロードマップに掲載されています。SBOMは推移的依存関係を含めてCycloneDXとSPDXでエクスポートでき、そのまま顧客、パートナー、監査人と共有できます。

Ecosystems and formats CRACI records packages from npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk and Git sources, plus Yocto and OpenEmbedded download presets, and treats JFrog Artifactory npm and PyPI mirrors as known sources. Maven and Java are on the roadmap. SBOMs export as CycloneDX or SPDX. Recorded today npm PyPI RubyGems Cargo Go Nix OCI apt · apk Git sources, Yocto presets Artifactory npm, PyPI mirrors On the roadmap Maven and Java Export CycloneDX SPDX With transitive dependencies and declared licenses

すべてのコンポーネントに宣言ライセンスを付与

記録されたすべてのパッケージは、宣言されたライセンスをSBOMに引き継ぎます。商用ライセンスやその他の制限的なライセンスの依存関係を出荷前に確認でき、コピーレフトライセンスも製品に入り込む前に検出できます。

Declared licenses on every component Every recorded package carries its declared license into the SBOM, so restrictive and copyleft licenses show up before you ship. License policy rules can block a build on a license. Job SBOM: components and licenses Component Declared license express 5.2.1 MIT requests 2.32.3 Apache-2.0 serde 1.0.219 MIT OR Apache example-lib 1.4.0 GPL-3.0 copyleft License policy Build blocked: GPL-3.0 is not allowed Caught before it ends up in your product

APIで来歴を取得

SBOMは、CRACIが各ジョブについて記録する内容の一部です。公開REST APIから、同じビルドから記録されたSBOM、ネットワークトレース、来歴を取得できます。

Provenance data from every build Every job on CRACI records the packages it fetched and its network trace. The public REST API returns the job's SBOMs, network trace and provenance. Build release job on CRACI Recorded packages fetched network trace Provenance build data, via the API Ask the API about any job Job → SBOM, trace, provenance Returned by the API Job Packages CycloneDX SBOM Network trace Recorded on every CRACI job, no extra step

リリース後も監視

SBOMは、企業が出荷するソフトウェアの中身を把握するための手段であり、顧客や規制当局から提出を求められる機会も増えています。Cyber Resilience Actは、EUで販売される製品についてメーカーにSBOMの作成を義務付けています。CRACIは新たな脆弱性が公開されるたびに監視対象のSBOMを再評価し、ビルドとリポジトリをまたいで検出結果を集約し、VEXにも対応します。自社のベンダーから収集したSBOMも、自社のビルドと並べて監視されます。

Vulnerability tracking after release After a release ships, its SBOM stays monitored. When a new vulnerability is published, CRACI re-evaluates the monitored SBOMs, finds the affected releases, and the security team triages the finding and routes it to the team that owns the fix. The inventory view shows which software versions are deployed to which products. Release shipped SBOM monitored Later New advisory published Re-evaluated automatically Finding: critical, in 2 releases 1. Triage 2. Route to owner 3. Team fixes Policy gates can block a build on findings · VEX supported Inventory: deployed versions Product Version Web app v4.12.0 Mobile API v2.3.1

記録したSBOMとスキャンしたSBOMの比較

自社でビルドしていないソフトウェアには、スキャナーが適したツールです。自社のリリースについて、ビルドを記録することで何が変わるかを以下に示します。スキャナーはロックファイルや出力を読み取り、何が含まれたかを推定します。CRACIはビルドに入ってくる通信を把握するため、インストールフック、ビルドスクリプト、ベースイメージが取り込む隠れた依存関係もSBOMに記載されます。

How a scanned SBOM and a recorded SBOM are made Left, a scanner: it reads the lockfile after the build, which lists packages A to E, so its SBOM contains A to E. The build also fetched code through an install hook, a build script download and a base image, which are in no lockfile, so the scanned SBOM is missing them. Right, CRACI: it sees the traffic coming into the build, so all eight packages, including the three hidden dependencies, land in the recorded SBOM. Scanner reads files after the build package-lock.json A B C D E the build also fetched install hook download build script download base image layers in no lockfile, so the scan never sees them Scanned SBOM A B C D E missing missing missing CRACI sees the traffic into the build the network build job on CRACI every package that comes in Recorded SBOM A B C D E install hook build script base image hidden ones too
A scanner can only list what the lockfile or the output declares. CRACI sees what actually came into the build, including the hidden dependencies.
機能 CRACI スキャナー型SBOMツール
コンポーネント一覧の作成方法 ビルド自体のパッケージ通信から記録 事後にファイルから再構成
ロックファイルまたはインストール済み依存関係の要否 不要 通常はいずれかが必要
CIキャッシュから復元されたパッケージ エビデンスがキャッシュと一緒に引き継がれる スキャン時にファイルが存在する場合のみ
ジョブごとの完全性の状態 ジョブごと・キャッシュごとに5つの状態
成果物とビルドを結ぶ署名付きリンク 署名付きの来歴なし 別途署名ステップが必要
自社でビルドしていないソフトウェア 代わりにベンダーのSBOMを追加
CIシステム 現在はGitHub Actions、その他のCIシステムはロードマップに掲載 あらゆるCIで動作
  • 対応
  • 一部対応
  • 非対応
  • ロードマップに掲載

特定のツールを比較したい場合は、SBOMツールの比較で、Syft、Trivy、cdxgen、Microsoft SBOM Tool、Dependency-Trackなどをご覧ください。より広い視点では、ソフトウェアサプライチェーンセキュリティツールの比較をご覧ください。多くのチームに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ツールの比較をご覧ください。

自社のビルドのSBOMをご覧ください

デモをご予約いただき、GitHub Actionsのワークフローを1つCRACIで実行して、実際に何が取り込まれたかをご確認ください

デモを予約