AWS CLI / API におけるセッション時間を整理・検証してみた
はじめに
前回の記事では、AWS マネジメントコンソールにおけるセッションタイムアウトの挙動を整理しました。
本記事では AWS CLI / API を利用した場合に、同様にセッション時間がどのように決まるのかを整理します。
結論
| 操作パターン | セッション時間の決まり方 |
|---|---|
| IAMユーザーのアクセスキーで直接 API を実行 | セッション概念なし(タイムアウトなし) |
| GetSessionToken で一時認証情報を取得 | 15分〜36時間 (デフォルト 12 時間) |
| AssumeRole で IAM ロールを引き受け | min(DurationSeconds, ロールの MaxSessionDuration)(デフォルト 1 時間) |
| ロール連鎖 (ロールから別ロールを AssumeRole) | min(DurationSeconds, 1 時間) |
それぞれについて順に整理します。
IAMユーザーのアクセスキーで API を実行する場合
IAM ユーザーの長期認証情報(アクセスキー)を使用して AWS CLI / API を実行した場合、セッションという概念は存在しません。
- 有効期限:なし
- セッションタイムアウト:なし
これは、アクセスキーが「長期認証情報」であり、明示的に無効化または削除しない限り有効であり続けるためです。
GetSessionToken で一時認証情報を取得する場合
GetSessionToken とは
GetSessionToken は、IAM ユーザーの長期的な認証情報(アクセスキー)を元に、有効期限付きの一時的な認証情報を発行する AWS Security Token Service(AWS STS)の API です。
この API を呼び出すことで、以下の情報を含む一時的な認証情報が返されます。
- AccessKeyId
- SecretAccessKey
- SessionToken
- Expiration(有効期限)
セッションの有効期限
GetSessionToken によって発行される一時的な認証情報の有効期間(Expiration)は、
以下の範囲で設定されます。
- デフォルト:12 時間(43,200 秒)
- 最短:15 分(900 秒)
- 最長:36 時間(129,600 秒)
===== 抜粋 =====
セッション期間
このGetSessionToken操作は、IAM ユーザーの長期 AWS セキュリティ認証情報を使用して呼び出す必要があります。IAM ユーザーによって作成された認証情報は、指定した期間有効です。有効期間は 900 秒(15 分)から最大 129,600 秒(36 時間)までの範囲で指定でき、デフォルトは 43,200 秒(12 時間)です。
===== 抜粋 =====
AssumeRole で IAM ロールを引き受ける場合
IAM ユーザーが AWS CLI / API から AWS Security Token Service(AWS STS)の AssumeRole を実行しIAM ロールを引き受けた場合、有効期限付きの一時的な認証情報が発行されます。
この一時的な認証情報のセッション時間は、次の 2 つの値によって決定されます。
- ロールに設定された 最大セッション期間(MaxSessionDuration)
- AssumeRole 実行時に指定する DurationSeconds
実際のセッション時間は、この 2 つのうち短いほうが採用されます。
- セッション時間 = min(DurationSeconds, MaxSessionDuration)
AssumeRole によって発行される一時的な認証情報の有効期間は、以下の条件を満たす必要があります。
- 最短:900 秒(15 分)
- 最長:ロールに設定された MaxSessionDuration
- MaxSessionDuration は 1 時間〜12 時間 の範囲で設定可能
===== 抜粋 =====
持続時間(秒)
ロールセッションの継続時間(秒単位)。指定できる値は、900 秒(15分)から、ロールに設定されている最大セッション継続時間までです。
===== 抜粋 =====
ロール連鎖の場合
AWS CLI / API では、ロールの一時的な認証情報を使用してさらに別のロールを引き受けることでロール連鎖が発生します。
ロール連鎖時に発行される一時的な認証情報のセッション時間は、次の条件によって決定されます。
- セッション時間 = min(DurationSeconds, 1 時間)
ロール連鎖の場合、AssumeRole によって発行される一時的な認証情報の有効期間には、以下の制約が適用されます。
- 最短:900 秒(15 分)
- 最長:3600 秒(1 時間)
DurationSeconds には 1 時間を超える値を指定することはできず、超過した場合、AssumeRole の呼び出しはエラーとなります。
===== 抜粋 =====
ロールの連鎖では、AWS マネジメントコンソール、AWS CLI、 または AWS API ロールセッションが最長 1 時間に制限されます。これは、個々のロールに対して設定されている最大セッション期間に関係なく適用されます。AssumeRole API オペレーションを使用してロールを引き受ける場合は、DurationSeconds パラメータを使用してロールセッションの期間を指定できます。パラメータの値は、ロールの最大セッション期間設定によって、最大 43200 秒 (12 時間) まで指定できます。ただし、ロールの連鎖を使用してロールを引き受ける場合、DurationSeconds パラメータ値で 1 時間を超える値を指定すると、オペレーションは失敗します。
===== 抜粋 =====
検証
それぞれの操作パターンについて、AWS CLI を用いて有効期限の挙動を確認しました。
IAM ユーザー や IAM ロール は前回の記事と同じものを使用しています。

