# SBOMのエクスポート

Aikidoでは、**SBOM（Software Bill of Materials）**と**VEX（Vulnerability Exploitability eXchange）**の両方のファイルをエクスポートできます。これらのエクスポートにより、ソフトウェアコンポーネント（オープンソースコンポーネントを含む）を可視化し、実際に修正が必要なものの優先順位付けに役立てることができます。

**ユースケース：**

* **SBOMエクスポート**（CycloneDX 1.6、SPDX-2.3、またはCSV）
  * M&A、調達、監査（例：ISO 27001、SOC2）の際にサードパーティと共有する。
  * Cyber Resilience Act（CRA）、Medical Device Regulation（MDR）、Executive Order 14028などの規制へのコンプライアンス対応。
  * サードパーティのリスク管理ツールや調達ツールに取り込む。
* **VEXエクスポート**（CycloneDXのみ）
  * どの脆弱性が**悪用可能**で、どの脆弱性が**該当しない**かを明確に示す。
  * デューデリジェンスの証明。VEXは、既知の脆弱性を積極的に管理していることをサードパーティに証明します。

## SBOMの場所 <a href="#where-to-find-the-sbom" id="where-to-find-the-sbom"></a>

**ステップ1.** Reports > [Licenses & SBOM](https://app.aikido.dev/licenses) に移動します

**ステップ2.** 右上のアクションからSPDX、CycloneDX、またはCSV形式のSBOMをダウンロードします

![フィルターとSBOMダウンロードオプションを備えたPythonパッケージのライセンスリスク概要。](https://help.aikidogov.us/_assets/3d23e10c811f/ucarecdn-74772dd0-d436-4829-9063-800bb19bb697.png)

**オプション.** さまざまなパラメーターでライセンスをフィルタリングしてからSBOMをエクスポートできます。エクスポートには選択したフィルター値が反映されます。

![ライセンス、言語、リスク、コンテナのオプションでリポジトリを検索するためのフィルターメニュー。](https://help.aikidogov.us/_assets/6f8dcfa61a32/ucarecdn-f7c910f2-edc1-4859-a464-b0155cc6d093.png)

チームでフィルタリングしたい場合は、ページ上部のTeam Filterを変更することで行えます。

![Licenses & SBOMレポートを表示するためのチーム選択ドロップダウン。](https://help.aikidogov.us/_assets/aa028dfae37d/ucarecdn-156d14a3-4155-4ba9-bc53-1f4dff0152b5.png)

> マルチブランチスキャンを有効にしている場合、ドロップダウンで特定のブランチリポジトリを選択することで、ブランチごとに異なるSBOMを取得できます。詳細については、アプリ内チャットでお問い合わせください。

### API経由での生成とエクスポート <a href="#generate-and-export-via-api" id="generate-and-export-via-api"></a>

[Export SBOM API](https://apidocs.aikido.dev/reference/exportcoderepolicenses)を使用して、SBOMを生成・ダウンロードできます。

# 自己生成したSBOMの監視

BuildrootやYoctoなどのツールで構築された組み込みシステムでは、ビルド時にSBOMを生成できます。これらのシステムには標準的なコンテナレジストリがないことが多いため、自己生成したSBOMをAPI経由でAikidoにアップロードし、サプライチェーンセキュリティとライセンスコンプライアンスを監視できます。

## Buildroot / YoctoによるSBOMの生成

{% tabs %}
{% tab title="Buildroot" %}

Buildrootは、組み込みの[generate-cyclonedx](https://buildroot.org/downloads/manual/manual.html#_generating_cyclonedx_sbom)ユーティリティを使用してCycloneDX SBOMを生成します。このユーティリティは`make show-info`の出力を利用します。

{% stepper %}
{% step %}

### SBOMを生成する

次のコマンドを実行します：

```bash
make show-info | utils/generate-cyclonedx > sbom.cdx.json
```

これにより、組み込みLinuxシステム内のすべてのパッケージを、バージョン、ライセンス、ソース情報とともに一覧にした単一のCycloneDX JSONファイルが生成されます。

{% endstep %}
{% endstepper %}
{% endtab %}

{% tab title="Yocto SPDX 2.2エンジン" %}

## YoctoのSPDX 2.2エンジンの使用

Yoctoは`create-spdx`クラスを通じてネイティブなSPDX 2.2 SBOM生成機能を提供しています。この機能はYocto 3.4（Honister）以降で安定しており、デフォルトで有効になっています。

{% stepper %}
{% step %}

### YoctoのSPDX 2.2エンジンを設定する

`conf/local.conf`に以下を追加し、すべてのレシピに対してSPDX 2.2ドキュメントを生成するようYoctoに指示します：

```
INHERIT += "create-spdx"
```

{% hint style="warning" %}
Yoctoのオプション[SPDX_INCLUDE_SOURCES](https://docs.yoctoproject.org/dev/ref-manual/variables.html#term-SPDX_INCLUDE_SOURCES)は、SBOMのサイズを不必要に増大させるため、無効にすることをお勧めします。
{% endhint %}

{% endstep %}
{% step %}

### イメージをビルドする

通常のBitBakeビルドを実行します：

```bash
bitbake <your-image-name>
```

ビルドが成功すると、SPDXファイルは次の場所に書き込まれます：

```
tmp/deploy/spdx/<MACHINE>/
```

トップレベルのイメージドキュメント（例：`<IMAGE>-<MACHINE>.spdx.json`）は、同じディレクトリ内のパッケージごとのSPDXドキュメントにリンクしています。Aikidoにアップロードする前に、パッケージごとのSPDXファイルを単一のSPDXファイルにマージすることをお勧めします。

{% endstep %}
{% step %}

### 単一のSBOMにマージする

Yoctoは複数の`*.spdx.json`ファイル（レシピごとに1つ）を生成するため、それらを手動で1つのSBOMファイルにマージする必要があります。これは[SPDXMergeTool](https://github.com/philips-software/SPDXMerge)または[sbomasm - assemble](https://github.com/interlynk-io/sbomasm/blob/main/docs/assemble.md#merge-algorithms)を使用して簡単に行えます。

{% endstep %}
{% endstepper %}
{% endtab %}
{% endtabs %}

## SBOMをAikidoにアップロードする

[Upload Container SBOM API](https://apidocs.aikido.dev/reference/uploadcontainersbom)を使用して、生成したファイルをプッシュします。
APIキーの取得方法と使用方法の詳細については、[APIの認証に関するドキュメント](https://apidocs.aikido.dev/reference/authorization)を参照してください。

```bash
#Prevents word splitting of the JSON file
SBOM=$(cat /path/to/sbom.spdx.json)

# Accepts both CycloneDX and SPDX in JSON formats
curl -X POST "https://app.aikido.dev/api/public/v1/containers/sbom" \
  -H "accept: application/json" \
  -H "Authorization: Bearer $AIKIDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"sbom\": $SBOM, \"container_image_name\": \"$YOUR_CONTAINER_NAME\"}"
```

Aikidoは、アップロードされたSBOMをレジストリ*Self-reported SBOM*として**Containers**の下に一覧表示し、脆弱性とライセンスリスクの**スキャンを自動的に開始**します。
