はじめに
こんにちは、ソリューションアーキテクトの佐藤です。
突然ですが、みなさんは普段どのようなパッチ運用を行なっていますか ?
スケジューリングで定期的に実行している、あるいはリスクが高い脆弱性が検出された場合に絞って実施している、などの方法で各々のセキュリティポリシーに準拠する形で実施されていると思います。
この記事では、Amazon Inspector、AWS Systems Manager をはじめとしたサービスを用いて、脆弱性をもつパッケージをオンデマンドでパッチ適用させるソリューションを実際にデプロイして扱っていきます。このソリューションにより、重大な脆弱性が発見された場合、修正パッチが公開された段階ですぐに・数クリックで適用することが可能になります。
それでは、簡単に EC2 インスタンスやコンテナイメージの脆弱性を検知してくれる Amazon Inspector について紹介した後に、今回のソリューションをデプロイしていきたいと思います。
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
builders.flash メールメンバー登録
Amazon Inspector とは ?
まず、脆弱性対応においては、利用中の AWS 環境内でどのような脆弱性が存在しているかを把握しておく必要があります。
特に、重大な脆弱性が発見された場合は、どの EC2 インスタンスやコンテナイメージに該当する脆弱性が存在しているかといった、リソースを特定しておくことは大切です。
このような脆弱性の「検知」の部分を支援してくれるのが Amazon Inspector です。Amazon Inspector は、 2021 年の AWS re:Invent でアップデートされた、EC2 インスタンスや ECR のコンテナイメージに対してソフトウェアパッケージの脆弱性やネットワークの露出を検知してくれるサービスです。
※余談ですが、アップデート前の Amazon Inspector は Inspector Agent という専用のエージェントをインストールすることで、EC2 インスタンスの脆弱性を検知できるようなサービスでしたが、こちらは Inspector Classic と名前が変更されました。
Amazon Inspector は Systems Manager (SSM) エージェントでソフトウェアのインベントリ情報を取得してソフトウェアの脆弱性についてスキャンを行います。SSM エージェントは、AWS の提供する多くの AMI ではデフォルトでインストールされている ため、それらのAMIを使っている場合は、インストール作業等必要なしに、すぐに、そして数クリックで脆弱性を検出することが可能です。
図のようにダッシュボードとして Inspector が有効になっているリソースの割合や、重大度が最も高い脆弱性の件数など、全体の状況を把握することも可能です。
また、検出結果は AWS Security Hub へ統合することも可能です。以上が Amazon Inspector の主な機能です。

ソリューションの概要
では早速、今回デプロイするソリューションを見てみましょう。以下のアーキテクチャで構成されています。
各工程の解説
少し複雑なので、各工程を追って何を行なっているのか解説します。箇条書きの番号が、アーキテクチャ図の矢印に記載の番号と対応しています。
Amazon Inspector の検出結果を AWS Security Hub に統合します。
Security Hub で修復したい Inspector からの検出結果を指定し、カスタムアクション で Amazon EventBridge に送信します。
EventBridge では EC2 のインスタンス ID と、Amazon Inspector の検出結果の ID をパラメータとして、Systems Manager Automation を実行します。
AWS Systems Manager Automation 内の Python スクリプトによって、指定した検出結果の原因となるパッケージを収集して、パッチ適用させたいパッケージの情報が記載された Patch Install Override List を Amazon S3 へ保管します。
AWS-RunPatchBaseline の Run Command では、ステップ 4 で作成した Patch Install Override List を使用して、検出結果のソフトウェアパッケージに対して実行しパッチを適用させます。
更新が完了すると、Automation Runbook は インベントリの情報を更新する AWS-GatherSoftwareInventory ドキュメントを実行するために、EC2 インスタンスに紐づけられたステートマネージャの関連づけを Systems Manager State Manager から取得します。
AWS-GatherSoftwareInventory ドキュメントを実行して、インベントリ情報を更新します。
EC2 インスタンスは、更新されたインベントリの情報を AWS Systems Manager に送信します。
また、このソリューションにおけるユーザーが操作する箇所は、Security Hub のコンソールで修復したい検出結果を指定してカスタムアクションの実行ボタンをクリックするのみであり、工数が少なく、オペレーションのミスが発生しにくい点も特徴です。
また、本記事では単一アカウントでのデプロイ方法を紹介しますが、マルチアカウントの構成の場合もサポートされていますので、ご興味があれば実施いただければ幸いです。マルチアカウントの場合の構築方法が紹介されたブログは こちら です。
ソリューションのデプロイ
前提
Amazon EC2 インスタンスが Systems Manager によって管理されているマネージドインスタンスであること
Security Hub を有効化していること
ソリューションのデプロイ
まとめ
今回、aws-samples 内の CloudFormation テンプレートを活用して、指定した Amazon Inspector の検出結果を修復するようなソリューションを構築しました。これにより、オンデマンドに EC2 インスタンスで検出されたソフトウェアパッケージの脆弱性にパッチを適用できます。
多くの環境では定期的にパッチを適用されているかと思います。しかしながら、重大な脆弱性が検出された場合、スケジューリング実行のみでは、修正パッチが公開されたとしても、パッチ適用のタイミングを待つ必要があり、修正が遅れてしまう可能性があります。今回のソリューションではオンデマンドでパッチを適用できるため、迅速に修正することができます。ぜひ参考にしていただけると幸いです。
筆者プロフィール
佐藤 航大
アマゾン ウェブ サービス ジャパン 合同会社
ソリューションアーキテクト
西日本のお客様を中心にクラウド活用に関する技術的な支援を行うアーキテクト。
暗号技術が好きで、最近は耐量子暗号 (PQC) に興味をもっています。
休日は近所の喫茶店で本を読んだり、ぼんやり考え事をしています。
