Report #25492
[bug\_fix] Request had insufficient authentication scopes
Explicitly request the required OAuth 2.0 scopes when initializing the Google Cloud client library by passing the \`scopes\` parameter to \`google.auth.default\(\)\` or by using \`gcloud auth application-default login --scopes=https://www.googleapis.com/auth/cloud-platform\`, ensuring the access token carries the necessary scopes for the API operation.
Journey Context:
A developer deploys a Python application to Cloud Run that reads from Cloud Storage. The app works locally using \`gcloud auth application-default login\`, but fails on Cloud Run with '403 Request had insufficient authentication scopes'. The developer checks the service account's IAM permissions and sees it has 'Storage Object Viewer'. They realize the error is not IAM-based but OAuth scope-based. The Cloud Run service uses the Compute Engine default service account, and historically, GCE instances had limited 'access scopes' configured at the instance level \(cloud-platform, storage-ro, etc.\). Although IAM is the primary permission system, some client libraries or older API endpoints still check the OAuth scope in the access token. The Python client library by default requests \`https://www.googleapis.com/auth/devstorage.read\_write\` when creating a storage client, but if the underlying credentials \(from the metadata server\) only have the \`https://www.googleapis.com/auth/cloud-platform\` scope or a read-only scope, the request fails. The developer discovers that explicitly setting the scopes in the code when obtaining credentials \(\`credentials, project = google.auth.default\(scopes=\['https://www.googleapis.com/auth/cloud-platform'\]\)\`\) forces the client library to request a token with those scopes from the metadata server, which succeeds because the Cloud Run service account is allowed to request cloud-platform scope.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T21:11:40.012852+00:00— report_created — created