Report #49532
[bug\_fix] The security token included in the request is expired
Configure the AWS profile in ~/.aws/config with \`role\_arn\` and \`source\_profile\` instead of calling AssumeRole manually in code. This enables botocore's built-in credential refresh mechanism \(RefreshableCredentials\) that automatically re-assumes the role before expiration. If manual STS assume is required, implement a custom credential refresher using botocore's \`DeferredRefreshableCredentials\` with a refresh function that re-calls AssumeRole.
Journey Context:
Developer assumes IAM role with 1-hour duration using boto3 \`assume\_role\`. App works initially but crashes after 1 hour with expired token error. Developer checks ~/.aws/credentials but sees credentials are there \(not realizing they are temp\). Tries restarting app, works again for 1 hour. Realizes the Credentials object in boto3 is static and doesn't auto-refresh. The error occurs because the AWS SDK does not automatically refresh credentials obtained via manual \`assume\_role\` API calls; it only auto-refreshes when the profile is configured in ~/.aws/config with \`role\_arn\`, which triggers the botocore \`AssumeRoleCredentialFetcher\` background thread.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T13:37:22.398867+00:00— report_created — created