AWSのInspectorでSBOM Exportしてみた 前編

## 導入
- 経産省の[「ソフトウェア管理に向けたSBOM（Software Bill of Materials）の導入に関する手引」](https://www.meti.go.jp/press/2023/07/20230728004/20230728004.html)にも記載されている通り、自身が利用するOSSライブラリに対して、依存関係を含むコンポーネントや脆弱性を一覧管理する手段として、SBOMが注目されています。
- 本記事について、
    - 前編ではAWSのマネージドサービスである[Amazon Inspector](https://aws.amazon.com/jp/inspector/)のSBOMエクスポート機能を用いて、SBOM ファイルをS3上に出力します。
    - 後編では[Amazon Athena](https://aws.amazon.com/jp/athena/)を用いてSBOMファイルに対する分析を実施したいと思います。→[AWSのInspectorでSBOM Exportしてみた 後編](https://qiita.com/asw_hoggge/items/9d21324e5c880f4924b3)


## Amazon InspectorによるSBOM出力
### スキャン対象の準備
- SBOMスキャン対象として、ECRに`amazonlinux:2023`をベースイメージとするDockerイメージを格納しておきます。
    ```Dockerfile
    FROM amazonlinux:2023
    
    # Install Node.js
    RUN yum install -y nodejs
    ```

### S3バケットの設定
- SBOM出力となるS3バケットを作成し、S3バケットポリシーを設定します。
```json
{
	"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:::バケット名/*",
			"Condition": {
				"StringEquals": {
					"aws:SourceAccount": "アカウントID"
				},
				"ArnLike": {
					"aws:SourceArn": "arn:aws:inspector2:ap-northeast-1:アカウントID:report/*"
				}
			}
		}
	]
}
                
```

### KMSの設定
- SBOMファイルの暗号化に必要なKMSのCMKを作成します。
![スクリーンショット 2023-10-09 12.04.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562653/fb133e62-7b6c-702a-8954-1f3b8515f647.png)
- キーポリシーに以下ステートメントを追加します。
```json
{
    "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`の画面を開きます。
- 画面左のナビゲーションペインから、`Export SBOMs`を選択します。
- フィルターと出力先を設定して、SBOM Exportします。
    - フィルター: ECRの特定リポジトリを指定するように、`リポジトリ名 EQUALS`を設定
    - 出力先： 先程設定したS3バケットとKMSキーを指定
![スクリーンショット 2023-10-09 12.12.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562653/9fa6b66d-f805-d24a-3c89-03349eaf262f.png)

- 数分するとExport完了するので、`View report`からSBOMファイルを確認します。
![スクリーンショット 2023-10-09 12.20.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562653/f19b181b-b4db-e5f1-ef2f-59efb9591d4a.png)

- 無事にSBOMファイルが出力されていることを確認できました!
![スクリーンショット 2023-10-09 12.25.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562653/a04f5310-e6f9-5621-23cf-75410243583d.png)

- エディタで開いてみると、
    - CyclonedX 1.4 SBOM フォーマットで`components`や`vulnerabilities`が出力されていました。
    - インストールしたNodeJSの情報も`components`内に記載されていました。![スクリーンショット 2023-10-09 12.29.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562653/93bcc4bc-a3ed-efed-7cf3-698d1cbbb6cf.png)



([Amazon インスペクターによる SBOM のエクスポート](https://docs.aws.amazon.com/ja_jp/inspector/latest/user/sbom-export.html)を参照)

## 最後に
- 本記事では、Amazon InspectorによるSBOMエクスポート機能を試してみました。
- 次回はAthenaを用いてSBOMファイルに対する分析を実施したいと思います！

## 注意事項
- 本記事は万全を期して作成していますが、お気づきの点がありましたら、ご連絡よろしくお願いします。
- なお、本記事の内容を利用した結果及び影響について、筆者は一切の責任を負いませんので、予めご了承ください。