Amazon CloudWatch Events を使用した GuardDuty の結果に対するカスタムレスポンスの作成 - Amazon GuardDuty

Amazon CloudWatch Events を使用した GuardDuty の結果に対するカスタムレスポンスの作成

GuardDuty では、結果が変更されると、Amazon CloudWatch Events に基づいて通知を送信できます。CloudWatch イベントを作成する変更の検出には、新しく生成された結果または新しく集計された結果が含まれます。

GuardDuty の検索結果にはそれぞれ結果 ID が割り当てられます。GuardDuty によって、一意の結果 ID を持つ各結果に対して CloudWatch イベントが作成されます。その後に発生した既存の結果は、すべて元の結果に集約されます。

CloudWatch イベントを GuardDuty とともに使用することにより、タスクを自動化し、GuardDuty の結果によって明らかになったセキュリティ上の問題に対応できます。

CloudWatch イベント に基づいて GuardDuty の結果について通知を受け取るには、CloudWatch イベント ルールおよび GuardDuty のターゲットを作成する必要があります。このルールでは、CloudWatch は GuardDuty が生成する結果の通知を、ルールで指定されたターゲットに送信できます。詳細については、「GuardDuty の CloudWatch イベント ルールおよびターゲットの作成 (CLI)」を参照してください。

GuardDuty に関する CloudWatch イベント の通知頻度

一意の結果 ID を持つ新しく生成された結果の通知 – GuardDuty は CloudWatch イベントに基づいて結果の 5 分以内に通知を送信します。このイベント (およびこの通知) には、この結果が一意の ID を伴って生成されてから最初の 5 分に発生したこの結果のそれ以降のすべての発生も含まれています。

重要

新しく生成される結果に関して送信される通知のデフォルトの頻度 (5 分) をカスタマイズすることはできません。

その後の結果の発生に関する通知 – デフォルトでは、一意の結果 ID を持つ結果ごとに、GuardDuty は、6 時間間隔で行われる特定の結果のその後の発生を単一のイベントに集約します。その後、GuardDuty は、このイベントに基づいてこれらの後続の発生に関する通知を送信します。つまり、デフォルトでは、既存の結果の後続の発生は、GuardDuty によって、CloudWatch イベントに基づいて 6 時間ごとに通知が送信されます。

重要

その後の結果の発生に関する通知のデフォルトの頻度はカスタマイズできます。有効な値は、15 分、1 時間、またはデフォルトの 6 時間です。この値は、CreateDetector または UpdateDetector API オペレーションを使用して更新できます。GuardDuty コンソールからこの値を更新することもできます。[設定] を選択し、[CloudWatch イベント] で、[更新された結果] プルダウンメニューからいずれかの値を選択します。

マスターアカウントのユーザーのみが、以降の結果について CloudWatch イベントに送信される通知のデフォルトの頻度をカスタマイズできます。メンバーアカウントのユーザーはこの頻度値をカスタマイズできません。マスターアカウントが自分のアカウントで設定した頻度値は、そのすべてのメンバーアカウントの GuardDuty 機能に適用されます。つまり、マスターアカウントのユーザーがこの頻度値を 1 時間に設定すると、すべてのメンバーアカウントでも、以降の結果について CloudWatch イベントに送信される通知の頻度が 1 時間になります。詳細については、「Amazon GuardDuty での複数のアカウントの管理」を参照してください。

CloudWatch イベント を使用した、アーカイブされた GuardDuty 結果のモニタリング

手動でアーカイブされた結果の場合、これらのうち最初の結果と、それ以降に発生したすべての結果 (アーカイブ完了後に生成された結果) は、前述のとおり頻度ごとに CloudWatch イベント に送信されます。

自動アーカイブされた結果の場合、これらのうち最初の結果と、それ以降に発生したすべての結果 (アーカイブ完了後に生成された結果) は、CloudWatch イベント イベントに送信されません

GuardDuty の CloudWatch イベントの形式

CloudWatch の GuardDuty イベントには以下の形式があります。

{ "version": "0", "id": "cd2d702e-ab31-411b-9344-793ce56b1bc7", "detail-type": "GuardDuty Finding", "source": "aws.guardduty", "account": "111122223333", "time": "1970-01-01T00:00:00Z", "region": "us-east-1", "resources": [], "detail": {COMPLETE_GUARDDUTY_FINDING_JSON} }

COMPLETE_GUARDDUTY_FINDING_JSON に含まれているすべてのパラメータの完全なリストについては、「GetFindings」を参照してください。COMPLETE_GUARDDUTY_FINDING_JSON に表示される id パラメータは、上記で説明した結果 ID です。

GuardDuty の結果を通知する CloudWatch イベント ルールの作成 (コンソール)

次の手順を使用して、重大度が中~高の結果について、選択した E メールアドレスへの自動 E メール通知を設定できます。

Amazon SNS トピックとエンドポイントの設定

まず、Amazon Simple Notification Service でトピックを設定し、E メールアドレスをエンドポイントとして追加する必要があります。詳細については、SNS ガイドを参照してください。

  1. https://console.aws.amazon.com/sns/v3/home で Amazon SNS コンソールにサインインします。

  2. ナビゲーションペインから [トピック] を選択し、[トピックの作成] を選択します。

  3. [トピックの作成] セクションで、[トピック名] に名前 (GuardDuty など) を入力します。その他の詳細はオプションです。

  4. [トピックの作成] を選択します。新しいトピックのトピック詳細が開きます。

  5. [Subscriptions (サブスクリプション)] セクションで、[Create Subscription (サブスクリプションの作成)] を選択します。

    1. [プロトコル] メニューから [E メール] を選択します。

    2. [エンドポイント] フィールドに、通知を受信する E メールアドレスを追加します。

      注記

      作成後、E メールクライアントを通じてサブスクリプションを確認する必要があります。

    3. [Create subscription (サブスクリプションの作成)] を選択します。

  6. 受信トレイでサブスクリプションのメッセージを確認し、[Confirm Subscription (サブスクリプションの確認)] を選択します。

