フューチャー技術ブログ

AWS Session Managerでセッションを切断されにくくする方法

はじめに

こんにちは。TIG DXチーム 1の村瀬です。

世の中コンテナ化の流れでEC2インスタンスを直接利用する機会が減ってきていますが、まだまだサーバにSSH接続する機会もあるかと思います。

今回はSSH相当の処理をよりセキュアに行えるSession Managerについて調査・検証してみました。

2020/04/23追記: こちらの記事もぜひ参考ください。

Session Managerとは

Session Manager はフルマネージド型 AWS Systems Manager 機能で、インタラクティブなワンクリックブラウザベースのシェル、または AWS CLI を介して Amazon EC2 インスタンスを管理できます。Session Manager は、インバウンドポートを開いたり、踏み台ホストを維持したり、SSH キーを管理したりすることなく、安全で監査可能なインスタンスの管理を提供します。Session Manager は、Amazon EC2 インスタンスへの簡単なワンクリックのクロスプラットフォームアクセスをエンドユーザーに提供しつつ、インスタンスへの制御されたアクセス、厳格なセキュリティプラクティス、インスタンスアクセスの詳細を含む、完全に監査可能なログを必要とする企業ポリシーに準拠することを容易にします。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html より

利用方法

手順1 サービスメニューからSystems Managerをクリック

手順2 セッションマネージャーをクリック

手順3 セッションの開始をクリック

手順4 似たような画面で同名のボタンですがインスタンスを選択してセッションの開始をクリック

するとSession Managerのコンソールが表示されます。
あとはSSHと同じ要領でコマンドが実行できます。

メリット

Session Managerを利用することで以下のメリットがあります。

・SSHが必要ないのでSSHクライアントがなくても気軽に利用できる。
・セキュリティグループのインバウンドのメンテナンスが不要
・SSHの鍵やパスフレーズの管理、ローテーションが不要

困りごと

そんな便利なSession Managerですが、プロジェクトメンバーから以下のような声が上がりました。

・セッションがすぐに切れるんだけど
・セッション時間が短いので伸ばしてくれない?

設定項目を見てもセッション時間の設定はありません。
どうやら、何らかの理由によりセッションがすぐに切断されてしまうようです。

プロジェクトメンバーはLinuxOSのEC2インスタンスに対してマネジメントコンソールにて使用している状況です。
その他の条件としては以下の通りです。

・エージェントのバージョン - 2.3.662.0
・プラットフォーム - Amazon Linux

調査・検証

まず、原因の仮説を立てます。
a.見落としているだけでセッション時間の設定が実はある?

b.ブラウザのタブで他AWSアカウントを開いている為にセッションが切れてしまっている?

c.マネジメントコンソールを使用しているから?CLIを使用すると切断されない?

d.同時に複数の接続をしているから?

※他にもいろいろありそうですが、検証時間の関係で省略してます。

a.見落としているだけでセッション時間の設定が実はある?

マネジメントコンソールの設定を確認しましたが設定項目はありませんでした。

b.ブラウザのタブで他AWSアカウントを開いている為にセッションが切れてしまっている?

複数AWSアカウントやユーザを利用しているときに起きるこれ↓を起こしてみます。

切断されず、影響ありませんでした。

c.マネジメントコンソールを使用しているから?CLIを使用すると切断されない?

そんなこともありませんでした。

d.同時に複数の接続をしているから?

マネジメントコンソールから複数のセッションを開始してみましたが、先勝ち、後勝ちなどなく同時に複数の接続が利用できます。

結果+

これまでの検証ではセッションが切断されてしまう原因を見つけられませんでしたm(__)m
このままではくやしいので、せめてどれぐらいで切断されてしまうのか測定してみました。

測定方法は以下のコマンドで10秒ごとに現在時刻を表示し、いつまでセッションが生きていたか確認します。

while sleep 10; do date; done

10分経過…

1時間経過…

3時間経過…

すぐに切断されることを証明しようといる時に限ってなかなか切れません。

!?

もしかしてこの測定をしていると切れないのでは?

その後、以下の3パターンで数回測定をしてみたところaのみが切断されることなく長時間セッションが接続されていました。
 a.フォアグラウンドで定期実行するパターン
 b.バックグラウンドで定期実行するパターン
 c.コマンドを実行せず放置するパターン

検証回数は少ないものの、検証した範囲ではフォアグラウンドで定期的にコマンドを実行し続けていればセッションは切断されませんでした。
マネジメントコンソールではエラーメッセージが表示されないので気が付きませんでしたがCLIの検証で「Your session timed out due to inactivity」とエラーメッセージが記載されており、ことからも画面に何らかの変更が行われていれば切断されないようです。

使い勝手はとても良いとは言えませんが、Session Managerにおける作業で時間が空くようであれば無害なコマンドを定期実行することでセッションを保持することができます。(そもそも論として一旦セッションを終了させればよいのかもしれませんが。。。)

さいごに

Session Managerは不意に切断されてしまうことがありますが、セキュアで非常に便利な機能であることには違いありません。
長時間利用する場合や、作業の途中で切断されては困る場合には不向きですが、特性を理解した上で利用するのが良いのではないでしょうか?
より良い方法をご存じの方がおりましたら教えていただけると幸いです。

なお、この記事を作成する上で以下のページを参考にさせていただきました。
https://qiita.com/serima/items/7260cef8a05d13ec6a47

こちらのSession Manager と踏み台サーバの共存構成 記事もおすすめです。


  1. 1.Technology Innovation Groupの略で、フューチャーの中でも特にIT技術に特化した部隊です。その中でもDXチームは特にデジタルトランスフォーメーションに関わる仕事を推進していくチームです。