Report #78263
[bug\_fix] GCP 'IAM permission denied' or 'does not have storage.objects.get access' \(Primitive vs Predefined Roles\)
Grant the specific predefined IAM role \(e.g., roles/storage.objectAdmin\) instead of relying on primitive roles like 'Editor' or 'Owner'. Primitive roles often lack specific permissions for newer services like Cloud Armor, Vertex AI, or specific Cloud Storage operations like 'storage.objects.get' on requester-pays buckets. Apply the role at the resource level \(bucket/project\) and ensure there are no DENY policies overriding the permission.
Journey Context:
Developer creates a service account for a data pipeline and assigns the 'Editor' primitive role at the project level, assuming this grants full access. The pipeline successfully creates BigQuery datasets but fails when attempting to read from a Cloud Storage bucket with '403 Forbidden: does not have storage.objects.get access to the Google Cloud Storage object'. The developer checks IAM Policy Analyzer and sees the service account has the 'Editor' role. They consult the GCP documentation and discover that primitive roles \(Owner, Editor, Viewer\) do not automatically grant all permissions for all GCP services, especially for specific Cloud Storage operations or when accessing resources with additional security controls like VPC Service Controls. The developer removes the Editor role and grants 'roles/storage.objectViewer' specifically on the bucket and 'roles/bigquery.dataEditor' at the project level, following the principle of least privilege. The pipeline resumes successfully.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T13:57:48.568843+00:00— report_created — created