Systems Manger セッションマネージャーでログインを検知・検索してみた
はじめに
おはようございます、加藤です。AWS Systems Manager(以降、SSM)のセッションマネージャーによって、キーペアを使用しなくてもマネジメントコンソール、ローカル端末からBash, PowerShellが使用できるようになりました。
とても便利な機能ですが、設計時には存在していない想定外の機能で戸惑っている方もいらっしゃるのではないでしょうか?このブログではセッションマネージャーでユーザーがログインした場合に通知を受け取る仕組みの作り方とCloudTrailを使って今までにログインされるか検索する方法をご紹介します。
AWS Systems Manager Session Manager for Shell AccessでMacからLinux EC2インスタンスに端末でアクセスする
やってみた
検知
まずリアルタイムでログインしたことしる検知の仕組みをつくってみます
Simple Notification Service Topic の作成
Simple Notification Service(以降、SNS)で、後ほど作成するCloud Watch Event(以降、CWE)からイベントを受け取り、メールで通知を行います。下記URLからSNS トピックの画面へアクセスしてください。
https://ap-northeast-1.console.aws.amazon.com/sns/v2/home?region=ap-northeast-1#/topics
新しいトピックを作成します。
トピック名・表示名を決めます。この名前はイマイチですね...StartSession以外にResumeSessionの場合も通知するので不適切な名前です。検証なのでこのまま進めます。
今回は、メールで通知します。プロトコルをEmailにしてエンドポイントに通知したいメールアドレスを入力します。
プロトコルを替えて SNS - Lambda - チャット という仕組みを作るのも良いと思います。
確認のメールが届くのでリンクをクリックして承認します。
Cloud Watch Event の作成
Cloud Watch Event(以降、CWE)でログインを検知します。下記URLからCWEの画面へアクセスしてください。
https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#events:
固有のイベントタイプが用意されていないので、AWS API Call via CloudTailでeventNameを拾います。
定義するeventNameは、StartSession, ResumeSessionです。セッションの終了を知りたい場合はTerminateSessionを定義してください。
ターゲットに作成したSNSトピックを設定します。
動作確認
セッションマネージャーを開始してみると、約10秒でメールが届きました。(あくまでご参考に...)
本文にはマッチしたCloudTrailのイベントが記載されています。(JSON形式)
arnやSourceIPAddressが記載されています、 誰が ・ いつ ・ どこから(IPアドレス) ログインしたかを 確認可能です。
検索
該当リージョンでCloudTrailが有効になっていたことが前提です
今までにログインが行われたか検索します。
下記URLからCloudTrail イベント履歴の画面へアクセスしてください。
https://ap-northeast-1.console.aws.amazon.com/cloudtrail/home?region=ap-northeast-1#/events
フィルターで イベント名: StartSession を指定して検索します。その後 イベント名: ResumeSession でも検索を行ってください。
クリックして詳細(JSON)を見ることで誰が ・ いつ ・ どこから(IPアドレス) ログインしたかを 確認可能です。
この方法以外では、CloudTrailの証跡が保存されているS3バケットからダウンロードしてローカルで検索する方法や、Athenaを使う方法があります。
あとがき
セッションマネージャーが利用されたか検知・検索する方法をまとめてみました。
活用して頂ければ幸いです!