概要
Amazon Inspectorを有効化してから、EC2スキャン結果に対するSBOMエクスポートまでの流れを備忘録として書き起こす。
前提
- EC2インスタンス
- Amazon Linux 2023 (al2023-ami-2023.6.20241031.0-kernel-6.1-x86_64)
公式
- Amazon Inspectorを使ったSBOM出力手順:https://docs.aws.amazon.com/ja_jp/inspector/latest/user/sbom-export.html
- アクセス許可・ポリシー周りの設定:https://docs.aws.amazon.com/ja_jp/inspector/latest/user/findings-managing-exporting-reports.html
手順
Amazon Inspectorの有効化
ナビゲーションペインから「Inspectorをアクティブ化」を選択
「Inspectorをアクティブ化」を押下
SBOM出力用S3バケットの作成
- S3バケットのリージョンとInspectorのリージョンは同じであること(同じじゃないとエラーになる)
- 公式が提供するバケットポリシーのサンプルは以下の通り
{ "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:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnLike": { "aws:SourceArn": "arn:aws:inspector2:Region:111122223333:report/*" } } } ] }
出力レポートの暗号化用のKMSキーの作成
- KMSのリージョンはInspectorのリージョンと同じであること(同じじゃないと選択できない)
- 公式が提供するキーポリシーのサンプルは以下の通り
{ "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:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnLike": { "aws:SourceArn": "arn:aws:inspector2:Region:111122223333:report/*" } } } ] }
出力
ナビゲーションペインから「Export SBOMs」を選択
- ファイルタイプ:SBOMのフォーマットを「CycloneDX」「SPDX」のどちらかを選択。詳細は「ソフトウェア管理に向けたSBOM(Software Bill of Materials)の導入に関する手引ver2.0」を参照。https://www.meti.go.jp/press/2024/08/20240829001/20240829001-1r.pdf
- S3 URI:作成したS3バケット
- KMS key:作成したKMSキー
出力結果
- CycloneDXで出力
- 2分後、指定したS3バケットにjsonファイルが出力された
- オブジェクトは、指定したKMSキーで暗号化してあった (SSE-KMS)
出力内容
- CycloneDX(v1.4)のデータレファレンス:https://cyclonedx.org/docs/1.4/json/
- Inspectorが出力するSBOM(CycloneDX)の構造は以下の通り
{ "bomFormat": "CycloneDX", "specVersion": "1.4", "version": 1, "metadata": { "timestamp": "", "component": {}, "properties": [] }, "components": [], "vulnerabilities": [] }
metadata
- timestamp:生成時刻
- component:BOMが表現するコンポーネント
"component": { "type": "operating-system", "name": "AMAZON_LINUX_2023", "version": "6.1.112-124.190.amzn2023.x86_64" }
- properties:key-value形式で設定できるプロパティ。Inspectorの場合は、スキャン対象のリソース情報(今回は、Inspector EC2スキャン対象のEC2インスタンス)を入れているようだ。
"properties": [ { "name": "amazon:inspector:ami", "value": "ami-066a7fbea5161f451" }, { "name": "amazon:inspector:arch", "value": "x86_64" }, { "name": "amazon:inspector:account_id", "value": <AWSアカウント番号> }, { "name": "amazon:inspector:resource_type", "value": "AWS_EC2_INSTANCE" }, { "name": "amazon:inspector:instance_id", "value": <EC2インスタンスID> }, { "name": "amazon:inspector:resource_arn", "value": "arn:aws:ec2:us-west-2:<AWSアカウントの番号>:instance/<EC2インスタンスID>" } ]
components
- ソフトウェアコンポーネントの列挙
- type:コンポーネントタイプ (rpmのものはapplication、pypiのものはlibraryに区分されていた)
- name:コンポーネント名
- purl:パッケージURL(qualifiersとして、archやepoch、upstreamが指定されていた)
- version:コンポーネントバージョン
- bom-ref:レファレンス用の識別子
"components": [ { "type": "application", "name": "libedit", "purl": "pkg:rpm/libedit@3.1-38.20210714cvs.amzn2023.0.2?arch=X86_64&epoch=0&upstream=libedit-3.1-38.20210714cvs.amzn2023.0.2.src.rpm", "version": "3.1", "bom-ref": "40853ebb7fa05c9370e08063b4fd6e94" },(以下省略) ]
- コンポーネントの照合
- rpmパッケージ:出力したSBOM内には471件あったが、「rpm -qa」を叩いたら476件あった。どのコンポーネントが抜けていたかまでは特定してない。そのうち調べる。
- pypiパッケージ:出力したSBOM内には11件あった。デフォルトで「/usr/lib/python3.9/site-packages/」に配置されているパッケージが読み取られた。
vulnerabilities
- 最新のAmazon Linux 2023で試したので、今回は脆弱性数0でした。今後、脆弱性が検出されたら、追記します。