SPDXとCycloneDX:SBOM形式の選択
Sytance · 更新日
SPDXとCycloneDXはいずれもソフトウェアコンポーネントとその関係を記述します。形式の選択は、受領者が必要とする情報と、そのツールが処理できるバージョンによって決まります。そのため、形式の合意にはバージョン、エンコーディング、必須フィールドの合意も含まれます。
受領者が必要とする情報
SBOMを製造業者に送るファームウェアサプライヤーと、脆弱性管理サービスに読み込ませるチームとでは、要件が異なる場合があります。受領側がサポートするバージョンとエンコーディングによって、処理できるファイルが決まります。代表的なファイルを使って、そのサポート状況を確認してください。
製品識別情報、コンポーネント識別子、関係、ライセンス、脆弱性または来歴に関するデータなど、必要な情報を文書化してください。受信側が形式の一部しかサポートしない場合は、省略されるフィールドが情報交換の目的に影響するか確認します。
仕様バージョンとツールの対応状況
SPDX 2.3とSPDX 3.0.1は、別々に公開された仕様です。SPDX 3.0.1では、ソフトウェアSBOMクラスなどのプロファイルを含むモデルが使われています。SPDX 2.3 JSONを受け付けるコンシューマーが、3.xの文書も受け付けると想定してはいけません。
CycloneDXの仕様概要にはバージョン1.7が記載されています。そのオブジェクトモデルは、コンポーネント、サービス、依存関係、脆弱性情報を含みます。生成側が新しい仕様をサポートしていても、下流のインポーターは以前のバージョンしかサポートしない場合があります。
| 情報交換の詳細 | SPDXの例 | CycloneDXの例 |
|---|---|---|
| バージョン | 2.3または3.0.1 | 1.7 |
| 文書の識別情報 | バージョン固有の文書モデル | シリアル番号とBOMバージョン |
| 依存関係 | 型付きの関係 | 依存関係グラフ |
| 検証 | 選択したバージョンの規則 | 選択したバージョンのスキーマ |
関係とライセンスのフィールド
SPDX 2.3では、CONTAINSは包含を、DEPENDS_ONは依存関係を表します。あるパッケージがアーカイブに含まれることと、別のパッケージのビルド時または実行時に必要であることは異なります。インポート時には、関係の種類と方向を維持してください。
SPDX 2.3は、申告されたライセンスと確定されたライセンスも区別します。サプライヤーの申告と分析担当者の結論が、暗黙のうちに同じフィールドにまとめられてはいけません。レビューでこの区別が重要な場合、受領側のツールはその違いを保持する必要があります。
CycloneDXでは、選択したバージョンの依存関係グラフとコンポーネント参照を確認してください。変換後もフラットなコンポーネント一覧は読み取れるかもしれませんが、どの製品がそのコンポーネントを使用しているかを調査するための経路が失われる場合があります。
変換された情報の確認
小さなテストファイルを使うと、変換によって失われた情報を発見できます。製品、直接依存関係、間接依存関係を含めてください。同一コンポーネントの異なる2つのバージョン、ライセンス式、明示的に不明とされたフィールドを加えると、単にファイルを受け付けるかどうか以上の確認ができます。
- 宣言された仕様バージョンに照らして元ファイルを検証する。
- 受領側のツールにインポートし、対象製品を確認する。
- コンポーネントの識別情報、バージョン、関係の方向を比較する。
- ライセンスフィールドと、不明な情報の表現を確認する。
- サポートされていれば再度エクスポートし、ファイルの書式ではなく意味を比較する。
納品形式の選択
顧客がSPDX 2.3を要求する場合は、合意したフィールドを含むそのバージョンを納品し、変換によって他のデータが失われるなら、より豊富な元の記録も保持してください。受領側のワークフローがすでにCycloneDXを取り込み、必要なグラフ情報を保持できる場合は、サポートされているCycloneDXバージョンを使用します。
顧客が両方の形式を必要とする場合は、形式間のフィールドマッピングを維持して検証してください。変換によって失われる情報や拡張機能に移される情報を文書化します。変換では、対象仕様に従ってデータを変換する必要があります。
インポート後、受領者が意図したとおりに情報を利用できるか確認してください。脆弱性分析では、コンポーネントから、それを使用する製品やリリースを特定できることが含まれます。