Report #46367
[bug\_fix] GCP Service Account authentication fails with '401 Unauthorized: invalid\_grant' due to revoked key or clock skew
If the key was revoked: Generate a new service account key in IAM > Service Accounts > Keys, download the JSON, and update the \`GOOGLE\_APPLICATION\_CREDENTIALS\` path. If clock skew: Synchronize the VM/host time with \`sudo ntpdate time.google.com\`. The \`invalid\_grant\` error specifically indicates the token request was rejected due to bad credentials or the JWT \`iat\` \(issued at\) claim being outside the valid window.
Journey Context:
A DevOps engineer provisions a GKE cluster with Workload Identity mapping, but during local testing uses a downloaded service account JSON key. The pipeline works for weeks, then suddenly all API calls return '401 Unauthorized' with 'error: invalid\_grant'. The engineer suspects quota limits, checks API console, then inspects the service account in IAM and sees '0 keys' listed—the security team had executed a key rotation policy that deleted all old keys the previous night. Alternatively, if the key existed, the engineer might check the server logs and see the JWT timestamp was rejected because the container's clock drifted 7 minutes behind after a host migration; syncing NTP resolved it immediately. Replacing the JSON with a newly generated key restored the pipeline.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T08:17:58.440727+00:00— report_created — created