User Notificationsを用いたIAMユーザーログイン検知

初めまして。入社3年目になります、SCSK竜崎斗磨と申します。
TechHarmony初投稿となります!これから少しずつ、皆様方にAWSのお役立ち情報を発信できれば幸いです。

今回は、実際の案件で直面した課題から得た「シンプルかつ効果的な、IAMユーザーのログイン検知」の知見を共有したいと思います!
今回の話の焦点としては、rootユーザー”以外”のIAMユーザーになります。

概要・構成

案件の中で、「rootユーザー相当の強い権限を持つIAMユーザーがログインした際に、確実に検知・通知したい」という要件がありました。

AWS環境におけるログイン検知といえばrootユーザーの監視が基本ですが、本番環境の保守などで強力な権限を持つIAMユーザーが存在する場合、そのユーザーの挙動を監視することもセキュリティ上非常に重要です。

今回は「AWS User Notifications」を使用して、この仕組みをシンプルに構築しました。構成図は以下の通りです。

architecture-of-login-detection-for-aws

AWS User Notifications内で通知設定を作成すると、裏側でEventBridgeのルールが自動作成され、イベントをフックして指定のEmailへ通知を飛ばしてくれます。

没にした構成案

ログイン検知の実装にあたり、AWSにおける定番の通知アーキテクチャもいくつか検討しました。しかし、コストや運用面から今回は見送っています。

  • CloudWatch Logs × メトリクスフィルター × SNS

    • 没理由(コスト懸念): Trail LogをCloudWatch Logsに保管することになるため、ログ保管に対する料金が膨らむ懸念がありました。

  • CloudTrail × EventBridge × SNS

    • 没理由(設定の非効率さ): rootユーザーのログインイベントは米国東部(バージニア北部 / us-east-1)に記録される仕様がありますが、一般のIAMユーザーのログインは「ログイン操作が行われた各リージョン」で発生します。これを拾うために、全リージョンで手動でEventBridgeルールを設定・管理するのは運用上、非常に非効率です。

  • S3 × Lambda × SNS

    • 没理由(Lambdaの無駄撃ち): Lambdaにイベントが渡ってくる前の段階でユーザーを限定することができず、全管理イベントがLambdaに流れてきてしまいます。Lambda側で都度ユーザーを判別することになり、実行が「垂れ流し状態」になるため却下しました。

設定方法

それでは、AWS User Notificationsを使った設定手順を解説します。

前提として、マルチリージョンのCloudTrailの証跡設定をオンにしている必要があります。
AWSコンソールからCloudTrailの証跡設定を行い、「管理イベント」用の証跡を作成することで、
上記の前提に記載した設定が可能となります。
状態として、①マルチリージョンの証跡が「はい」②管理イベントが収集対象となっていれば問題ありません。
trail-configuration-1trail-configuration-2
証跡設定が確認できたら、AWS User Notificationsのコンソールから通知ルールを作成します。

イベントルール設定

AWS のサービスの名前:AWS Console Sign-in
イベントタイプ:サインインイベント(または、AWS Console Sign In via CloudTrail)
リージョン:使用しているアカウントで有効になっているリージョン全てを選択(※1)
高度なフィルター(オプション):<対象ユーザーに条件を絞ったJSON>(※2)

(※1)有効になっていないリージョンは、選択しなくて問題ありません。
以下、参考までに、AWS社からのメッセージになります。

現在オプトインリージョンにつきましては、
リージョンサインインエンドポイント (<region>.signin.aws.amazon.com) にアクセスした場合は、
グローバルサインインエンドポイント (signin.aws.amazon.com) にリダイレクトされる動作となっておりました。

そのため、ConsoleLogin のイベントを検知するためには、
デフォルトで使用可能なリージョンにのみルールを作成すれば十分であり、
User Notifications の非対応のリージョンにつきましては考慮いただく必要がない状況でございます。

上記メッセージより、仮に新規リージョンが追加された場合でも、別途オプトイン、つまり対象リージョンを手動で有効にする必要があるため、特に懸念することは無いという結論になります。

(※2)以下に、1人の特定ユーザーを指定したJSONの例を記載しております。
複数ユーザー指定も可能です。

{
  "detail": {
    "userIdentity": {
      "arn": [
        "arn:aws:iam::000000000000:user/xxxx"
      ]
    }
  }
}

Email承認

配信チャネルにEmailを設定すると、対象のEmail宛に承認メールが届きます。
以下画像の、Verify email より、承認してください。

email-verification

ステータス確認

通知設定、対象リージョン、及び配信チャネルが全てアクティブになっていることを確認します。status-active-check

 

動作確認

実際に、監視対象としたIAMユーザーでマネジメントコンソールにログインしてみます。
対象ユーザーでログイン後、指定したEmail宛に以下の通知が届いていれば、成功しています。
aws-signin-notifications

まとめ

今回はAWS User Notificationsを活用して、高権限IAMユーザーのログインをシンプルに検知する方法をご紹介しました。

複雑なアーキテクチャを組まなくても、マネージドサービスをうまく組み合わせることで、コストや運用負荷を下げつつセキュアな環境を構築できます。
今後も得た学びや、案件での実践的な知見をこのブログで発信していきたいと思います。

最後まで読んでいただき、ありがとうございました!

タイトルとURLをコピーしました