Amazon Web Services ブログ

Amazon Inspector と AWS Systems Manager を用いた脆弱性管理と修復の自動化 – Part 2

このブログは Automate vulnerability management and remediation in AWS using Amazon Inspector and AWS Systems Manager – Part 2 を翻訳したものです。

このブログは、Amazon Inspector と AWS Systems Manager を使った脆弱性管理と修復の自動化シリーズの Part 2 です。このシリーズでは、AWS Systems Manager Automation Runbook を使用して、Amazon Inspector の検出結果をオンデマンドで修復する方法を紹介します。本シリーズの Part 1 では、AWS Security Hub のカスタムアクションを使用して、複数の EC2 インスタンスに影響を与える特定の脆弱性に対する Inspector の検出結果を修復する方法を学びました。カスタムアクションを使用することで、Security Hub で修復したい Inspector の検出結果を柔軟に選択することができるようになります。例えば、“CVE-2017-8816” の影響を受ける EC2 インスタンスで AWS Organization 内の複数の EC2 インスタンスの検出結果を修復するには、Security Hub のカスタムアクションの方式を使用する必要があります。

Part 2 では、AWS Organization 内の大規模な Amazon EC2 インスタンスに対する Amazon Inspector の検出結果を修復する方法を説明します。

指定されたタグに一致する EC2 インスタンスフリートに対して、Inspector によって特定されたすべての脆弱性にパッチを適用することができます。また、すべての深刻度の脆弱性を修復したくない場合は、深刻度フィルタに基づいて Inspector の調査結果をフィルタリングすることができます。たとえば、タグキー “Environment“ とタグ値 ”Prod“ でマークされたインスタンスのすべての ”Critical” な脆弱性を修復するには、この方法を使用する必要があります。

ソリューションの概要

AWS Systems Manager Automation コンソールを用いた修復

このブログでは、AWS Systems Manager カスタム Automation Runboook として提供される automationRunPatchBaselineRunbook を使用します。Automation Runbook は、Systems Manager Automation コンソールから直接開始します。

この Runbook は Organizational Unit (OU) ID またはアカウント ID が必須パラメータとなります。次に、対象を識別するためのリソースタグや、オプションで重大度のフィルタリングを設定できます。更新のインストール後に Amazon EC2 をすぐに再起動することで、プロセスが更新の恩恵を受けられるようにします。再起動しないオプションを選択することで、メンテナンス時間外のワークロードの中断を避けることもできます。

Automation Runbook は、OU 内またはアカウント内で前述のタグを持つ Amazon EC2 インスタンスを特定するクエリを実行します。次に、 Amazon Inspector に対して別のクエリを実行し、指定されたタグと重大度を持つ Amazon EC2 インスタンスを検出します。そして、更新が存在する場合、Runbook は検出結果にリストされている影響を受けるパッケージに対してパッチのインストールを実行します。次の図に示すように、影響を受けるパッケージの情報は Amazon Inspector の検出結果の一部です。最後に、Automation は選択したオプションに基づいて EC2 インスタンスを再起動するか、再起動を延期します。

Figure 1: Finding details in the Amazon Inspector Console

図 1: Amazon Inspector コンソールの検出結果の詳細

この Automation Runbook は指定されたタグを持つ全ての Amazon EC2 インスタンスについて選択した重大度をもつ検出結果を修復できます。この Automation Runbook は Systems Manager 委任管理者アカウントからトリガーしてメンバーアカウントにある EC2 インスタンスで実行されます。

アーキテクチャの概要

ソリューションの概要の章で記載した通り、automationRunPatchBaselineRunbook オートメーションは Systems Manager Automation console から開始します。以下の図に示している手順を確認してみましょう。

Figure 2: Automation process in multiple accounts

