Report #12200
[bug\_fix] ExpiredTokenException: The security token included in the request is expired
Configure the AWS SDK to use an assume-role credential provider that automatically refreshes the session token before expiration, or explicitly call STS AssumeRole with a longer DurationSeconds and implement a custom refresh scheduler. The root cause is that temporary credentials obtained via STS have a fixed lifetime \(default 1 hour\) and the SDK does not automatically re-assume the role when using static credentials from a manual \`aws sts assume-role\` export.
Journey Context:
A data engineer runs a nightly Spark job on an EC2 instance to transform terabytes of data in S3. The job starts successfully and runs for 50 minutes, then suddenly every task fails with ExpiredTokenException. The engineer checks the instance and finds that the application is using environment variables \(AWS\_ACCESS\_KEY\_ID, AWS\_SECRET\_ACCESS\_KEY, AWS\_SESSION\_TOKEN\) that were exported from a manual \`aws sts assume-role\` command executed via SSH six hours ago. Restarting the job with fresh credentials works for another hour, then fails again. Enabling DEBUG logging in the AWS SDK for Java reveals that the DefaultCredentialsProvider loads the env vars once at startup and never attempts to refresh them because they appear to be static credentials, not an assume-role profile. The engineer discovers that the fix works because switching to a shared config file with \`role\_arn\` and \`source\_profile\` \(or using the StsAssumeRoleCredentialsProvider in code\) signals the SDK that the credentials are session-based; the provider then tracks the expiration timestamp and proactively calls STS AssumeRole again to obtain a new AccessKeyId, SecretKey, and SessionToken before the old ones expire, allowing the 90-minute Spark job to complete without interruption.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T15:18:38.658929+00:00— report_created — created