Amazon InspectorでSBOM出力してみた (CycloneDX形式/SPDX形式)
おはようございます( ◜◡◝ )
ゲームソリューション部/業務効率化ソリューション部の きだぱん です。
「サプライチェーンセキュリティ」という言葉を聞いたことはあるかと思います。
私たちが利用するアプリケーションは、数多くのオープンソースソフトウェア(OSS)ライブラリの上に成り立っています。その一つ一つに脆弱性が潜んでいる可能性を考えると、もはや手作業での管理は現実的ではありません。
そんな中、注目を集めているのが「SBOM(Software Bill of Materials:ソフトウェア部品表)」です。
ソフトウェアを構成する全てのコンポーネントをリスト化したもので、経済産業省もその活用を推奨しています。
今回は、「Amazon Inspector」を使って、SBOM出力してみたいと思います。
SBOMとは
SBOMとは、Software Bill of Materialsの略称で、その名の通り「ソフトウェアを構成する部品のリスト」です。
具体的には、アプリケーションが依存しているライブラリやモジュール、それらのバージョン情報などが詳細に記載されています。
- ソフトウェアが何でできているかを把握できる
- 利用しているOSSのライセンスを一覧で管理
ソフトウェアの安全性を担保するための「成分表示」のようなもの、と考えると分かりやすいかもしれません。
Amazon Inspectorを使うと、AWS環境に統合された形で、簡単にSBOMを生成・管理可能です!
Amazon Inspectorでは、業界標準のCycloneDXやSPDXに対応しています。
フォーマット名 | バージョン |
---|---|
CycloneDX | v1.4 |
SPDX | v2.3 |
※本記事執筆時点(2025年7月)で、WindowsのAmazon EC2インスタンスに対するSBOMエクスポートはサポートされていないためご注意ください。
事前準備
※事前に、SBOMを作成したいものを、Amazon ECRにプッシュしておきます。
エクスポートしたSBOMファイルを保存するためのS3バケットを準備します。
以下のようなバケットポリシーで作成しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "allow-inspector",
"Effect": "Allow",
"Principal": {
"Service": "inspector2.amazonaws.com"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::inspector-sbom-reports-202507/*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "<Bucket名>"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:inspector2:ap-northeast-1:<アカウントID>:report/*"
}
}
}
]
}
ファイルを暗号化するためのKMSキーも設定します。
キーのタイプとして「対称」、キーの使用法として「暗号化および復号」を選択します。
{
"Sid": "Allow Amazon Inspector to use the key",
"Effect": "Allow",
"Principal": {
"Service": "inspector2.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "<アカウントID>"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:inspector2:ap-northeast-1:<アカウントID>:report/*"
}
}
}
SBOM出力
AWSマネジメントコンソールでAmazon Inspectorを開きます。
サイドバーの「SBOMのエクスポート」機能を選択します。
フィルター条件(特定のリポジトリ名やイメージタグなど)を指定します。
フィルターの条件は以下です。
フィルター | 説明 |
---|---|
Account ID | 特定のAWSアカウントIDに関連付けられたリソース |
EC2 インスタンスタグ | 特定のタグが付与されたEC2インスタンス |
関数名 | 特定の名前を持つLambda関数を対象 |
イメージタグ | 特定のタグが付いたコンテナイメージを対象 |
Lambda 関数タグ | 特定のタグが付与されたLambda関数を対象 |
リソースタイプ | EC2 、ECR 、Lambda のいずれかのリソースタイプでの絞り込み |
リソース ID | 特定のリソースID(例: インスタンスID、イメージダイジェスト)を持つリソース |
リポジトリ名 | 特定のECRリポジトリ内にあるコンテナイメージ |
出力形式として「CycloneDX 1.4」を選択し、出力先に作成したS3バケットを指定します。
出力結果
エクスポートを実行すると、指定したS3バケットにSBOMファイル(JSON形式)が生成されます。
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"version": 1,
"metadata": {
"timestamp": "2025-07-18T10:48:36Z",
"component": null,
"properties": [
{
"name": "todo-app<imageId>",
"value": "sha256:c9649f904axxxxxx"
},
{
"name": "resourceType",
"value": "AWS_ECR_CONTAINER_IMAGE"
}
//... 省略
]
},
"components": [
{
"type": "library",
"name": "",
"purl": "pkg:dpkg/libssl2@1.....",
"bom-ref": "7a4b8f21c3d0e59a6b18c7d4e5f6a1b2"
}
//... 省略
],
"vulnerabilities": [
{
"id": "CVE-2022-40897",
"affects": [
{
"ref": "xxxxx"
}
]
}
]
}
SPDXは以下のようになりました。
{
"name": "4098.../ECR/i-...",
"spdxVersion": "SPDX-2.3",
"creationInfo": {
"created": "2025-07-18T10:58:04Z"
},
"packages": [
{
"SPDXID": "SPDXRef-Package-rpm-elfutils-libelf-ddf56a5...",
"name": "todo-app<imageId>",
"versionInfo": "1.2.3",
"downloadLocation": "NOASSERTION",
"sourceInfo": "/var/lib/rpm/Packages",
"filesAnalyzed": false
},
{
"SPDXID": "SPDXRef-Package-rpm-libcurl-710fb33829bc5....",
"name": "libcurl",
"versionInfo": "7.61.1-22.el8",
"downloadLocation": "NOASSERTION",
"filesAnalyzed": false
}
//... 省略
],
"SPDXID": "SPDXRef-DOCUMENT"
}
作成したものはダウンロードすることも可能となっております!
まとめ
今回は、Amazon Inspectorを使って、ソフトウェア部品表である「SBOM」を出力してみました。
SBOMは出力するだけでなく、その内容を定期的にチェックし、脆弱性が発見された際に迅速に対応するサイクルを回していくことが重要です。
SBOMに関するブログは他にも展開されています。
以下も併せてご覧ください。
この記事がどなたかのお役に立てば幸いです。
以上、きだぱんでした。