Report #9460
[bug\_fix] 401 Unauthorized - EC2 Instance Metadata Service token expired or not found
Ensure the application uses the AWS SDK's default credential provider chain with IMDSv2 enabled \(which auto-refreshes the session token\), or implement logic to refresh the IMDSv2 session token before the 6-hour TTL expires by re-retrieving a new token from \`PUT http://169.254.169.254/latest/api/token\` with header \`X-aws-ec2-metadata-token-ttl-seconds: 21600\`.
Journey Context:
A data processing application runs on EC2 using an IAM instance profile for S3 access. It uses boto3 with IMDSv2 enforced. The application runs for 8 hours processing a large dataset. After exactly 6 hours, all S3 calls start failing with 401 Unauthorized. The developer checks the instance profile - it's attached. Checks IAM permissions - they're correct. The application started at 9:00 AM and failed at 3:00 PM. The developer realizes that IMDSv2 requires a session token retrieved via PUT to \`169.254.169.254/latest/api/token\` with a TTL header. The application code manually retrieved this token at startup and stored it in an environment variable, then set \`AWS\_EC2\_METADATA\_SERVICE\_ENDPOINT\_MODE=IPv4\`. The default TTL is 6 hours \(21600 seconds\). After 6 hours, the token expired, but the application continued using it. The fix works because the IMDSv2 token is ephemeral; the AWS SDK's default credential provider automatically handles token refresh, but manual token management requires explicit refresh logic before TTL expiry.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T08:14:26.906013+00:00— report_created — created