CloudTrailが記録するConsoleLoginイベントについて

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

西澤です。CloudTrailが記録するConsoleLoginイベントについて調査する機会があったので整理しておこうと思います。

ConsoleLoginイベントについて

ConsoleLoginイベントとは、AWS Management Consoleにブラウザ経由でログインした場合に記録されます。こちらのイベントについては、CloudTrailのAPIアクティビティ履歴から参照することが可能です。

cloudtrail_consolelogin

ログイン監査目的で確認されている方も多いかと思います。

ConsoleLoginイベントの種類

私の思い込みもあったのですが、今回調査をしている中で、ConsoleLoginイベントはグローバルイベントとは限らないということがわかりました。長いですが、そのまま引用します。

サインインイベントがリージョンのイベントと見なされるか、グローバルイベントと見なされるかは、ユーザーがサインインするコンソールおよびユーザーのサインイン URL の構造に依存します。

  • サービスコンソールはローカル化されていますか。ローカル化されている場合、サインインリクエストは自動的にリージョンのサインインエンドポイントにリダイレクトされ、イベントはリージョンの CloudTrail ログに記録されます。たとえば、https://alias.signin.aws.amazon.com/consoleというローカル化されているコンソールのホームページにサインインする場合、リージョンのサインインエンドポイント (たとえば、https://us-east-2.signin.aws.amazon.com) に自動的にリダイレクトされ、イベントはリージョンのログに記録されます。 ただし、一部のサービスは現在ローカル化されていません。たとえば、Amazon S3 サービスは現在ローカル化されていないため、https://alias.signin.aws.amazon.com/console/s3にサインインすると、グローバルサインインエンドポイントhttps://signin.aws.amazon.comにリダイレクトされ、グローバルログのイベントとなります。
  • https://alias.signin.aws.amazon.com/console?region=ap-southeast-1などの URL 構文を使って、特定のリージョンのサインインエンドポイントを手動でリクエストすることも可能です。これによりリージョンのサインインエンドポイント ap-southeast-1 にリダイレクトされ、リージョンのログのイベントとなります。これは引用文です。これは引用文です。これは引用文です。これは引用文です。これは引用文です。これは引用文です。これは引用文です。これは引用文です。これは引用文です。これは引用文です。

AWS CloudTrail による IAM イベントのログ記録 - AWS Identity and Access Management

AWS Management Consoleにログインすると、右上にリージョンが表示されますが、こちらがIAM、S3、CloudFront、Route53等のグローバルなサービスであれば、グローバルイベントになり、それ以外のリージョン別に管理画面が分かれたサービスにログインすると、リージョンイベントになるということになります。

aws_console_global aws_console_tokyo

直感的には、ConsoleLoginは全てグローバルイベントとして記録して欲しいところなのですが、実際にはリージョン別イベントとなるのでご注意ください。

cloudtrail_consolelogin_tokyo

ConsoleLoginイベントを通知する

監査目的や不正アクセス検知の為、ConsoleLoginイベントを通知したいという要件もあると思いますので、こちらについても補足しておきます(そもそもこちらの要件の為の調査を今回行いました)。

CloudWatch Logs連携を利用する

CloudTrailとCloudWatch Logsの統合を利用した記録が非常に便利です。詳細は、takahashiyusukeさんの下記ブログを参考に設定してください。

こちらの方式で、全リージョンのConsoleLoginイベントを記録するには、下記のいずれかの方法で設定する必要があります。監査目的であれば、1番を選択するのが良いと思います。

  • 1) 全リージョン対応のTrailを作成し、CloudWatch Logs連携して通知する
    • リージョン間のログ転送料金がかかる可能性がある
  • 2) 同様の設定を全リージョンに施す
    • ちょっと面倒ですし、将来のリージョン追加に追従できない
  • 3) ログインURLを固定して運用する
    • 監査になっていない

全リージョン対応のTrailについては、下記をご確認ください。

CloudWatch Eventsを利用する

CloudWatch Eventsでも通知を実装できるのではないかと考えて検証してみました。

cloudwatch_events

{
  "detail-type": [
    "AWS Console Sign In via CloudTrail"
  ],
  "detail": {
    "sourceIPAddress": [
      "xxx.xxx.xxx.xxx",
      "xxx.xxx.xxx.xxx",
      "xxx.xxx.xxx.xxx"
    ],
    "responseElements": {
      "ConsoleLogin": [
        "Success"
      ]
    }
  }
}

イベントパターンを選べば、サンプルイベントが出力されるので、それをベースに作成すれば考えていたよりも簡単に設定することができたところまでは良かったのですが、検証してみると通知されないケースがあったりで動作が不安定。色々と確認した結果、

AWS コンソールのサインインイベントは、米国東部 (バージニア北部) リージョン でのみサポートされます。 CloudWatch イベント 用のイベントタイプ - Amazon CloudWatch Events

米国東部リージョンしか対応していないとのことでした。この方法では、全リージョンのConsoleLoginイベントを記録することができないことがわかりました。

まとめ

AWS Management Consoleへのログインについては、APIベースのAWSサービスからは独立したものだと思うので、きちんと動作確認や調査を行ったことがありませんでした。ログイン通知の検証は楽しいものではありませんでしたが、しっかり理解できたので良かったと思います。

どこかの誰かのお役に立てば嬉しいです。