複数のリージョンで GuardDuty を設定した環境で、コンソールログインの検知通知を抑止する方法

2020.09.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

GuardDuty がコンソールログインのイベント、結果タイプ UnauthorizedAccess:IAMUser/ConsoleLogin を複数のリージョンで検知しました。

GuardDuty は複数のリージョンで有効にしています。複数のリージョンで同一の結果タイプ UnauthorizedAccess:IAMUser/ConsoleLogin が検知されました。

重複した GuardDuty の検知結果については、通知対象外としたいです。

どう対応すればいいの?

複数のリージョンで検知されたのはなぜ?

GuardDuty は GuardDuty が有効化されたそれぞれのリージョンの CloudTrail イベントを分析します。

グローバルのエンドポイント(signin.aws.amazon.com)を使用してコンソールログインを行った場合、全リージョンの CloudTrail に ConsoleLogin イベントが記録されます。

そのため、結果タイプ UnauthorizedAccess:IAMUser/ConsoleLogin は GuardDuty が有効化された全リージョンで検知する可能性がありますので、結果を抑制したいすべてのリージョンでフィルタリング設定が必要となります。

通知の抑制方法

マネジメントコンソールでは「結果の抑制」、AWS CLI では create-filter コマンドCreateFilter API)を実行することで実現可能です。

以下に、マネジメントコンソールの操作例を紹介します。執筆時点の画面となります。

  1. GuardDuty コンソールの左部のメニューから「結果」をクリック
  2. フィルター条件(ユーザー名)を選択/入力
  3. フィルター条件(検索タイプ)を選択/入力(UnauthorizedAccess:IAMUser/ConsoleLogin)
  4. フィルター結果の一覧に抑制したい検知結果が表示されることを確認
  5. 一覧上部の「結果の抑制」ボタンをクリック
  6. フィルターの名前/説明を入力
  7. 「保存」ボタンをクリック

GuardDutyFilterFindings

以下はコマンドの例です。

$ aws guardduty create-filter \
    --detector-id <検知 ID> \
    --action ARCHIVE \
    --name <フィルター名> \
    --description <フィルターの説明> \
    --finding-criteria '{"Criterion": {"type": {"Eq": ["UnauthorizedAccess:IAMUser/ConsoleLogin"]},"resource.accessKeyDetails.userName": {"Eq": ["<ユーザ名>"]}}}' \

※ detector-id は検知結果の「結果 ID: xxx」のリンク、もしくは通知された JSON から確認が行えます。

保存済みのフィルターは結果の抑制ボタン右側の「保存済みのルール」から確認が行えます。正常にフィルタリングできた場合、以降はフィルターの条件にヒットするイベントを検知したとき、自動で「アーカイブ済み」の状態となり、検知結果が通知されなくなります。

参考資料