Report #87039
[bug\_fix] AWS CLI / SDK error: 'The security token included in the request is expired' when using AWS SSO \(IAM Identity Center\) credentials
Run 'aws sso login --profile ' again to refresh the temporary SSO credentials stored in ~/.aws/cli/cache and ~/.aws/sso/cache. If running in automation, switch to IAM role assumed via 'aws sts assume-role' or use an IAM user / instance profile / IRSA / ECS task role whose credentials you rotate through your secret manager, because SSO tokens are designed for interactive use and cannot be renewed non-interactively.
Journey Context:
You run 'aws s3 ls' and get an expired-token error even though 'aws configure list' shows a profile. You check ~/.aws/credentials and it looks empty or stale. You dig into ~/.aws/sso/cache and see a JSON token file whose 'expiresAt' is in the past. The rabbit hole: AWS SSO does not store long-lived keys in ~/.aws/credentials; it stores an SSO access token and exchanges it for short-term STS credentials that land in ~/.aws/cli/cache. The CLI refreshes those STS credentials silently while the SSO token is valid, but once the underlying SSO token expires \(often 8-12 hours\), the CLI can no longer refresh anything. You think the fix is exporting new keys, but the real fix is re-authenticating the SSO session. After 'aws sso login', the CLI rewrites the SSO cache token and can once again vend fresh STS credentials for that profile. In CI/CD this pattern is wrong because no human can click the browser prompt, which is why the fix is to move to an IAM role assumption path designed for unattended use.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T04:41:17.264991+00:00— report_created — created