guides
Intended Documentation
Google Cloud (GCP) Connector Setup (Beta)
Connect Intended to Google Cloud. Create a service account with setIamPolicy and compute.instances.stop, paste the service-account email, private key, and project ID, and run Test connection. JWT-bearer OAuth; host-pinned to Google API hosts. Beta until validated against your live GCP project.
Google Cloud (GCP) Connector Setup (Beta)#
Connect Intended to Google Cloud so approved intents can add an IAM policy binding and stop Compute instances through the real GCP adapter (packages/execution-engine/src/adapters/gcp.ts). Auth is a service-account JWT-bearer OAuth exchange. Every write is Authority-Token-verified and ESCALATEs for approval under the starter policy.
This connector is Beta
The adapter is real and covered by hermetic (mocked-HTTP) tests that pass in CI with no live tenant. Live proof against your real GCP project is pending — treat GCP as Beta, not GA. See the Capability Truth Matrix.
What the adapter does#
| Property | Value |
|---|---|
| Actions | gcp.binding.add (Resource Manager setIamPolicy), gcp.instance.stop (Compute instances.stop) |
| Auth | Service-account JWT-bearer OAuth (grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer), then Authorization: Bearer <token> |
| Pinned hosts | Token: oauth2.googleapis.com; IAM: cloudresourcemanager.googleapis.com; Compute: compute.googleapis.com |
| SSRF hardening | Blocks metadata.google.internal, 169.254.169.254, any 169.254.*, localhost, 127.0.0.1 |
| Test connection | GET /v1/projects/{project} (projects.get) |
The adapter signs an RS256 JWT from the service-account key, exchanges it for a short-lived access token at the pinned token host, and uses that token only in-request (never persisted). gcp.binding.add is a read-modify-write with etag optimistic concurrency (getIamPolicy then setIamPolicy).
Provider-side steps#
1. Create a service account#
- In the Google Cloud console, go to IAM & Admin → Service Accounts → Create service account.
- Grant it the least-privilege roles below on the target project.
- Under Keys → Add key → Create new key → JSON, download the key file.
2. Extract the three fields (client_email, private_key, project_id, all required)#
The adapter reads the three fields flat (not as a nested JSON blob). From the downloaded key JSON:
client_email→ theclient_emailvalue, e.g.svc@your-project.iam.gserviceaccount.com.private_key→ theprivate_keyvalue, the multi-line PEM block beginning-----BEGIN PRIVATE KEY-----. Paste it verbatim, including the header/footer lines.project_id→ your GCP project ID.
Least-privilege scope guidance#
- Matrix permissions for this connector:
resourcemanager.projects.setIamPolicy,compute.instances.stop. - Prefer a custom role granting exactly
resourcemanager.projects.getIamPolicy+resourcemanager.projects.setIamPolicy(forgcp.binding.add) andcompute.instances.stop+compute.instances.get(forgcp.instance.stop), plusresourcemanager.projects.getfor the probe. - Do not grant
roles/ownerorroles/editor. The default JWT scope ishttps://www.googleapis.com/auth/cloud-platform, so IAM enforcement, not scope breadth, is your control.
Fields to paste into the connect dialog#
Open Connectors → Connect a system → Google Cloud → Configure auth:
| Field label | Key | Required | Value |
|---|---|---|---|
| Service Account Email | client_email | Yes | svc@your-project.iam.gserviceaccount.com |
| Service Account Private Key | private_key | Yes | The PEM private_key from the key JSON (textarea) |
| Project ID | project_id | Yes | Your GCP project ID |
Credentials are stored per-tenant, AES-256-GCM-encrypted, and never displayed back.
Run Test connection#
- Finish the connect wizard to store the credential.
- On the connector card, click Test connection.
- The adapter signs a JWT, exchanges it for an access token, and calls
projects.get. A green result means the key material is valid and the service account can read the project.
Next steps#
- Connectors index — all 15 connector guides
- Enterprise-System Connectors (Beta) — shared reference
- Capability Truth Matrix — per-connector status