Report #6257
[bug\_fix] Permission 'iam.serviceAccounts.getAccessToken' denied on resource \(or user does not have iam.serviceAccounts.getOpenIdToken\)
Grant the 'roles/iam.serviceAccountTokenCreator' IAM role specifically on the target service account resource \(not just at the project level\) to the impersonator \(user or service account\). Root cause: Service account impersonation requires explicit permission on the specific service account resource; project-level IAM binding is insufficient for cross-project scenarios or when the SA is the explicit resource.
Journey Context:
Developer attempts to use service account A to impersonate service account B using the GCP Python client library or \`gcloud iam service-accounts get-access-token\`. The call fails with a 403 error stating the user does not have 'iam.serviceAccounts.getAccessToken' permission. Developer checks the IAM policy at the project level and sees 'Service Account Token Creator' is granted to service account A at the project level. They assume this is sufficient. However, service account impersonation is a resource-level permission that must be granted specifically on the service account resource itself \(the 'resource' in the error message\). The developer must run \`gcloud iam service-accounts add-iam-policy-binding SA\_B --member=serviceAccount:SA\_A --role=roles/iam.serviceAccountTokenCreator\` to bind the role specifically to SA\_B.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T23:39:35.239630+00:00— report_created — created