待望!Session Managerのリアルタイムログ配信機能
万歳!素晴らしいアップデートが出ました!
Session Managerとは
AWSにはSystems Managerという、EC2を管理するサービスがあり、その中の1つの機能としてSession Managerがあります。 Session Managerを使用して、EC2やオンプレミスのサーバへのSSHやRDPで接続できます。
詳細や始め方は過去の記事にも書いていますのでそちらも良ければ見てみてください。
今回のアップデートについて
Session Managerには操作ログをS3またはCloudWatch Logsに転送するという便利な機能があるのですが、これまでは操作終了時にログを転送するという仕様でした。
(ログ保存機能の私の過去記事より)
1点注意なのは、ログ転送はリアルタイムではないという点です。 セッション終了時にログを転送する仕組みとなっているため、shutdownコマンドでOS停止したり、ブラウザを閉じて終了した場合は、ログは転送されません。
これがリアルタイム(操作中に転送)になりました!現在はCloudWatch Logsのみ対応のようです。
リアルタイムになったことで、強制的なログ取得、またログ監視をして不正操作時にセッション強制中断など、よりセキュアなログイン管理ができそうです。
試してみる
では実際に試してみます。Session Managerの基本的な使いかたは過去記事に書いていますのでここでは割愛します。
ログ転送の設定
Systems Manager>Session Manager>設定の順で、設定画面に遷移します。
CloudWatch loggingのところをEnableにすると、「Stream session logs (Recommended)」という項目が!こちらを選択し(デフォルト)、任意のCloudWatch ロググループを選択します。
※ロググループは事前作成が必要です。暗号化を有効にする場合はKMSキーを作成してロググループを暗号化しておく必要があります。
上記のとおり設定したら保存します。
EC2へのアクセス
Session Managerでアクセスしてみます。接続までの画面遷移方法は色々あるのですが、私は最近ではEC2の画面から接続>セッションマネージャーで使用することが多いです。
が、失敗。。初期状態では、SSM Agentのバージョンが低いようで接続できないようです。
SSM AgentのバージョンUP
接続できないのでバージョンUPします。Systems Manager経由のバージョンUPが楽なのでそれを使用します。
Systems Manager>Run CommandでRun Command画面へ遷移し、コマンドドキュメントとして「AWS-UpdateSSMAgent」を使用します。(SSMで検索すればOK)
パラメータはデフォルトでOKです。最新にバージョンアップされます。
バージョンUPしたいインスタンスを手動で選択します。
その他はデフォルトで、最下部の実行を押します。すると以下のように正常終了するはずです。
EC2へのアクセス(リトライ)
もう一度接続します。
接続できました!!
試しに以下のようにコマンドを実行してみます。
$ bash
$ date
$ pwd
そのままセッションを終了せずに CloudWatchログを見てみます。
ありますね!! CloudWatchログの画面をそのまま見るとわかりにくいですが、確かに実行したコマンド(bash、date、pwd)が確認できます。
実運用になった場合は、CloudWatch Logs Insightsや、Elasticsearchに送るなど、可視化の工夫が必要です。
まとめ、感想
すばらしい機能です。Security Groupの許可不要で、ログも強制的に取得可能となった今、監査要件の高い本番環境でも使用できるのではないでしょうか。
私としても、今後はSSHアクセスではなくSession Managerで運用できないか考えていきたいと思います。