ビルド中に記録するSBOM生成
CRACIは、ビルド後にファイルをスキャンするのではなく、GitHub Actionsの各ビルドが実際に取り込んだものを記録するSBOM生成ツールです。すべてのSBOMが、自らの完全性を示します。
概要:GitHub ActionsのジョブをCRACIのランナーで実行すると、各ジョブに、取得したパッケージのSBOMが作成されます。推移的依存関係やCIキャッシュから復元されたパッケージも含まれ、CycloneDXまたはSPDXでエクスポートできます。各SBOMには完全性の状態が付与され、リリース後も新たな脆弱性が監視されます。SyftやTrivyなどのスキャンツールはファイルからSBOMを再構成しますが、CRACIはビルドから記録します。ビルド時SBOMが異なる理由。
ビルド後のスキャンではなく、ビルド中に記録
多くのSBOM生成ツールは、ビルド後にファイルを読み取り、何が含まれたかを推測して再構成します。CRACIは独自のCIランナー内でSBOMを生成します。パッケージを認識するプロキシが各ジョブからパッケージソースへの通信を監視するため、SBOMにはマニフェスト上で必要とされるものではなく、ジョブが実際に取り込んだもの(推移的依存関係を含む)が記載されます。記録を残すために、ロックファイルも、インストール済みの依存関係ツリーも、追加のスキャン工程も必要ありません。
推移的依存関係をすべての階層まで
ビルドが取り込むものの大半は、直接の依存関係ではありません。何階層も下にある「依存関係の依存関係」であり、その一部はロックファイルにまったく現れません。ビルドスクリプトがダウンロードするビルド済みバイナリ、キャッシュから復元されたパッケージ、OSパッケージなどです。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は、企業が出荷するソフトウェアの中身を把握するための手段であり、顧客や規制当局から提出を求められる機会も増えています。Cyber Resilience Actは、EUで販売される製品についてメーカーにSBOMの作成を義務付けています。CRACIは新たな脆弱性が公開されるたびに監視対象のSBOMを再評価し、ビルドとリポジトリをまたいで検出結果を集約し、VEXにも対応します。自社のベンダーから収集したSBOMも、自社のビルドと並べて監視されます。
記録したSBOMとスキャンしたSBOMの比較
自社でビルドしていないソフトウェアには、スキャナーが適したツールです。自社のリリースについて、ビルドを記録することで何が変わるかを以下に示します。スキャナーはロックファイルや出力を読み取り、何が含まれたかを推定します。CRACIはビルドに入ってくる通信を把握するため、インストールフック、ビルドスクリプト、ベースイメージが取り込む隠れた依存関係もSBOMに記載されます。
| 機能 | 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ツールの比較をご覧ください。