GetSessionToken
IAM ユーザー(chain-test-user)の長期認証情報を使用して、GetSessionToken で一時認証情報を取得した時の挙動を確認します。
DurationSecondsを 15 分未満に設定
aws sts get-session-token \
--serial-number arn:aws:iam::<ACCOUNT_ID>:mfa/chain-test-user \
--token-code <MFA_CODE> \
--duration-seconds 899
エラーメッセージ
Parameter validation failed:
Invalid value for parameter DurationSeconds, value: 899, valid min value: 900
GetSessionToken における DurationSeconds の最短値は 900 秒(15 分) であることが確認できます。
DurationSeconds を 36 時間より長く設定
aws sts get-session-token \
--serial-number arn:aws:iam::<ACCOUNT_ID>:mfa/chain-test-user \
--token-code <MFA_CODE> \
--duration-seconds 129601
エラーメッセージ
An error occurred (ValidationError) when calling the GetSessionToken operation: 1 validation error detected: Value '129601' at 'durationSeconds' failed to satisfy constraint: Member must have value less than or equal to 129600
GetSessionToken における DurationSeconds の最大値は 129,600 秒(36 時間) に制限されていることが確認できます。
AssumeRole
IAM ユーザー(chain-test-user)を呼び出し元として、IAM ロール(chain-test-role-b)を AssumeRole した場合の挙動を確認します。
DurationSeconds を 15 分未満に設定した場合
aws sts assume-role \
--role-arn arn:aws:iam::<ACCOUNT_B>:role/chain-test-role-b \
--role-session-name role-b-session \
--duration-seconds 899
エラーメッセージ
Parameter validation failed:
Invalid value for parameter DurationSeconds, value: 899, valid min value: 900
AssumeRole においても、DurationSeconds の最短値は 900 秒(15 分) であることが分かります。
DurationSeconds を MaxSessionDuration より大きく設定した場合
aws sts assume-role \
--role-arn arn:aws:iam::<ACCOUNT_B>:role/chain-test-role-b \
--role-session-name role-b-session \
--duration-seconds 3601
エラーメッセージ
An error occurred (ValidationError) when calling the AssumeRole operation: The requested DurationSeconds exceeds the MaxSessionDuration set for this role.
セッション時間の上限は 引き受けるロールに設定された MaxSessionDuration によって制限されることが確認できます。
ロール連鎖
IAM ロール(chain-test-role-b)を呼び出し元として、別の IAM ロール(chain-test-role-c)を AssumeRole した時の挙動を確認します。
- ロールB の最大セッション期間:1 時間
- ロールC の最大セッション期間:12 時間
DurationSeconds を 15 分未満に設定した場合
aws sts assume-role \
--role-arn arn:aws:iam::<ACCOUNT_C>:role/chain-test-role-c \
--role-session-name role-c-session \
--duration-seconds 899
エラーメッセージ
Parameter validation failed:
Invalid value for parameter DurationSeconds, value: 899, valid min value: 900
ロール連鎖時であっても、DurationSeconds の最短値は 900 秒(15 分) で共通であることが分かります。
DurationSeconds を 1 時間より大きく設定した場合
aws sts assume-role \
--role-arn arn:aws:iam::<ACCOUNT_C>:role/chain-test-role-c \
--role-session-name role-c-session \
--duration-seconds 3601
エラーメッセージ
An error occurred (ValidationError) when calling the AssumeRole operation: The requested DurationSeconds exceeds the 1 hour session limit for roles assumed by role chaining.
ロールC の最大セッション期間は 12 時間ですが、ロール連鎖時には セッション時間が 1 時間に制限される ことが確認できます。
また、ロール連鎖に成功した場合の Expiration は呼び出し元であるロールBの Expiration に依存せず、ロールC を AssumeRole した時点から 1 時間後となりました。
まとめ
今回は GetSessionToken と AssumeRole におけるセッション時間について整理し、検証を行いました。参考になれば幸いです。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました








