今回のゴール
GuardDutyを設定したものの、コンソール上で確認しないと検出された脅威が確認できないので放置状態の方も多いのではないでしょうか。
そこで、今回は脅威が検出された際にCloudWatchEvent経由でSNS通知するようにします。
また、今回の設定ではマルチアカウント環境を想定しておりますので、管理者アカウントだけでなくメンバアカウントの脅威も通知されます。
設定に関しては、下記のサイトの参考に設定しました。
Amazon CloudWatch Events を使用した GuardDuty 結果へのカスタムレスポンスの作成
下準備
SNSトピックの作成
[タイプ]:スタンダード
[名前]:cloudwatch-event-guardduty(任意)
[表示名]:[名前]と同じ
トピック作成後、「サブスクリプションの作成」ボタンをクリック
[プロトコル]:Eメール
[エンドポイント]:メールアドレスを入力
登録後に確認メールが送信されますので、リンクをクリックして有効化します。
設定
それではCloudWatchの設定を行います。
CloudWatchサービスの[イベント]-[ルール]で「ルールの作成」をクリックします。
[サービス名]:GuardDuty
[イベントタイプ]:GuardDuty Finding
[イベントパターンのプレビュー]:下記の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
]
}
}
[ターゲット]:SNSトピック
[トピック]:cloudwatch-event-guardduty(作成済みのトピック)
[入力の設定]:インプットトランスフォーマーを選択
[入力パス]:下記の文字列を入力
{
"severity": "$.detail.severity",
"Account_ID": "$.detail.accountId",
"Finding_ID": "$.detail.id",
"Finding_Type": "$.detail.type",
"region": "$.region",
"Finding_description": "$.detail.description"
}
[入力テンプレート]:下記の文字列を入力
"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>"
[名前]:event-guardduty(任意)
確認
サンプルのイベントを生成してメールで通知されるか確認します。
[設定]から「結果サンプルの生成」ボタンをクリックします。
数分後、メールで通知されている事が確認できました。