【AWS】Amazon InspectorでEC2インスタンスからSBOMを取得する
この記事ではAmazon Inspectorについての簡単な紹介と実際にAmazon Inspectorを使用してEC2インスタンスからSBOMを出力するまでの流れについて解説していきます。
目次
はじめに
皆さま、こんにちは。
クラウドソリューション第2グループ入社2年目のkugishimakです。
今回、業務でAmazon Inspectorを使いたいという要望があり、
それならば自分の環境でも試してみようというきっかけで執筆するに至りました。
AWS初心者の方でも実践できる内容となっていますので、何かの役に立てば幸いです。
それでは、本題に参りましょう。
Amazon Inspector とは?
まずAmazon Inspectorとは何かについて簡単に紹介いたします。
1. サービス概要
Amazon Inspectorは、AWS上のEC2 インスタンス、コンテナ、Lambda 関数などのワークロードを自動でスキャンし、
ソフトウェアの脆弱性や意図しないネットワークの設定によるセキュリティの問題がないかを検出するサービスです。
現在は15日間の無料トライアルがあるため期間内の利用では料金はかかりません。
2. 対象のリソース
Amazon EC2インスタンス
Amazon ECRのコンテナイメージ
Lambda関数
SBOM取得手順
Amazon InspectorによるSBOMの取得にあたり、主に使用するAWSのサービスは以下の通りです。
・EC2インスタンス
・S3バケット
・KMS
・Amazon Inspector
はじめる前に
今回、VPCやサブネット、セキュリティグループ、またEC2インスタンスの作成手順は本筋ではないため省略しております。
また、Amazon InspectorでEC2インスタンスのスキャンを行う場合は、
対象のインスタンスをマネージドインスタンス化する必要があります。
▼マネージドインスタンス化されたインスタンス
1.S3バケットの設定
1-1. SBOMの保存場所であるS3バケットを作成する
設定は以下の通りです。特に作成時に特別な設定はいりません。
既存バケットを使用する場合は、こちらの工程は必要ありませんので 1-2 に進んでください。
・バケット名:Inspector-s3-sbom(任意)
・その他設定:デフォルト
1-2. 保存先バケットのポリシーを変更する
保存先のバケットを選択し「アクセス許可」から「バケットポリシー」を編集します。
▼バケット > アクセス許可 > バケットポリシー > ポリシーの編集
ポリシー内容は以下の通りです。
下記の設定値は環境ごとに異なりますので正しい情報を入力してください。
・保存先バケット名: Inspector-s3-sbom(任意)
・AWSアカウントID:12桁の数字
・リージョン:ap-northeast-1(任意)
{
"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": "AWSアカウントID"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:inspector2:リージョン:AWSアカウントID:report/*"
}
}
}
]
}
2.KMS keyの設定
2-1. KMS keyを作成する
Amazon Inspectorでの調査結果のレポートの暗号化のためにKMS keyのカスタマー管理型のキーを作成します。
既存のものを使用する場合は、こちらの工程は必要ありませんので 2-2 に進んでください。
・キーの表示名:Inspector-kms(任意)
・キーのタイプ:対象暗号化(必須)
・その他設定:デフォルト
2-2. キーポリシーを更新する
対象のキーを選択し「キーポリシー」からポリシーの編集を行います。
追記する内容は下記の通りです。
この際、すでに記載してあるポリシーには上書きしないようにしてください。
また、S3と同様に、下記の設定値は環境ごとに異なりますので正しい情報を入力してください。
・AWSアカウントID:12桁の数字
・リージョン:ap-northeast-1(任意)
{
"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": "AWSアカウントID"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:inspector2:リージョン:AWSアカウントID:report/*"
}
}
}
3.Amazon InspectorでSBOMの取得
3-1. Amazon Inspectorの有効化
Amazon Inspectorを有効化します。ボタンひとつでできるのは簡単でいいですね。
▼Amazon Inspector > Inspectorのアクティブ化
3-2. SBOMの取得
Inspectorの左メニューにある「Export SBOMs」から下記の画像のような画面にうつります。
▼Inspector > Export SBOMs
SBOM export settingsの項目に下記のような必要な情報を入力し、左下の「Export」を押下します。
・ファイルタイプ:
- Cyclonedx_1_4
- Spdx_2_3-compatible
・S3 URI:s3://Inspector-s3-sbom
・KMS key:Inspector-kms
Exportが完了すると保存先のバケットにSBOMが出力されています。
▼バケットに保存されているSBOM
サンプルとして各ファイルタイプごとのJSONファイルの一部を記載しています。
使用する用途に合わせてご参考ください。
▼Cyclonedx_1_4
"components": [
{
"type": "application",
"name": "openssl-libs",
"purl": "pkg:rpm/openssl-libs@1.0.2k-24.amzn2.0.12?arch=X86_64&epoch=1&upstream=openssl-libs-1.0.2k-24.amzn2.0.12.src.rpm",
"version": "1.0.2k",
"bom-ref": "cb1c3ae0b3c6b4cbcd929f31d1bc033a"
},
{
"type": "application",
"name": "python-pillow",
"purl": "pkg:rpm/python-pillow@2.0.0-23.gitd1c6db8.amzn2.0.12?arch=X86_64&epoch=0&upstream=python-pillow-2.0.0-23.gitd1c6db8.amzn2.0.12.src.rpm",
"version": "2.0.0",
"bom-ref": "ed04375aa3a2a12dd802fda15e875a3f"
},
▼Spdx_2_3-compatible
"packages": [
{
"name": "openssl-libs",
"versionInfo": "1.0.2k-24.amzn2.0.12",
"downloadLocation": "NOASSERTION",
"sourceInfo": "/var/lib/rpm/Packages",
"filesAnalyzed": false,
"externalRefs": [
{
"referenceCategory": "PACKAGE-MANAGER",
"referenceType": "purl",
"referenceLocator": "pkg:rpm/openssl-libs@1.0.2k-24.amzn2.0.12?arch=X86_64&epoch=1&upstream=openssl-libs-1.0.2k-24.amzn2.0.12.src.rpm"
}
],
"SPDXID": "SPDXRef-Package-rpm-openssl-libs-cb1c3ae0b3c6b4cbcd929f31d1bc033a"
},
おわりに
いかがだったでしょうか。
本記事ではAmazon InspectorによるEC2インスタンスのSBOM取得方法をご紹介いたしました。
Amazon Inspectorはボタンひとつで簡単にできるので
無料トライアルのある期間中にお試ししてみると良いかと思います。
それではまた👋