注釈:文章にわかりにくい部分があったため、記載を全体的に少し修正しました。(2023/5/11 AM)
こんにちは。😺
技術課の山本です。
PC端末やサーバーにスクリーンセーバー設定を入れておくと、画面ロックをし忘れた時にも、少し経てば自動でロックが掛かるため、安心ですよね。
セキュリティ要件が厳しい場所ですと、15 分以上端末を触っていない場合には画面ロックすることを義務付けていたりもします。
AWS EC2 をご利用の場合には、Systems Manager のセッションマネージャーを用いて、WEBブラウザーからサーバーOSにログインすることがあると思います。
セッションマネージャーでは「アイドルタイムアウト」を設定することで、一定時間の経過後に自動でセッションを切ることができます。
Google Chrome で開いたセッションマネージャーの画面:
セッションが切れた際の画面:
セッションマネージャーのアイドルタイムアウト設定
セッションマネージャーを使って、EC2 インスタンスに接続している時に、何も操作をしない時間が続いた際にはセッションが切れます。
デフォルトは 20 分です。1〜60 分の設定が可能です。
デフォルトでは、セッションは 20 分間非アクティブになった後にタイムアウトします。
引用元:アイドルセッションのタイムアウト値を指定します。 - AWS Systems Manager
設定画面です。1分を設定してみました。
なお、コマンドの実行途中であっても、ユーザーの操作がない時には、アイドルタイムアウトによってセッションが切れます。
セッションが切れた場合には、実行中のコマンドもそのタイミングで終了します。
セッションが切れる際に、セッションの子プロセスであるコマンドも終了するためです。
以下は、Windows Server 2022 を使った例です。
アイドルタイムアウトを 1 分に設定し、120 秒 sleep する処理を実行します。
Get-Date; sleep 120; Get-Date
セッションが切れた際の画面 :
120 秒 sleep する処理の間にタイムアウトの 1 分を迎え、セッションが切れました。
上記コマンド実行時に、OS上でのプロセスの状態を プロセス エクスプローラー - Sysinternals | Microsoft Learn を使用し確認したところ、セッションの親プロセスは、「ssm-session-worker.exe」 でした。
セッションがアイドルタイムアウトすると、子プロセスの「powershell.exe」や他の子プロセスも一緒に消えていました。
消えた後の画面です。「ssm-session-worker.exe」というプロセスが 2 つから 1つになりました。
試しに 120 秒 sleep する処理の前後に、ファイルへの書き込み処理を入れてみたところ、タイムアウトした後の書き込みはされていませんでした。
echo aa > a.txt ; sleep 120; echo bb > a.txt
120 秒 sleep する処理でタイムアウトしたため、後続のファイル書き込み処理の結果 ("bb") はありません。
セッションマネージャーのポートフォワーディング機能を使用し、EC2 (Windows) に RDP しているとき
とても前に、SSM のポートフォワーディング機能に関するブログを書きました。
AWS Systems Manager のポートフォワーディング機能がリリースされました - サーバーワークスエンジニアブログ
ポートフォワーディングについても、セッションマネージャーの機能であるため、セッションマネージャーのアイドルタイムアウトが適用されます。
接続コマンド例:
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389"
アイドルタイムアウトになった際には、接続が切れます。
接続が切れた画面:
しかし、ポートフォワーディング機能を使用して、EC2 に RDP している時には、セッションはアイドルタイムアウト時間を経過しても、切れませんでした。
接続が切れません。
アイドルタイムアウト時間を経過しても、RDP が切れません。
社内の Windows に詳しい人に聞くと、「デスクトップの時計描写などのために接続元と定期的に通信が発生しているため、RDPでは無操作状態でも何らかの通信が発生している」とのことでした。
アイドルタイムアウトしない理由がわかりました。
RDP の接続タイムアウトについては、Windows OS 上で設定するしかなさそうです。
ローカルグループポリシーで以下のように設定します。Active Directory (AD) 環境の場合には AD のグループポリシーでも設定可能です。
「コンピューターの構成」→「管理用テンプレート」→「Windowsコンポーネント」→「リモートデスクトップサービス」
→「リモートデスクトップセッションホスト」
→「セッションの時間制限」
→「アクティブでアイドル状態になっているリモートデスクトップサービスセッションの制限時間を設定する」
アイドルセッションの制限時間を設定します。「適用」を押します。
グループポリシーを以下コマンドで反映します。
gpupdate /force
設定してみたところ、設定した時間で RDP のセッションが自動的に切れました。
この表示の 数分後にセッションが切れました。
ポートフォワーディング接続も切れていました。
なお、確認の際には「Microsoft Remote Desktop」アプリを使用しました。
PC は Macbook Pro (M2) です。
まとめ
Systems Manager のセッションマネージャーでは「アイドルタイムアウト」を設定できます。
ユーザーの操作がなく一定時間経過したときに、自動でセッションを切る機能です。
ポートフォワーディングについても、セッションマネージャーの機能であるため、セッションマネージャーのアイドルタイムアウトが適用されます。
しかし、ポートフォワーディングを使用して RDP 接続をする際には、アイドルタイムアウトが効きません。
RDP プロトコルは、画面描画などの際に「ユーザー操作」とみなされる通信が発生しているためです。
RDP の接続タイムアウトについては、Windows OS 上で設定するしかなさそうです。
余談
山の景色を貼っておきますね。
山本 哲也 (記事一覧)
カスタマーサクセス部のエンジニア。2024 Japan AWS Top Engineers に選んでもらいました。
今年の目標は Advanced Networking – Specialty と Machine Learning - Specialty を取得することです。
山を走るのが趣味です。今年の目標は 100 km と 100 mile を完走することです。 100 km は Gran Trail みなかみで完走しました。OSJ koumi 100 で 100 mile 砕け散りました。どこかで 100 mile やりたいです。
基本的にのんびりした性格です。座右の銘は「いつか着く」