図 2: マルチアカウントでの自動化のプロセス

  1. Systems Manager Automation コンソールから直接 automationRunPatchBaselineRunbook を開始する場合、OU の ID または アカウント ID 、重大度、及びタグキー/値のペアを入力します。
  2. Automation はマルチアカウアント及びマルチリージョンの StartAutomationExecution API コールを作成し、Step 1 で指定したターゲットアカウント、ターゲットリージョンでパッチワークフローを開始します。それぞれのワークフローは、ターゲットアカウントとターゲットリージョンにおいて指定したタグのキーと値のペアを持つ Amazon EC2 インスタンスに対して開始されます。
  3. Automation Runbook は ターゲットとなる Amazon EC2 インスタンスに関連する検出結果をAmazon Inspector に問い合わせます。次に、ターゲットのAmazon EC2 インスタンス毎に影響を受ける全てのパッケージのリストを作成します。次に Automation は収集された影響を受けるパッケージから、 Patch Install Override List を作成します。委任管理者アカウントは、このリストを Amazon Simple Storage Service (Amazon S3) に保管します。本ブログシリーズの Part 1 のウォークスルーの章で AWS CloudFormation テンプレートは S3 バケットを作成します。
  4. 次に、Automation Runbook は Step3 で作成されたインストール上書きリストを使って、 AWS-RunPatchBaseline ドキュメントを実行します。再起動オプションはユーザーの入力によって渡されます。もし、ターゲットの Amazon EC2 インスタンスで既存のパッチ操作が実行されている場合は、Automation Runbook は中断されます。もし、アップデートが利用可能な場合は、 AWS-RunPatchBaseline インストール操作は、パッチインストール上書きリストによって影響有りと識別されたパッケージを最新バージョンに更新します。
  5. その後、Automation runbook は、Amazon EC2 に適用された State Manager の関連付けを AWS Systems Manager に問い合わせ、AWS-GatherSoftwareInventory ドキュメントを使用してソフトウェアインベントリを収集します。
  6. AWS-GatherSoftwareInventory の関連付けは、Amazon EC2 上で適用を開始して、インベントリを直ちに更新します。
  7. Amazon EC2 インスタンスは更新されたインベントリ情報を AWS Systems Manager に送信します。

Amazon Inspector はパッチのインストールが成功すると、修正された検出結果のステータスを CLOSED に設定します。

要件

  1. AWS Systems Manager が Amazon EC2 インスタンスを管理している必要があります。
  2. このブログシリーズの Part 1 のウォークスルーの章で説明されている Step1, Step2, Step3 に従う必要があります。

Systems Manager の委任管理者アカウントで Automation Runbook をデプロイする必要があります。このシリーズの Part 1 では、Security Hub の委任管理者アカウントでの Runbook のデプロイについて紹介しました。Systems Manager の委任管理者と Security Hub の委任管理者同じ場合は、次のセクションに進むことができます。
Systems Manager の委任管理者が Security Hub の委任管理者と異なる場合は、Part 1 の Step 1 に従って、Systems Manager の委任管理者アカウントでデプロイを行う必要があります。さらに、Part 1 の Step 3 に従って、新しい S3 バケットに必要なパーミッションを追加する必要があります。

これで、Systems Manager Automation コンソールから直接 automationRunPatchBaselineRunbook を開始する準備ができました。

ウォークスルー

AWS Systems Manager Automation コンソールを用いて脆弱性を修正する

AutomationRunPatchBaselineRunbook オートメーションを OU またはアカウントで直接呼び出して、タグと重大度に基づいて Amazon Inspector の検出結果を修正する方法を見ていきましょう。

  1. Systems Manager 委任管理者アカウントで AWS Systems Manager コンソールに移動し、左のナビゲーションペインから自動化を選択します。その後オートメーションの実行を選択します。
  2. ドキュメントの選択ページで、自己所有をクリックして、automationRunPatchBaselineRunbook-****** を選択します。そして、次へを選択します。

Runbook の名前は AWS CloudFormation のスタック名のプレフィックスが含まれています。

Figure 3: Systems Manager Automation choose document page

図 3: Systems Manager Automation ドキュメント選択画面

  1. オートメーションドキュメントの実行ページでは、複数のアカウントとリージョンを選択します。Figure 4: Execution options

    図 4: 実行オプション

  1. ターゲットのアカウントとリージョンのセクションでは、
    1. 次の図に示すように、アカウントと組織単位 (OU) フィールドを使用して、オートメーションを実行する AWS アカウントまたは OU を指定します。複数のアカウントまたは OU はカンマで区切ります。オートメーションは、ネストされた OU 構造に再起的に実行されません。目的のアカウントを含む OU をターゲットにするか、それぞれの子 OU ID に対してオートメーションを実行する必要があります。
    2. AWS リージョンリストを使用して、オートメーションを実行する一つ以上のリージョンを選択します。
    3. オートメーション実行ロール名の下に、resolveInspectorExecutionRole と入力します。
    4. 複数リージョンとアカウントレート制御オプションを使用して、オートメーションを同時に実行できるリージョンの数とアカウントの数を制限します。これらのオプションは、オートメーションを実行できる AWS リソースの数を制限するわけではありません。

