Session Manager を使用して EC2 にコマンドを実行している最中に、IAM Role のセッションが切れるとどうなるか、確認してみました。(AWS IAM Identity Center)

記事タイトルとURLをコピーする

こんにちは🐱 カスタマーサクセス課の山本です。

以下の記事を書いていて気になったので確認してみました。 記事内にも記載している通り、IAM Role のセッション時間はデフォルト 1 時間、最大 12 時間です。 blog.serverworks.co.jp

また、以下の記事から Session Manager のアイドルタイムアウトは 1 〜 60 分を設定できます。 blog.serverworks.co.jp

「IAM Role でのセッション時間中に、Session Manager を使用してEC2 に時間のかかるコマンドを実行しました。すると、Session Manager のアイドルタイムアウトを迎えるよりも先に、 IAM Role のセッションが切れました。」 ということが起こり得ます。
IAM Role の残りセッション時間が少ない状態で、Session Manager からEC2 に時間のかかるコマンドを実行すると再現しそうです。
どうなるのか気になる・・・ということで、実際に見てみました。

以下の検証をしました。

検証内容

前提

AWS IAM Identity Center を使用して、アクセスポータル経由で IAM Role (許可セット) を使用してAWSアカウントにログインします。

その際に、

  • AWS マネジメントコンソールにログインする方法 ( Management console )
  • AWS CLI 用に認証情報を発行する方法 ( Command line or programmatic access )

があります。この2つについて検証します。
アクセスポータルにもセッション時間があるものの、検証を簡素に行うため、長めに取りました。(1日) →アクセスポータルの最大セッション時間は IAM Role のセッション時間に干渉しませんでした。失礼しました。

以下のような状態です。

  • アクセスポータルの最大セッション時間の残り時間 > Session Manager のアイドルタイムアウトの残り時間 > IAM Roleの最大セッション時間の残り時間

設定

  • IAM Role のセッション時間
    • 1 時間
      • (設定可能な最小値)
  • Session Manager のアイドルタイムアウト
    • 1 時間 (60分)
      • (設定可能な最大値)

検証内容

  1. IAM Role を使用し AWSマネジメントコンソール/ AWS CLI にログイン (IAM Role でセッションを作成)する。
  2. IAM Role のセッション時間 が残り少なくなった頃に Session Manager を使用し、EC2 に接続する。参考:セッションを開始する。AWS CLI については start-session コマンドを利用する。
  3. EC2に無限ループするコマンドを実行し放置する。コマンドがどこまで実行されたか確認するためにログを出力して残しておく。
  4. IAM Role のセッションがタイムアウトする時間に Session Manager で実行中のコマンドがどうなるかを確認する。

想定する結果

異なるサービスの異なるセッションであるため、Session Manager の接続セッションは、IAM Role のセッションタイムアウトの影響は受けないと想定します。
もし、AWSマネジメントコンソールからSession Manager を使用していると、マネジメントコンソールからサインアウトされます。その際に 利用者は Session Manager のセッション内容を見れなくなるのでは、と思います。その際に、Session Manager のセッション自体は残るので、実行中のコマンドは継続するのではと思います。

以下、詳細。

  • まず、Session Manager のアイドルタイムアウトよりも先に、IAM Role のセッションタイムアウトが訪れる
    • 次に AWSマネジメントコンソールの場合はWEBブラウザで強制サインアウトされる。そのため、Session Manager を使用した EC2 への接続も画面上では切れてしまい、インタラクティブには見れなくなる。
      • Session Manager から EC2 への接続セッションは残っており、Session Manager の管理画面には「接続済み」と表示が出続ける。Session Manager のアイドルタイムアウトを迎えるまでは、無限ループのコマンドを実行し続ける。
      • 新規にSession Manager を使用した EC2 への接続をするには、AWSマネジメントコンソールに再ログインが必要となる。
    • AWS CLI の場合は強制サインアウトされないため、Session Manager を使用した EC2 への接続セッションは維持する。コマンドの実行状況もインタラクティブに確認できる。
      • Session Manager の管理画面には「接続済み」と表示される。Session Manager のアイドルタイムアウトを迎えるまでは、セッション内のコマンドが実行され続ける。
      • 新規にSession Manager を使用した EC2 への接続をするには、AWS CLI の新しい認証情報が必要となる。

[結果]AWSマネジメントコンソールの場合

想定通りでした。

IAM Role のセッションタイムアウトが訪れ、WEBブラウザで強制サインアウトされました。WEB画面上で実行中のコマンドは確認できなくなりました。

強制サインアウトした後にも、Session Manager の管理画面には「接続済み」と表示されていました。

強制サインアウトした後にもコマンド実行は続いていました。
Session Manager のアイドルタイムアウトを迎えるまでのコマンド実行ログが、 EC2 上には残っていました。

しばらくすると「接続済み」となっていた Session Manager のセッションは消えていました。

[結果]AWS CLI の場合

想定通りでした。

IAM Role のセッションタイムアウトが訪れたものの、Session Manager を使用した EC2 への接続は維持し続けました。

Session Manager の管理画面には「接続済み」と表示されていました。

Session Manager のアイドルタイムアウトを迎えると、start-session コマンドが終了しました。その後には、IAM Role の認証情報が期限切れになっていて、再取得しないと接続 (start session)できませんでした。

まとめ

AWS マネジメントコンソール と AWS CLI で多少の違いはあるものの、IAM Role のセッションが切れても Session Manager から EC2 への接続は残っていました。
Session Manager のアイドルタイムアウト時間に到達するまで、実行中のコマンドは実行され続けました。
AWS マネジメントコンソールの場合は、WEBブラウザ上で強制的にサインアウト画面になってしまい、コマンドの実行結果をインタラクティブには確認できません。
AWS CLI では、Session Manager のアイドルタイムアウト時間に到達するまで、コマンドの実行結果をインタラクティブに確認できました。

他、IAM ユーザー が IAM Role にスイッチロールした場合

AWSマネジメントコンソールで、 IAM ユーザー が IAM Role にスイッチロールした場合は、IAM Role のセッション時間が過ぎると「再ロード」ボタンが出ます。 この場合は ボタンを押したり、WEBブラウザのリロードをすると、Session Manager から EC2 への接続セッションについて、同じものを再利用できました。

2023/06/22 追記:何回か試したところ、新規セッションが作成されることもあったので、保証はできません。

また、AWS CLI で IAM ユーザー が IAM Role にスイッチロールした場合には、ほとんど同じ結果でした。
唯一、プロファイルに認証情報(アクセスキーなど)を直接設定しないため、IAM Role の認証情報が期限切れになることはありませんでした。 参考:docs.aws.amazon.com

余談

近所の山に登ってきました。爽やかな景色でした。

山本 哲也 (記事一覧)

カスタマーサクセス部のエンジニア(一応)

好きなサービス:ECS、ALB

趣味:トレラン、登山(たまに)