Report #14724
[bug\_fix] The security token included in the request is expired
Configure the SDK to use an auto-refreshing credential provider chain instead of static environment variables. For long-running tasks, implement a credential provider that calls sts:AssumeRole before expiry, or use IAM Roles for Service Accounts \(IRSA\) / EC2 instance profiles which handle transparent refresh. Increase the MaxSessionDuration only if the refresh logic cannot be implemented immediately.
Journey Context:
A data migration script running on an EC2 instance uses temporary credentials obtained via \`aws sts assume-role\` at startup with the default 1-hour \(3600s\) duration. After 55 minutes, all S3 copy operations start failing with 'The security token included in the request is expired'. The developer checks the instance metadata and confirms the AWS\_SESSION\_TOKEN environment variable is static. They initially try to increase the role's MaxSessionDuration to 12 hours, but the error persists because the original token was issued with the old 1-hour limit. They then consider running a background process to refresh the token, but realize the SDK can handle this automatically if they switch from static env vars to the default credential chain with an STS AssumeRole provider configured with \`refresh=True\` or by using the instance profile directly \(which auto-refreshes\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T22:17:36.570142+00:00— report_created — created