You've hit on a fundamental concept in GCP IAM: **role bindings are specific to the resource they are applied to and its descendants, but do not automatically propagate "sideways" to other projects.**
Here's the breakdown:
1. **IAM Hierarchy and Inheritance:** GCP resources are organized hierarchically (Organization > Folders > Projects > Resources). IAM roles granted at a higher level (like the Organization) are generally inherited by resources below them (Folders, Projects).
2. **Project-Level Scope:** When you create a custom role and grant it to your service account *within the "SecureLand" project*, the permissions granted by that role are primarily effective *only within "SecureLand"* and its child resources.
3. **No Cross-Project Inheritance (Generally):** There is no automatic "hand waving" that grants a service account permissions in "DevLand" simply because it has roles in "SecureLand", even if they are in the same Organization. Projects are strong isolation boundaries for IAM permissions.
4. **How to Enable Cross-Project Access:** To allow the service account in "SecureLand" to perform actions on resources in "DevLand" (like shutting down `dev_vm`), you MUST grant the necessary permissions *to that same service account* (e.g., <REDACTED_PII>`) *directly on the "DevLand" project* or on a parent resource of "DevLand" (like a shared Folder or the Organization).
**In your example:**
The playbook/action running as the service account in "SecureLand" would **fail** to take action on `dev_vm` in "DevLand" *unless* you explicitly grant the required roles (e.g., a custom role with `compute.instances.stop` permission) to that service account on the "DevLand" project.
**To achieve the desired cross-project automation:**
You need to add an IAM role binding in the "DevLand" project. For example:
```bash
# In the "DevLand" project context
gcloud projects add-iam-policy-binding DevLand \
--member "serviceAccount:<REDACTED_PII>" \
--role "projects/DevLand/roles/VmOperatorRole" # Example custom role in DevLand with necessary permissions
# OR a predefined role
gcloud projects add-iam-policy-binding DevLand \
--member "serviceAccount:<REDACTED_PII>" \
--role "roles/compute.instanceAdmin.v1"
```
**Key Takeaway:** Roles and permissions are not automatically shared between sibling projects in an Organization. You must grant permissions in the scope of the project where the resources reside.