GuardDuty の結果に対する CloudWatch イベントのセットアップ

  1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインから [ルール] を選択し、[ルールの作成] を選択します。

  3. [サービス名] メニューから [GuardDuty] を選択します。

  4. [イベントタイプ] メニューから [GuardDuty Finding (GuardDuty の結果)] を選択します。

  5. [イベントパターンのプレビュー] の [編集] を選択します。

  6. 以下の JSON コードを [イベントパターンプレビュー] に貼り付け、[保存] を選択します。

    { "source": [ "aws.guardduty" ], "detail-type": [ "GuardDuty Finding" ], "detail": { "severity": [ 4, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9 ] } }
    注記

    上記のコードでは、中〜高の結果が警告されます。

  7. [ターゲット] セクションで、[ターゲットの追加] をクリックします。

  8. [Select Targets (ターゲットの選択)] メニューから、[SNS トピック] を選択します。

  9. [Select Topic (トピックの選択)] で、ステップ 1 で作成した SNS トピックの名前を選択します。

  10. [入力の設定] を展開して、[インプットトランスフォーマー] を閉じます。

  11. 次のコードをコピーして、[Input Path (入力パス)] フィールドに貼り付けます。

    { "severity": "$.detail.severity", "Finding_ID": "$.detail.id", "Finding_Type": "$.detail.type", "region": "$.region", "Finding_description": "$.detail.description" }
  12. 次のコードをコピーして [Input Template (入力テンプレと)] フィールドに貼り付け、E メールをフォーマットします。

    "You have a severity <severity> GuardDuty finding type <Finding_Type> in the <region> region." "Finding Description:" "<Finding_description>. " "For more details open the GuardDuty console at https://console.aws.amazon.com/guardduty/home?region=<region>#/findings?search=id%3D<Finding_ID>"
  13. [詳細の設定] をクリックします。

  14. [Configure rule details (ルール詳細の設定)] ページでルールの [名前] と [説明] を入力してから、[ルールの作成] を選択してルールを有効化します。

GuardDuty の CloudWatch イベント ルールおよびターゲットの作成 (CLI)

以下の手順は、AWS CLI コマンドを使用して、GuardDuty の CloudWatch イベント ルールおよびターゲットを作成する方法を示します。具体的には、ルールを作成して、CloudWatch で、GuardDuty が生成するすべての結果のイベントを送信し、ルールのターゲットとして AWS Lambda 関数を追加する方法について説明します。

注記

Lambda 関数に加えて、GuardDuty および CloudWatch ではターゲットタイプとして、Amazon EC2 インスタンス、Amazon Kinesis ストリーム、Amazon ECS タスク、AWS Step Functions ステートマシン、run コマンド、および組み込みターゲットをサポートします。

GuardDuty の CloudWatch イベント ルールおよびターゲットは、CloudWatch イベント コンソールで作成することもできます。詳細な手順については、「イベントでトリガーする CloudWatch イベント イベントルールの作成」を参照してください。[Event Source] セクションの [Service name] で GuardDuty、[Event Type] で GuardDuty Finding を選択します。

ルールおよびターゲットを作成するには

  1. GuardDuty が生成するすべての結果のイベントを CloudWatch から送信するルールを作成するには、次の CloudWatch CLI コマンドを実行します。

    aws events put-rule --name Test --event-pattern "{\"source\":[\"aws.guardduty\"]}"

    重要

    GuardDuty で生成された結果のサブセットにのみイベントを送信するよう CloudWatch に指示できるように、ルールをさらにカスタマイズできます。このサブセットは、ルールで指定されている結果の属性に基づきます。たとえば、次の CLI コマンドを使用して、CloudWatch で 重要度が 5 または 8 の GuardDuty 結果のイベントのみ送信できるようにルールを作成します。

    aws events put-rule --name Test --event-pattern "{\"source\":[\"aws.guardduty\"],\"detail-type\":[\"GuardDuty Finding\"],\"detail\":{\"severity\":[5,8]}}"

    この目的のために、JSON で使用可能な任意のプロパティ値を使用して GuardDuty の結果を取得できます。

  2. ステップ 1 で作成したルールのターゲットとして Lambda 関数をアタッチするには、次の CloudWatch CLI コマンドを実行します。

    aws events put-targets --rule Test --targets Id=1,Arn=arn:aws:lambda:us-east-1:111122223333:function:<your_function>

    注記

    上記コマンド内の <your_function> を GuardDuty イベントの実際の Lambda 関数に置き換えてください。

  3. ターゲットを呼び出す上で必要なアクセス許可を追加するには、次の Lambda CLI コマンドを実行します。

    aws lambda add-permission --function-name <your_function> --statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com

    注記

    上記コマンド内の <your_function> を GuardDuty イベントの実際の Lambda 関数に置き換えてください。

    注記

    上記の手順では、CloudWatch イベントをトリガーするルールのターゲットとして Lambda 関数を使用しています。他の AWS リソースをターゲットとして設定して、CloudWatch イベント をトリガーすることもできます。詳細については、「PutTargets」を参照してください。