Intended Audience: GCP administrators with permission to manage workload identity pools and service accounts (
roles/iam.workloadIdentityPoolAdmin and roles/iam.serviceAccountAdmin, or roles/owner). You perform this setup once, and it enables keyless BigQuery access for your whole team.Why use Workload Identity Federation?
Keyless
No service-account key files to store, rotate, or leak. Gumloop never holds a long-lived secret for your project.
No daily reconnect
Federation is not tied to a human session, so session-control reauth windows never interrupt your agents or flows.
Short-lived tokens
Gumloop mints a fresh, short-lived access token for each request via GCP STS. Nothing durable is persisted.
You stay in control
You decide which service account Gumloop may impersonate and exactly which Gumloop tenant your pool trusts.
How it works
1
Gumloop mints an OIDC token
At query time, Gumloop signs a short-lived OIDC token identifying your Gumloop organization. Its issuer is
https://api.gumloop.com.2
GCP STS verifies and exchanges it
Your workload identity pool verifies the token’s signature against Gumloop’s published JWKS and checks your attribute condition, then exchanges it for a federated token.
3
Gumloop impersonates your service account
The federated token impersonates the target service account you nominate, yielding a short-lived Google access token scoped to BigQuery.
4
Gumloop queries BigQuery
That access token is used for the BigQuery call, then discarded.
- Discovery:
https://api.gumloop.com/.well-known/openid-configuration - JWKS:
https://api.gumloop.com/oauth/jwks
Claims included in the Gumloop OIDC token
Claims included in the Gumloop OIDC token
Gumloop derives every claim server-side from the authenticated credential owner. None come from user input.
iss:https://api.gumloop.comsub:gumloop:project:<workspace_id>orgumloop:user:<user_id>aud: the full resource path of your pool providergumloop_org_id: your Gumloop organization ID. Use this to lock down the pool.gumloop_owner_type:projectorusergumloop_owner_id: the Gumloop workspace or user ID that owns the credentialiat/exp: issued-at and a short (5 minute) expiry
Prerequisites
Before you begin, gather:- Your GCP project ID and project number (
gcloud projects describe YOUR_PROJECT_ID --format="value(projectNumber)") - Your Gumloop organization ID, provided by Gumloop. You pin your pool to this value so that your pool accepts only your tenant’s tokens.
- Permission to create workload identity pools and service accounts in the project
iamcredentials.googleapis.com: required for Gumloop to impersonate your service account (thegenerateAccessTokencall). Without it, token exchange fails with a403 SERVICE_DISABLEDerror.bigquery.googleapis.com: required to run queries.
Step 1: Create a Workload Identity pool
Step 2: Add Gumloop as an OIDC provider
Create an OIDC provider in the pool that trusts Gumloop’s issuer, maps the token claims, and restricts access to your Gumloop organization.Understanding these parameters
Understanding these parameters
- issuer-uri: Gumloop’s OIDC issuer. GCP reads
https://api.gumloop.com/.well-known/openid-configurationto discover the JWKS used to verify tokens. - attribute-mapping: Maps Gumloop token claims into pool attributes. You must map
google.subject. Theattribute.*mappings let you reference claims in conditions and IAM bindings. - attribute-condition: The security gate. GCP accepts only tokens whose
gumloop_org_idequals your organization. ReplaceYOUR_GUMLOOP_ORG_IDwith the value Gumloop provided.
You don’t need to set
--allowed-audiences. Gumloop sets the token audience to the provider’s full resource path, which is the default audience GCP accepts.Step 3: Create the target service account
This is the identity Gumloop impersonates. Grant it only the BigQuery permissions your team needs.Step 4: Allow the pool to impersonate the service account
Grantroles/iam.workloadIdentityUser on the service account to the federated identities from your pool, scoped to your gumloop_org_id attribute.
Step 5: Collect the three values for Gumloop
Paste these three values into Gumloop:- GCP Project Number, for example
123456789012 - Workload Identity Pool Resource Name, the provider resource path:
- Target Service Account Email, for example
bigquery-runner@YOUR_PROJECT_ID.iam.gserviceaccount.com
Step 6: Add the credential in Gumloop
- Go to the Connectors page. For a shared, team-wide connection, use your workspace credentials instead.
- Click Add Credential and select BigQuery (Workload Identity).
- Enter the three values from Step 5 and save.
Troubleshooting
”Permission denied” or no credentials found
- Confirm the attribute condition value matches the
gumloop_org_idGumloop provided exactly. - Confirm the
principalSet://binding uses the project number and the sameattribute.gumloop_org_idvalue. - Confirm the service account has
roles/bigquery.jobUser(needed to run queries) in addition to a data-read role.
”IAM Service Account Credentials API has not been used… or it is disabled”
The impersonation step callsiamcredentials.googleapis.com, which you must enable in your project. Enable it (and the BigQuery API), then wait a minute or two for the change to propagate:
“Invalid audience” / token rejected by STS
- Make sure the Workload Identity Pool Resource Name you pasted into Gumloop is the full provider path ending in
/providers/<provider-id>.