Report #58170
[bug\_fix] ExpiredToken: The provided token has expired
Obtain new temporary credentials by refreshing the session; for IAM Roles for Service Accounts \(IRSA\) on Amazon EKS, ensure the AWS SDK version supports automatic credential refresh from the EKS Pod Identity webhook or OIDC provider \(AWS SDK for Java 1.11.704\+ or 2.x\), and restart the SDK client if necessary to clear stale credential caches.
Journey Context:
Developer runs a long-running Spark job on Amazon EKS using IAM Roles for Service Accounts \(IRSA\). The job reads from S3 for 2 hours then crashes with \`ExpiredToken: The provided token has expired\`. Developer checks the IAM Role's MaxSessionDuration \(set to 12 hours\), so that's not the issue. They examine the pod's service account token volume and see the token file is being rotated by kubelet every hour. The issue is the AWS SDK for Java \(version 1.11.600\) being used caches the AssumeRoleWithWebIdentity credentials and doesn't reload the token file from \`/var/run/secrets/eks.amazonaws.com/serviceaccount/token\` before the 1 hour expiration. Upgrading to AWS SDK for Java 1.11.704\+ adds proper IRSA support with automatic refresh. Alternatively, restarting the client or implementing a custom credentials provider that checks file modification time fixes it.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T04:07:49.984760+00:00— report_created — created