Figure 5: Target accounts and regions
図 5: ターゲットのアカウントとリージョン

  1. ターゲット のセクションでは、
    1. パラメータの欄で InstanceIds を選択
    2. ターゲットの欄では、タグを選択
    3. 修正する Amazon EC2 インスタンスに割り当てられているタグキーと値のペアを入力し、追加を選択してください。

タグキーと値のペアは一つしか使用できないことに注意してください。

Figure 6: Automation targets

図 6: オートメーションのターゲット

  1. 入力パラメータのセクションでは、以下のステップを実行してください。
    1. SeverityFilter で修正する Amazon Inspector の検出結果の重大度を選択します。実行ごとに選択できる重大度は一つだけです。NONE を指定すると Amazon EC2 インスタンスに関連づけられた全ての Amazon Inspector の結果が修正されます。
    2. カーネルの脆弱性を修正するためにカーネルアップデートをインストールする場合は IncludeKernelUpdates に、‘true’ を入力し、カーネルアップデートをスキップする場合は、‘false’ を選択します。
    3. InspectorFindingsArn パラメータは空のままにします。
    4. RebootOption で適切な再起動動作を選択します。
    5. Automation Runbookには、AutomationAssumeRole, Operation, S3BucketName, Source, および S3BucketKey のパラメータがあらかじめ設定されています。これらの値は変更しないでください。
  2. 以下の図に示すようにパタメータを確認して、実行を選択します。

Figure 7: Systems Manager Automation document input parameter section

図 7: Systems Manager Automation ドキュメントのパラメータ入力セクション

  1. Rate control のセクションのオプションを使用して、各アカウントとリージョンのペア内でオートメーションを実行できるAWSリソースの数を制限します。
  2. エラーのしきい値セクションでは、オプションを選択します。
  3. 次の図に示すように、次のページでオートメーションの実行ステータスを監視できます。

Figure 8: Systems Manager Automation execution status detail page

図 8: Systems Manger Automation の実行詳細ページ

  1. 影響を受けるパッケージにパッチを適用すると、Amazon Inspector の調査結果が Closed ステータスに更新されます。

注記

  1. この方法では、Amazon EC2 インスタンスに関連する Amazon Inspector のパッケージの脆弱性の検出結果のみが修正されます。Amazon Inspector のネットワークの到達性に関わる検出結果や Amazon ECR のコンテナイメージ に紐づく脆弱性については修正されません。
  2. Automation Runbook は、パッケージマネージャーのリポジトリで入手可能な、影響を受けるパッケージの最新バージョンをインストールします。
  3. このメソッドでは、タグのキーと値を 1 つだけ使用できます。

まとめ

このブログシリーズでは、新しくなった Amazon Inspector が Amazon EC2 インスタンスの脆弱性を検出するのに、どう役に立つのかについて紹介しました。また、Amazon Inspector の検出結果である Amazon EC2 インスタンスのパッケージの脆弱性を修復するために、2 つのオンデマンド自動化方法について説明しました。

Part 1 では、Security Hub のカスタムアクションである Rem-Inspector-RBT と Rem-Inspector-NoRBT を使用して、様々な AWS アカウントとリージョンにある Amazon EC2 インスタンス全体で選択された特定の CVE に対する Amazon Inspector の検出結果を修正する方法について説明しました。

Part 2では、Automation コンソールから直接 Automation Runbook であるautomationRunPatchBaselineRunbook を開始することで、大規模に Amazon Inspector の検出結果を修正することについて説明しました。

特定の脆弱性の影響を受けている 特定の EC2 インスタンスの Inspector の検出結果を修正するとします。その場合は、Part 1 で説明した Security Hub カスタムアクションメソッドを使用する必要があります。特定のタグと一致する 1 つ、ないしは複数の EC2 インスタンスにおけるすべてのソフトウェアの脆弱性に対してパッチを当てる場合は、このブログで紹介した Systems Manager Automation Runbook から直接呼び出す方法を選択します。

Automation Runbook によって、手動アップデートによるオペレーションの複雑さやミスを減らし、修正スピードを向上させることができます。

翻訳はソリューションアーキテクトの佐藤 航大が担当しました。原文はこちらです。