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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

GuardDuty は、Amazon CloudWatch Events結果が変更されると。CloudWatch イベントを作成する変更の検出には、新しく生成された結果または新しく集計された結果が含まれます。イベントは、ベストエフォートベースで出力されます。

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

注記

account が GuardDuty 委任された管理者である場合、CloudWatch イベントは発生元のメンバーアカウントに加えて、お客様のアカウントに発行されます。

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

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

GuardDuty の CloudWatch イベント通知頻度

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

重要

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

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

重要

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

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

CloudWatch イベントによるアーカイブされた GuardDuty 調査結果の監視

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

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

GuardDuty の CloudWatch イベント形式

CloudWatch のサービスeventGuardDuty の形式を以下に示します。

{ "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": {GUARDDUTY_FINDING_JSON_OBJECT} }
注記

detail 値は、配列内で複数の結果をサポートできる「結果」値を返すのではなく、単一の結果の JSON の詳細をオブジェクトとして返します。

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

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

GuardDuty で CloudWatch イベントを使用すると、GuardDuty 検索イベントをメッセージングハブに送信することで、自動検索アラートを設定できます。これにより、GuardDuty 結果の可視性が向上します。このトピックでは、SNS トピックを設定し、そのトピックを CloudWatch イベントルールに接続することで、結果アラートを E メール、Slack、または Amazon Chime に送信する方法について説明します。

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

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

この手順では、GuardDuty 結果データを送信する場所を設定します。SNS トピックは、イベントルールの作成中または作成後に CloudWatch イベントルールに追加できます。

Email setup

&SNS; トピックを作成する

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

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

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

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

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

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

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

      注記

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

    3. 選択サブスクリプションの作成

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

Slack setup

&SNS; トピックを作成する

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

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

  3. [トピックの作成] セクションで、[Standard。次に、[トピック名] に名前 (例:) を入力します。GuardDuty_to_Slack。その他の詳細はオプションです。選択トピックの作成確定する。

を設定するAWS Chatbotclient

  1. に移動します。AWS Chatbotconsole

  2. [] からクライアントの設定パネルで新しいクライアントの設定

  3. Slack を選択し、「設定」で確定します。

    注記

    Slack を選択するときは、AWS Chatbotをクリックして、[許可] を選択してチャンネルにアクセスします。

  4. Select新しいチャネルの設定をクリックして、構成の詳細ウィンドウを開きます。

    1. チャネルの名前を入力します。

    2. [Slack channel] で、使用するチャネルを選択します。プライベートな Slack チャンネルをAWS Chatbotで、[プライベートチャネル] を選択します。

    3. Slack でプライベートチャンネルのチャンネルIDをコピーするには、チャンネル名を右クリックして「リンクをコピー」を選択します。

    4. リポジトリの []AWS管理コンソールのAWS Chatbotウィンドウで、Slack からコピーした ID を [プライベートチャンネル ID] フィールドに貼り付けます。

    5. Eclipseアクセス許可で、まだロールを持っていない場合、テンプレートを使用して IAM ロールを作成することを選択しました。

    6. を使用する場合ポリシーテンプレートで、[通知アクセス許可] を選択します。これは、AWS Chatbot。CloudWatch アラーム、イベント、ログ、および Amazon SNS トピックに必要な読み取りおよびリスト権限を提供します。

    7. 以前に SNS トピックを作成したリージョンを選択し、作成した Amazon SNS トピックを選択して、Slack チャンネルに通知を送信します。

  5. [Configure (設定)] を選択します。

Chime setup

&SNS; トピックを作成する

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

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

  3. [トピックの作成] セクションで、[Standard。次に、[トピック名] に名前 (例:) を入力します。GuardDuty_to_Chime。その他の詳細はオプションです。選択トピックの作成確定する。

の設定AWS Chatbotclient

  1. に移動します。AWS Chatbotconsole

  2. [] からクライアントの設定パネルで新しいクライアントの設定

  3. チャイムを選択し、「設定」で確認します。

  4. [] から設定の詳細ペインで、チャネルの名前を入力します。

  5. チャイムで目的のチャットルームを開きます

    1. 右上隅の歯車アイコンを選択してから、[Manage webhooks and bots (ウェブフックとボットの管理)] を選択します。

    2. SelectURL をコピーWebhook URL をクリップボードにコピーします。

  6. リポジトリの []AWS管理コンソールのAWS Chatbotウィンドウで、コピーした URL をWebhook URLフィールド。

  7. Eclipseアクセス許可で、まだロールを持っていない場合、テンプレートを使用して IAM ロールを作成することを選択しました。

  8. を使用する場合ポリシーテンプレートで、[通知アクセス許可] を選択します。これは、AWS Chatbot。CloudWatch アラーム、イベント、ログ、および Amazon SNS トピックに必要な読み取りおよびリスト権限を提供します。

  9. 以前に SNS トピックを作成したリージョンを選択し、作成した Amazon SNS トピックを選択して、チャイムルームに通知を送信します。

  10. [Configure (設定)] を選択します。

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

  1. CloudWatch コンソール (https://console.aws.amazon.com/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. イベントの入力を設定します。

    • ChimeまたはSlackの通知をステップ11にスキップする場合、入力タイプはデフォルトでマッチしたイベント

    • SNS 経由の電子メールの通知を設定する場合は、以下の手順に従って、受信トレイに送信するメッセージをカスタマイズします。

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

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

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

      "AWS <Account_ID> has 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=<Finding_ID>"
  11. [詳細の設定] をクリックします。

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

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

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

注記

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

CloudWatch イベントコンソールで作成することもできます。また、CloudWatch イベントルールおよびターゲットは、CloudWatch イベントコンソールで作成することもできます。詳細と詳細な手順については、イベントでトリガーする CloudWatch イベントルールの作成。左イベントソースセクションで、GuardDutyforサービス名およびGuardDuty Findingforイベントタイプ

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

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

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

    重要

    ルールをさらにカスタマイズして、CloudWatch で 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]}}"

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

  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」を参照してください。

GuardDuty マルチアカウント環境の CloudWatch イベント

GuardDuty 管理者として、アカウント内の CloudWatch イベントルールは、メンバーアカウントの適用可能な結果に基づいてトリガーされます。つまり、前のセクションで説明したように、管理者アカウントの CloudWatch イベントを通じて検索通知を設定した場合、ユーザー自身のアカウントに加えて、メンバーアカウントによって生成された重大度の高い、および中程度の結果も通知されます。

GuardDuty の検出元となったメンバーアカウントは、accountIdフィールド内のJSONの詳細です。

コンソールで環境内の特定のメンバアカウントのカスタムイベントルールの作成を開始するには、新しいルールを作成し、次のテンプレートを [Event Pattern Preview] に貼り付けて、イベントをトリガーするメンバアカウントのアカウント ID を追加します。

{ "source": [ "aws.guardduty" ], "detail-type": [ "GuardDuty Finding" ], "detail": { "accountId": [ "123456789012" ] } }
注記

この例は、リストされたアカウント ID に関するすべての結果に対してトリガーされます。JSON 構文の後にカンマで区切って、複数の ID を追加できます。