Amazon EventBridge を使用した GuardDuty 検出結果の処理
GuardDuty は、サーバーレスのイベントバスサービスである Amazon EventBridge (旧Amazon CloudWatch Events) に、検出結果をイベントとして自動的に公開 (送信) します。EventBridge は、アプリケーションとサービスからほぼリアルタイムデータのストリームを、Amazon Simple Notification Service (Amazon SNS) のトピック、AWS Lambda 関数、および Amazon Kinesis ストリームなどのターゲットに配信します。詳細については、「Amazon EventBridge ユーザーガイド」を参照してください。
EventBridge は、イベントを受信することで GuardDuty の検出結果の自動モニタリングと処理を可能にします。EventBridge は、新規に生成された検出結果と集約された検出結果の両方に対するイベントを受信します。集約された検出結果では、既存の検出結果のその後の発生が元の検出結果と結合されます。Every GuardDuty の検出結果にはそれぞれ検索結果 ID が割り当てられます。GuardDuty によって、一意の結果 ID を持つ各検索結果に対して EventBridge イベントが作成されます。GuardDuty での集約の仕組みについては、「GuardDuty の検出結果の集約」を参照してください。
自動化されたモニタリングと処理に加えて、EventBridge を使用すると、調査結果データの長期保存が可能になります。GuardDuty は検出結果を 90 日間保存します。EventBridge を使用すると、調査結果データを好みのストレージプラットフォームに送信し、データをいつまででも保存できます。検出結果を長期間保持するために、GuardDuty は 生成された検出結果を Amazon S3 にエクスポートする をサポートしています。
GuardDuty での EventBridge 通知頻度について
このセクションでは、EventBridge を介して検出通知を受け取る頻度と、以降の検出発生時の頻度を更新する方法について説明します。
- 一意の検出結果 ID を含む新しく生成された検出結果の通知
-
GuardDuty は、一意の検出 ID を持つ検出結果を生成した際に、これらの通知をほぼリアルタイムで送信します。通知には、通知生成プロセス中のこの検索結果 ID の後続の出現がすべて含まれます。
新規に生成された所見の通知頻度は、ほぼリアルタイムで行われます。デフォルトでは、この頻度を変更することはできません。
- 以降に検出結果が見つかった場合の通知
-
GuardDuty は、6 時間間隔以内で、特定の検出結果の後続のすべての発生を単一のイベントとして集計します。管理者アカウントのみが、後続の検出結果の発生について EventBridge 通知頻度を更新できます。メンバーアカウントは、自身のアカウントに対してこの頻度を更新できません。例えば、委任 GuardDuty 管理者アカウントが頻度を 1 時間に更新した場合、すべてのメンバーアカウントには、EventBridge に送信された後続の検出結果の発生に関する 1 時間の通知頻度もあります。詳細については、「Amazon GuardDuty の複数のアカウント」を参照してください。
管理者アカウントであれば、その後の検出結果の発生に関する通知のデフォルトの頻度はカスタマイズできます。有効な値は、15 分、1 時間、またはデフォルトの 6 時間です。これらの通知の頻度の設定については、ステップ 5 – 更新されたアクティブな検出結果をエクスポートする頻度を設定する を参照してください。
メンバーアカウントの EventBridge 通知を受信する管理者アカウントの詳細については、「マルチアカウント環境向け EventBridge ルール」を参照してください。
Amazon SNS トピックとエンドポイントを設定する (E メール、Slack、Amazon Chime)
Amazon Simple Notification Service (Amazon SNS) は、パブリッシャーからサブスクライバーへのメッセージ配信を提供するフルマネージドサービスです。発行者は、トピックにメッセージを送信することで、受信者と非同期的に通信します。トピックは、AWS Lambda、Amazon Simple Queue Service (Amazon SQS)、HTTP/S、E メールアドレスなどの複数のエンドポイントをグループ化できる論理アクセスポイントと通信チャネルです。
イベントルールの作成中または作成後に、Amazon SNS トピックを優先する EventBridge イベントルールに追加できます。
- Amazon SNS トピックを作成する
-
まず、Amazon Simple SNS でトピックを設定し、エンドポイントを追加する必要があります。トピックを作成するには、「Amazon Simple Notification Service デベロッパーガイド」の「ステップ 1: トピックを作成する」の手順を実行します。トピックが作成されたら、トピック ARN をクリップボードにコピーします。このトピック ARN を使用して、推奨される設定のいずれかを続行します。
GuardDuty の検出データを送信する場所を設定する際に、希望の方法を選択してください。
- Email setup
-
E メールエンドポイントを設定するには
Create an Amazon SNS topic の後、次のステップは、このトピックへのサブスクリプションを作成することです。「Amazon Simple Notification Service デベロッパーガイド」の「ステップ 2: Amazon SNS トピックへのサブスクリプションを作成」の手順を実行します。
-
トピック ARN には、 Create an Amazon SNS topic ステップで作成したトピック ARN を使用します。トピック ARN は以下のようになります。
arn:aws:sns:us-east-2:123456789012:your_topic
-
[Protocol] で [Email] を選択します。
-
[エンドポイント] には、Amazon SNS からの通知を受信する E メールアドレスを入力してください。
サブスクリプションの作成後、E メールクライアントを通じてそれを確認する必要があります。
- Slack setup
-
チャット アプリケーションクライアント - Slack で Amazon Q Developer を設定するには
Create an Amazon SNS topic の後、次のステップは Slack 用にクライアントを設定することです。
「Amazon Q Developer in chat applications 管理者ガイド」の「チュートリアル: Slack の使用を開始する」の手順を実行します。
- Chime setup
-
チャット アプリケーション - Chime で Amazon Q Developer を設定するには
Create an Amazon SNS topic の後、次のステップは Chime 用に Amazon Q Developer を設定することです。
「チャットアプリケーションの Amazon Q Developer 管理者ガイド」の「チュートリアル: Amazon Chime の使用を開始する」の手順を実行します。
Amazon EventBridge を使用した GuardDuty の検出結果
EventBridge では、モニタリングするイベントを指定するルールを作成します。これらのルールは、これらのイベントが発生した場合に自動化されたアクションを実行できる対象サービスおよびアプリケーションも指定します。ターゲットとは、ルールに定義されたイベントパターンにイベントがマッチしたときに、EventBridge がイベントを送信する宛先 (リソースまたあエンドポイント) です。各イベントは、AWS イベントの EventBridge スキーマに準拠する JSON オブジェクトであり、調査結果の JSON 表現が含まれています。特定の基準を満たすイベントのみを送信するようにルールを調整できます。詳細については、「[JSON スキーマトピック〕を参照してください。検出結果データは EventBridge イベントとして構成されているため、他のアプリケーション、サービス、およびツールを使用して、検出結果をモニタリングし、処理し、それに対してアクションを取ることができます。
イベントに基づいて GuardDuty の検出結果に関する通知を受け取るには、EventBridge ルールおよび GuardDuty のターゲットを作成する必要があります。このルールでは、EventBridge は GuardDuty が生成する検出結果の通知を、ルールで指定されたターゲットに送信できます。
EventBridge と CloudWatch のイベントは同じ基盤のサービスと API です。ただし、EventBridge には、SaaS (Software as a Service (SaaS)) アプリケーションやユーザー独自のアプリケーションからイベントを受け取るのに役立つ追加機能が含まれています。基盤となるサービスと API が同じであるため、GuardDuty の検出結果のイベントスキーマも同じです。
GuardDuty におけるアーカイブ済みおよび非アーカイブ済みの検出結果が EventBridge と連携する方法
手動でアーカイブされた検出結果の場合、最初の検出結果と、それ以降に発生したすべての検出結果 (アーカイブ完了後に生成された検出結果) は、特定の頻度ごとに EventBridge に送信されます。詳細については、「GuardDuty での EventBridge 通知頻度について」を参照してください。
抑制ルール で自動的にアーカイブされた検出結果の場合、最初の検出結果と、それ以降に発生したすべての検出結果 (アーカイブ完了後に生成された検出結果) は、EventBridge に送信されません。自動的にアーカイブされたこれらの検出結果は GuardDuty コンソールに表示できます。
イベントパターンは、EventBridge がターゲットにイベントを送信するかどうかを決定するために使用するデータを定義します。GuardDuty 向けの EventBridge イベントは、以下の形式になっています。
{
"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 の検出結果に対する EventBridge ルールの作成
次の手順では、Amazon EventBridge コンソールと AWS Command Line Interface (AWS CLI) を使用して、GuardDuty の検出結果の EventBridge ルールを作成する方法について説明します。ルールは、GuardDuty 検出結果のイベントスキーマとパターンを使用する EventBridge イベントを検出し、それらのイベントを処理のために AWS Lambda 関数に送信します。
AWS Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行するために使用できるコンピューティングサービスです。コードをパッケージ化し、Lambda 関数 としてAWS Lambdaにアップロードします。関数が呼び出されるとAWS Lambdaは関数を実行します。関数は、ユーザーが手動で呼び出したり、イベントに応答して自動的に呼び出したり、またはアプリケーションやサービスからのリクエストに応答したりすることができます。Lambda 関数の作成および呼び出しについては、 AWS Lambda 開発者ガイドを参照してください。
GuardDuty の検出結果をターゲットに送信する EventBridge ルールを作成する際に、お好みの方法を選択してください。
- Console
-
Amazon EventBridge コンソールを使用して、すべての GuardDuty の検出結果イベントを Lambda 関数に自動的に送信して処理するルールを作成するには、次のステップに従います。このルールは、特定のイベントを受信したときに実行されるルールのデフォルト設定を使用します。ルール設定の詳細や、カスタム設定を使用するルールの作成方法については、Amazon EventBridge ユーザーガイドのイベントに反応するルールの作成を参照してください。
このルールを作成する前に、Lambda 関数を作成して、ルールがターゲットとして使用されるようにします。ルールを作成するときは、この関数をルールのターゲットとして指定する必要があります。ターゲットは、以前に作成した SNS トピックも選択できます。詳細については、「Amazon SNS トピックとエンドポイントを設定する (E メール、Slack、Amazon Chime)」を参照してください。
コンソールを使用してイベントのルールを作成するには
AWS マネジメントコンソール にサインインし、Amazon EventBridge コンソール (https://console.aws.amazon.com/events/) を開きます。
-
ナビゲーションペインの [バス] で、[ルール] を選択します。
-
セクションで、ルールの作成 を選択します。
-
詳細のルール定義 で、次の操作を行います。
-
名前 にルールの名前を入力します。
-
説明 に、認可ルールの簡単な説明を入力します。
-
イベントバスを選択 の下で、 デフォルトのイベントバスが選択され、選択したイベントバスのルールを有効にするがオンになっていることを確認します。
-
ルールタイプ では、イベントパターンを持つルール を選択します。
-
終了したら、次へ を選択します。
-
イベントパターンの作成 で、次の操作を行います。
-
[Event source] (イベントソース) で、[AWS events or EventBridge partner events] ( イベントまたは EventBridge パートナーイベント) を選択してください。
-
(オプショナル) サンプルイベント については、GuardDuty 用のサンプル検出結果イベントを確認して、イベントに含まれる可能性がある内容を確認してください。そのためには、[AWS イベント] を選択します。次に、[サンプルイベント] で [GuardDuty 検出結果] を選択します。
オプション 1 - EventBridge が提供するテンプレートであるパターンフォームを使用する
[イベントパターン] セクションで次を実行できます。
-
[作成方法] では [パターンフォームを使用する] を選択します。
-
イベントソース で AWS のサービス を選択してください。
-
AWS のサービス で、GuardDuty を選択します。
-
[イベントタイプ] では、[GuardDuty の検出結果] を選択します。
終了したら、次へ を選択します。
オプション 2 - JSON でのカスタムイベントパターンの使用
[イベントパターン] セクションで次を実行できます。
-
[作成方法] で [カスタムパターン (JSON エディター)] を選択します。
-
イベントパターンでは、以下のカスタム 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,
9,
9.0,
9.1,
9.2,
9.3,
9.4,
9.5,
9.6,
9.7,
9.8,
9.9,
10,
10.0
]
}
}
終了したら、次へ を選択します。
オプション A - ターゲットとして AWS のサービス - AWS Lambda を選択する
[ターゲットを選択] ページで、次の操作を行います。
-
[ターゲットタイプ] で [AWS のサービス] を選択します。
-
[Select a target] (ターゲットを選択) では、[Lambda function] (Lambda 関数) を選択します。次に、関数で、結果イベントの送信先となる Lambda 関数を選択します。
-
(オプション) バージョン/エイリアスを設定 で、ターゲットの Lambda 関数のバージョンまたはエイリアスの設定を入力します。
-
(オプショナル) [追加設定] で、Lambda 関数に送信するイベントデータを指定します。関数に正常に配信されないイベントを処理する方法を指定することもできます。
-
終了したら、次へ を選択します。
オプション B - SNS トピックをターゲットとして選択
[ターゲットを選択] ページで、次の操作を行います。
-
[ターゲットタイプ] で [AWS のサービス] を選択します。
-
[Select a target] (ターゲットの選択) には、[SNS topic] (SNS トピック) を選択してください。次に、ターゲットロケーションで、ターゲットロケーションに基づいて適切なオプションを選択してください。[トピック] で、作成した SNS トピックの名前を選択します。
-
[追加の設定] を展開します。[ターゲット入力の設定] では、[入力トランスフォーマー] を選択します。
-
入力トランスフォーマーの設定 を選択します。
-
次のコードをコピーして、[ターゲット入力トランスフォーマー] セクションの [入力パス] フィールドに貼り付けます。
{
"severity": "$.detail.severity",
"Account_ID": "$.detail.accountId",
"Finding_ID": "$.detail.id",
"Finding_Type": "$.detail.type",
"region": "$.region",
"Finding_description": "$.detail.description"
}
-
次のコードをコピーして [テンプレート] フィールドに貼り付け、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>"
-
タグの設定 ページで、ルールに割り当てる 1 つ以上のタグをオプションで入力します。続いて、次へ を選択します。
-
確認して作成するステップでは、ジョブの設定設定を確認し、それらが正しいことを検証します。
設定を変更するには、設定が含まれるセクションで 編集を選択し、次に正しい設定を入力します。ナビゲーションタブを使用して、設定が含まれるページに移動することもできます。
-
設定の確認が完了したら Create rule (ルールの作成) を選択します。
- API
-
次の手順は、AWS CLI コマンドを使用して、EventBridge のルールおよび GuardDuty ターゲットを作成する方法を示します。具体的には、この手順では、GuardDuty が生成するすべての検出結果について、EventBridge がイベントを送信できるようにするルールを作成し、そのルールのターゲットとして AWS Lambda 関数に送信する方法を示しています。
この例では、EventBridge をトリガーするルールのターゲットとして Lambda 関数を使用しています。他の AWS リソースをターゲットと設定して、EventBridge をトリガーすることもできます。GuardDuty および EventBridge は次のターゲットタイプをサポートします: Amazon EC2 インスタンス、Amazon Kinesis streams、Amazon ECS タスク、AWS Step Functions ステートマシン、run のコマンド、および組み込みターゲット。詳細については、「Amazon EventBridge API リファレンス」の「PutTargets」を参照してください。
ルールおよびターゲットを作成するには
-
GuardDuty が生成するすべての検出結果に対して、EventBridge がイベントを送信できるようにするルールを作成するには、次の EventBridge CLI コマンドを実行します。
aws events put-rule --name your-rule-name --event-pattern "{\"source\":[\"aws.guardduty\"]}"
GuardDuty で生成された検出結果のサブセットにのみイベントを送信するよう EventBridge に指示できるように、ルールをさらにカスタマイズできます。このサブセットは、ルールで指定されている検出結果の属性に基づきます。例えば、次の CLI コマンドを使用して、EventBridge で重要度が 5 または 8 の GuardDuty の検出結果でイベントのみ送信できるようにルールを作成します。
aws events put-rule --name your-rule-name --event-pattern "{\"source\":[\"aws.guardduty\"],\"detail-type\":[\"GuardDuty Finding\"],\"detail\":{\"severity\":[5,8]}}"
この目的のために、GuardDuty の検出結果のための JSON で利用可能な任意のプロパティ値を使用できます。
-
ステップ 1 で作成したルールのターゲットとして Lambda 関数をアタッチするには、次の CloudWatch CLI コマンドを実行します。
aws events put-targets --rule your-target-name --targets Id=1,Arn=arn:aws:lambda:us-east-1:111122223333:function:your_function
上記コマンド内の your-target-name を GuardDuty イベントの実際の Lambda 関数に置き換えてください。
-
ターゲットを呼び出す上で必要な許可を追加するには、次の Lambda CLI コマンドを実行します。
aws lambda add-permission --function-name your-target-name --statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com
上記コマンド内の your_function を GuardDuty イベントの実際の Lambda 関数に置き換えてください。
GuardDuty マルチアカウント環境向け EventBridge ルール
委任された GuardDuty 管理者アカウントを使用する場合、メンバーアカウントで生成されたイベントを表示し、他のアプリケーションやサービスを使用してアクションを実行できます。管理者アカウント内の EventBridge ルールは、メンバーアカウントからの該当する検出結果に基づいてトリガーされます。管理者アカウントで EventBridge を介した検出結果の設定を行うと、ご自身のアカウントとメンバーアカウントの両方からの検出結果を受け取ることができます。例えば、EventBridge を使用して、特定のタイプの検出結果を Lambda 関数に送信し、その関数でデータを処理してセキュリティインシデントおよびイベント管理 (SIEM) システムに送信することができます。
検出結果の JSON 詳細の accountId フィールドを使用して、GuardDuty の検出結果元となったメンバーアカウントを特定することができます。特定のメンバーアカウント向けにカスタムイベントルールを作成するには、新規ルールを作成し、イベントパターンで以下のテンプレートを使用してください。123456789012 を、イベントをトリガーするメンバーアカウントの accountId に置き換えます。
{
"source": [
"aws.guardduty"
],
"detail-type": [
"GuardDuty Finding"
],
"detail": {
"accountId": [
"123456789012"
]
}
}
この例は、指定されたアカウント ID からのすべての検出結果に一致するルールを作成します。複数のアカウント ID は、JSON 構文に従いカンマで区切って指定できます。