「trivy image --format cyclonedx」コマンドでSBOMを生成しよう!
ソフトウェア開発では、使っているライブラリやツールの管理がますます重要になっています。特にセキュリティ対策として「このアプリにどんな部品が使われているか?」を正確に把握することは避けて通れません。
そんな時に役立つのが、trivy image --format cyclonedx コマンドです。これは、Dockerイメージの中身をスキャンして、その結果を「CycloneDX」という形式で出力できる便利なツールです。この記事では、実際の使い方や具体的な活用例を紹介していきます!
CycloneDXって何?
CycloneDXは、ソフトウェアの「部品表」を表すフォーマットのひとつです。家を建てる時に必要な材料リストを作るように、ソフトウェアでも「どんな部品が使われているか」を記録したものを**SBOM(Software Bill of Materials)**と呼びます。
このSBOMがあると、こんな場面で役立ちます。
脆弱性の管理:使っているライブラリに問題が見つかった時、すぐに特定できる。
ライセンス管理:誤ったライセンスのライブラリを使っていないか確認できる。
第三者との連携:外部のツールやサービスとデータをやり取りしやすい。
CycloneDXは特にJSONやXML形式で出力できるため、さまざまなシステムと連携できる点が特徴です。
基本の使い方
それでは早速、コマンドを使ってSBOMを作ってみましょう!
(1) Dockerイメージをスキャンする
まずは基本の構文から紹介します。
trivy image --format cyclonedx <イメージ名>:<タグ>
このコマンドは、指定したDockerイメージをスキャンし、その結果をCycloneDX形式で出力します。
例えば、ubuntu:22.04 をスキャンする場合は以下のように入力します。
trivy image --format cyclonedx ubuntu:22.04 > sbom.cyclonedx.json
この例では、ubuntu:22.04 のイメージを調査し、結果をJSONファイルとして保存します。
出力内容のイメージ
実際に出力されるJSONファイルはこんな感じです。
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"components": [
{
"name": "openssl",
"version": "1.1.1-1ubuntu2.1",
"type": "library",
"licenses": [
{
"license": {
"id": "OpenSSL"
}
}
],
"purl": "pkg:deb/ubuntu/openssl@1.1.1-1ubuntu2.1",
"vulnerabilities": [
{
"id": "CVE-2023-12345",
"severity": "HIGH",
"description": "Remote code execution vulnerability.",
"references": [
"https://nvd.nist.gov/vuln/detail/CVE-2023-12345"
]
}
]
}
]
}
ここでは、openssl というライブラリが含まれており、脆弱性(CVE-2023-12345)が報告されています。この情報をもとに対策を進められます。
便利なオプション紹介
(1) 脆弱性を除外したSBOM生成
「とりあえず依存関係だけ知りたい!」という時は、脆弱性情報を省略できます。
trivy image --format cyclonedx --scanners license ubuntu:22.04 > sbom.cyclonedx.json
出力例:
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"components": [
{
"name": "openssl",
"version": "1.1.1-1ubuntu2.1",
"type": "library",
"licenses": [
{
"license": {
"id": "OpenSSL"
}
}
]
}
]
}
(2) 重大な問題だけを表示する
特に深刻な問題だけを抽出したい場合は、重要度を絞り込みます。
trivy image --format cyclonedx --severity HIGH,CRITICAL ubuntu:22.04 > sbom.cyclonedx.json
出力例:
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"components": [
{
"name": "openssl",
"version": "1.1.1-1ubuntu2.1",
"vulnerabilities": [
{
"id": "CVE-2023-12345",
"severity": "HIGH",
"description": "Remote code execution vulnerability."
}
]
}
]
}
(3) キャッシュを無効化して最新情報でスキャン
セキュリティ情報は常に最新である必要があります。キャッシュを使わず、最新データを使いたい場合はこちら。
trivy image --format cyclonedx --no-cache ubuntu:22.04 > sbom.cyclonedx.json
出力例:
キャッシュを使わない場合でも、基本的には通常の出力形式と同じデータが含まれます。最新のデータベースを反映するため、脆弱性情報が最新になります。
まとめ
trivy image --format cyclonedx は、ソフトウェア開発におけるセキュリティ対策や依存関係管理を支える強力なツールです。
SBOMを生成することで、
ソフトウェアに使われている部品が明確になる。
脆弱性の特定や対策が素早くできる。
監査や連携に役立つフォーマットでデータを管理できる。
このコマンドを活用して、安全で信頼できるソフトウェア開発環境を整えていきましょう!