[アップデート] EC2 Image builderにてイメージパイプライン実行時に脆弱性スキャンが可能になりました。

2023.04.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コンサルティング部の南です。

EC2 Image Builderのアップデートによってイメージパイプライン実行時にAMIとコンテナイメージの脆弱性スキャンが可能になりました。

アップデート概要

EC2 Image Builderを使用して、イメージパイプライン実行時にAMIとコンテナイメージを簡単にスキャンし、CVE (Common Vulnerabilities and Exposures) を検出できるようになりました。

以前よりInspector Classicにてテストコンポーネントにスキャンを行うカスタムクリプトを設定することで、スキャンすることは不可能ではなかったんですが、今回のアップデートにてInspector V2を使って簡単にスキャンを行うことが出来ました。

仕組みについて

EC2 Image Builderの内部動作について再確認してみましょう。

パイプライン実行時は以下の流れで動作を行います。

ステップ 動作
ステップ1 レシピで定義されたソースイメージとインスタンスタイプからEC2インスタンスが起動
ステップ2 EC2インスタンスにレシピで指定したビルドコンポーネントがダウンロードされ、EC2インスタンス上で実行
ステップ3 EC2インスタンスが停止しAMIが作られ、その後インスタンスはterminateされる
ステップ4 作成されたAMIからEC2インスタンスを起動
ステップ5 EC2インスタンスにレシピで指定したテストコンポーネントがダウンロードされ、 EC2インスタンス上で実行される。テスト後インスタンスはterminateされる
ステップ6 上記の工程が正常に終了すると、 Output images の Status が「Available」になり完了

EC2 Image Builder側でEC2の作成→スクリプトの実行(イメージにソフトウェアなどをインストール)→AMIの作成→AMIからEC2を作成 →作成したEC2をテスト を自動化してくれるって感じですね。

今回のInspector対応ではステップ5(作成したEC2をテスト)の際にInspectorのスキャンが行われます。
今月のアップデートにより、パイプラインの実行フローをリアルタイムに参照できるようになりましたので確認してみましょう。

詳しくはこちらのブログを参照下さい。

CollectImageScanFindingsというステップを新たに確認することが出来ますね。

ちなみに、今回のアップデート前でもテスト用のインスタンスが起動した際にInspector側でスキャンが行われていました。
InspectorではEC2を新規作成した場合停止中のインスタンスを起動した場合などInspectorがインスタンスを検出した場合に自動でスキャンが行われます。

Inspectorのスキャン要件についての詳細に関しては以下ブログを参照下さい。

ですがInspectorではインスタンスが削除されたタイミングで検出結果も削除されます

今回のアップデートによってInspectorで検出した結果をEC2 Image Builder側で保存を行うことでインスタンス削除後も確認出来るようになった訳です。

最終的な実行順序を図にまとめると以下の通りです。

料金について

EC2 Image Builder側で新たに料金が掛かることはございません。

InspectorのEC2インスタンススキャン、ECRコンテナイメージスキャンの料金が適用されます。
AMIのスキャンを例に挙げると、パイプライン実行時に作成されるインスタンスを起動している合計時間を基づいて計算されます。

InspectorのEC2インスタンススキャンの料金形態について確認しておきましょう。

詳細については以下を参照下さい。

EC2インスタンススキャンの1ヶ月のコストはその月にスキャンされたEC2インスタンスの平均数に基づいています。
断続的に実行されるインスタンスの場合はその月に実行された合計時間に基づいて比例配分されます。

※平均数とは
EC2 インスタンスの平均数 = (スキャンされたインスタンスの合計時間) / (1 か月の時間数) となります。
(例) それぞれのインスタンスの月間稼働時間が、EC2-a = 360時間、EC2-b = 350時間、EC2-c = 10時間の場合、 (その月にスキャンされたインスタンスの合計 720 時間)/(1ヶ月 720 時間) = 1台のインスタンス となる訳です。

Inspectorのサービスページから「設定」→「使用状況」→「スキャンタイプ別」を確認することで、実際のEC2インスタンスの平均数、基準となるカバレッジ時間を確認することが出来ます。

やってみる

実際にAMIのスキャンを試してみます。

  1. セキュリティスキャンを有効化します。Image Builderのサービスページの「セキュリティの概要」→「セキュリティスキャンの設定」で確認することが出来ます。有効化されていない場合はInspectorを有効化します。

  2. Inspectorのサービスページに移行し、「Inspectorをアクティブ化」から有効化します。

  3. Inspectorをアクティブ化すると、SSMのステートマネージャーなどが作成されます。Image Builderのサービスページ側で「有効」が確認出来るまで数分かかる場合もございます。

  4. パイプラインで利用するレシピを作成します。今回は実際にスキャンされていることを確認する為に、少し古いOSバージョンのレシピ「test-inspector-recipe」と、同じバージョンのOSでWindows Updateを実行するコンポーネントを関連付けたレシピ「test-inspector-recipe-windows-update」を用意します。
    レシピ「test-inspector-recipe レシピ「test-inspector-recipe-windows-update

  5. パイプラインを作成します。「EC2イメージスキャンを有効にする」にチェックを入れて下さい。(コンテナスキャンの場合は「ECRコンテナスキャンを有効にする」にチェックを入れて下さい。)

  6. パイプラインを実行すると、Image Builderのサービスページの「セキュリティの概要」→「セキュリティの検出結果」からスキャン結果を確認することが出来ます。

  7. 以下の画像のように。「脆弱性(CVE)別」、「イメージパイプライン別」、「イメージ別」で確認することが出来ます。
    今回の場合、Windows Updateを実行するコンポーネントを関連付けたレシピ「test-inspector-recipe-windows-update」では脆弱性が解消していることが確認できますね。

  8. CVEに関してはInspectorと同等の表示となります。

最後に

EC2 Image Builderのアップデートにより、イメージパイプライン実行時にAMIとコンテナイメージの脆弱性スキャンが簡単に実行できるようになりました。
これらのアップデートを活用し、セキュリティを意識しつつアプリケーション開発を進めていくことが重要です。
今後もAWSの新機能やアップデートに注目して、最適な開発環境を整えていきましょう。