IAM Identity Center 経由のロール連鎖でセッション時間を延ばす方法を教えてください
困っていること
IAM Identity Center(旧AWS SSO)でマネジメントコンソールにサインインしたあと、別アカウントの IAM ロールにスイッチロールして作業をしています。
しかし、1 時間ほどで自動的にセッションが切断(Session Expired) されてしまいます。
IAM ロールの最大セッション時間を 12 時間に設定しているのに、延長できないのはなぜでしょうか。また、延長する方法があれば教えてください。

どう対応すればいいの?
原因
ブログ執筆時点の AWS 仕様では、ロールの連鎖を行っている場合、セッション時間は 1 時間に制限されています。
IAM Identity Center(SSO)経由でログインしたあと、さらに AssumeRole によって他の IAM ロールに切り替えている状態が 「ロールの連鎖」 に該当します。
この場合は IAM ロール設定で最大セッション期間を 12 時間に設定していても、セッション時間の延長はできません。
回避方法
フェデレーション先アカウントに直接 SSO 用ロールを作成し、SSO 経由でそのロールに直接ログインすることをご検討ください。
| 回避前 | 回避後 |
|---|---|
| SSOログイン → フェデレーション用ロールA → 別アカウントのロールBにスイッチ | SSOログイン → (直接)ロールBにフェデレーション |
その場合は、最大 12 時間までセッションの有効期間を設定可能です。
¹ 1 つのロールの認証情報を使用して別のロールを引き受けることをロールの連鎖と言います。ロールの連鎖を使用する場合、ロールのセッション期間は 1 時間に制限されます。これは、AWS Management Console ロールの切り替え、AWS CLI、API オペレーションに適用されます。この制限は、ユーザー認証情報からロールを最初に引き受ける場合や、インスタンスプロファイルを使用して Amazon EC2 インスタンスで実行しているアプリケーションには適用されません。
² この設定の値は 1 時間~ 12 時間です。最大セッション期間設定の修正の詳細については、「IAM ロールの管理」を参照してください。この設定は、ロールの認証情報を取得したときにリクエストできる最大セッション期間設定を決定します。たとえば、AssumeRole* API オペレーションを使用してロールを引き受ける場合は、DurationSeconds パラメータの値を使用してセッションの期間を指定できます。このパラメータを使用して、ロールセッションの期間を 900 秒 (15 分) からそのロールの最大セッション期間設定まで指定できます。コンソールでロールを切り替える IAM ユーザーには、最大セッション期間、またはユーザーのセッションの残り時間のいずれか短い方が付与されます。ロールに 5 時間の最大期間を設定することを想定しています。コンソールに 10 時間(デフォルトの最大 12 時間)サインインした IAM ユーザーがロールに切り替わります。使用可能なロールセッション期間は 2 時間です。ロールの最大値を確認する方法については、このページで後述する「ロールの最大セッション期間を更新する」を参照してください。






