Report #64395
[bug\_fix] DurationSeconds exceeds the 1 hour session limit for assumed roles when using AWS role chaining
Assume the final target role directly using long-term credentials \(IAM user\) or adjust the application architecture to avoid role chaining \(e.g., using a Lambda execution role with necessary permissions instead of assuming a second role\). If role chaining is unavoidable, limit the DurationSeconds request to 3600 seconds \(1 hour\). The root cause is a hard AWS limit: when you call AssumeRole using temporary credentials \(from a previous AssumeRole, GetSessionToken, or SSO\), the maximum session duration is capped at 1 hour, regardless of the role's MaxSessionDuration setting \(which can be up to 12 hours\).
Journey Context:
Developer is building a deployment tool that first assumes a 'jump' role in a central security account, then from there assumes a 'target' role in a workload account to perform deployments. They configure the AWS SDK to request a 4-hour session for the second assumption to allow long-running deployments. When the code executes, the first AssumeRole succeeds and returns credentials with expiration in 1 hour \(the jump role's max\). The second AssumeRole call fails with 'DurationSeconds exceeds the 1 hour session limit for assumed roles'. The developer checks the target role's MaxSessionDuration in IAM console and sees it's set to 12 hours, confused why they can't get 4 hours. They search the error and find AWS documentation stating that when you use role chaining \(assuming a role using temporary credentials\), the maximum session duration is 1 hour. They realize they must either request only 3600 seconds for the second role \(requiring their deployment to complete within 1 hour or implement credential refresh logic mid-deployment\) or re-architect to assume the target role directly using long-term credentials \(IAM user\) or ECS task role with the necessary cross-account permissions, bypassing the jump role assumption in code.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T14:34:39.371891+00:00— report_created — created