1. Google Cloud Documentation
"Granting roles to service accounts": In the section "Granting a role to a service account for a project and resources within the project
" the documentation states
"To allow a service account to access resources in a different project
you can grant a role to the service account on the other project." This directly supports the cross-project IAM binding described in the correct answer.
2. Google Cloud Documentation
"IAM basic and predefined roles reference"
Compute Engine roles: The documentation for the Compute Storage Admin role (roles/compute.storageAdmin) confirms that it provides "Full control of Compute Engine storage resources
" which includes permissions for creating snapshots (compute.disks.createSnapshot).
3. Google Cloud Documentation
"Service accounts overview": This document clarifies that a service account is a principal
or an identity
which can be granted IAM roles to access resources. This reinforces the concept of treating the service account from proj-sa as an identity that needs permissions in proj-vm.
4. Google Cloud Documentation
"Access control for Compute Engine resources": This page contrasts IAM and API Scopes
stating
"In general
we recommend using IAM to manage access to Compute Engine resources instead of access scopes." This explains why relying on API scopes (Option D) is not the recommended or correct primary approach.