SECURITY WARNING: Never run commands you don't understand. Always review code before execution. Use at your own risk.
Cloud New Added 9 September 2026

AWS: The security token included in the request is expired

The temporary credentials issued by STS have passed their expiry, which is one hour by default for an assumed role. A long build, a laptop resumed from sleep with a stale cache, or a clock that has drifted by more than a few minutes all produce it even though credentials are clearly present.

Quick fix

Read the commands before running them. Anything that restarts a service, deletes data or changes permissions should be tried on a non-production system first.

Quick fix
# Who am I, and does anything work at all?
aws sts get-caller-identity

# SSO sessions expire on their own schedule
aws sso login --profile prod

# Assumed roles: ask for a new session, up to the role's maximum
aws sts assume-role --role-arn arn:aws:iam::111122223333:role/deploy \
  --role-session-name ci --duration-seconds 3600

# Clock skew gives the same message with perfectly valid credentials
timedatectl status
sudo chronyc makestep

# Long jobs: let the SDK's credential provider refresh, rather than
# copying keys into environment variables once at the start

How to diagnose Cloud errors

Cloud provider errors are overwhelmingly one of two things: IAM (the caller is not permitted, or the credentials are not the ones you think) or quota (the account limit was reached). Providers deliberately return the same vague AccessDenied for a missing permission, a deny in a boundary or SCP, and a resource policy that excludes you, so the fix begins with identifying which identity made the call.

If the quick fix above does not resolve it, work through these steps. They apply to this whole class of error, not just to this one message, which is usually what saves the time.

  1. Confirm the identity first: aws sts get-caller-identity, az account show, or gcloud auth list. An unexpectedly large share of AccessDenied errors are the right policy on the wrong principal.
  2. Use the provider's policy simulator (IAM Policy Simulator, gcloud policy-troubleshoot) rather than reading policy JSON. It accounts for boundaries, SCPs and resource policies that are invisible in a single document.
  3. Check CloudTrail / Activity Log / Cloud Audit Logs for the denied call. The log entry names the exact action and resource ARN, which the client-side error usually omits.
  4. For quota errors, look up the current limit and the current usage before requesting an increase: many quotas are per-region and per-account, and the resource you think is idle may be counted.
  5. Verify the region. A resource that "does not exist" very often exists in a different region than the one your CLI profile defaults to.

Tools worth reaching for

  • aws sts get-caller-identity
  • IAM Policy Simulator
  • gcloud policy-troubleshoot
  • CloudTrail / Activity Log

Authoritative references

Primary documentation for this error, worth reading before applying any fix in production.

docs.aws.amazon.com

Related Cloud errors

See all 25 Cloud errors →

Browse other categories

Something missing or wrong?

This entry is maintained by hand. If the fix is out of date, incomplete, or you have a better one, email a correction and it will be reviewed.