CloudTrailが記録するConsoleLoginイベントについて
西澤です。CloudTrailが記録するConsoleLoginイベントについて調査する機会があったので整理しておこうと思います。
ConsoleLoginイベントについて
ConsoleLoginイベントとは、AWS Management Consoleにブラウザ経由でログインした場合に記録されます。こちらのイベントについては、CloudTrailのAPIアクティビティ履歴から参照することが可能です。
ログイン監査目的で確認されている方も多いかと思います。
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等のグローバルなサービスであれば、グローバルイベントになり、それ以外のリージョン別に管理画面が分かれたサービスにログインすると、リージョンイベントになるということになります。
直感的には、ConsoleLoginは全てグローバルイベントとして記録して欲しいところなのですが、実際にはリージョン別イベントとなるのでご注意ください。
ConsoleLoginイベントを通知する
監査目的や不正アクセス検知の為、ConsoleLoginイベントを通知したいという要件もあると思いますので、こちらについても補足しておきます(そもそもこちらの要件の為の調査を今回行いました)。
CloudWatch Logs連携を利用する
CloudTrailとCloudWatch Logsの統合を利用した記録が非常に便利です。詳細は、takahashiyusukeさんの下記ブログを参考に設定してください。
こちらの方式で、全リージョンのConsoleLoginイベントを記録するには、下記のいずれかの方法で設定する必要があります。監査目的であれば、1番を選択するのが良いと思います。
- 1) 全リージョン対応のTrailを作成し、CloudWatch Logs連携して通知する
- リージョン間のログ転送料金がかかる可能性がある
- 2) 同様の設定を全リージョンに施す
- ちょっと面倒ですし、将来のリージョン追加に追従できない
- 3) ログインURLを固定して運用する
- 監査になっていない
全リージョン対応のTrailについては、下記をご確認ください。
- AWS CloudTrailを全リージョン一括で有効化出来るようになりました | Developers.IO
- CloudTrail全リージョン有効化の詳細と個別リージョン設定からの移行 | Developers.IO
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サービスからは独立したものだと思うので、きちんと動作確認や調査を行ったことがありませんでした。ログイン通知の検証は楽しいものではありませんでしたが、しっかり理解できたので良かったと思います。
どこかの誰かのお役に立てば嬉しいです。