Google Cloud identities are connected at
claude.ai/admin-settings/claude-tag: open Federated cloud access in the left navigation and use the Cloud roles section. Connecting an identity needs an organization Owner, or an admin with full Claude Tag management permission.Before you begin
- You’re an organization Owner, or an admin with full Claude Tag management permission.
- You can create a workload identity pool and provider in a Google Cloud project (any project; it doesn’t have to own the resources) and grant IAM roles on the resources Claude will use. Use a workload identity pool; workforce identity pools aren’t supported.
- If an organization policy restricts which issuers your workload identity pools may trust, allow
https://identity.anthropic.com/agentsfirst. - You know which Google API hosts Claude will call, for example
storage.googleapis.com.
Copy the values from the console
In Cloud roles, click Connect a Google Cloud identity and copy the Issuer and Subject prefix rows from the Set the workload identity provider to accept these values card (the JWKS URL row isn’t needed, because Google reads the keys from the issuer). Then click Cancel; you connect the identity after setting up Google Cloud.Create the pool and provider in Google Cloud
Create a workload identity pool and an OpenID Connect (OIDC) provider in it with these settings. Replace<your organization ID> with the ID from your Subject prefix.
Google doesn’t require an attribute condition, and nothing checks it for you. Without one, agents of every other Claude Tag organization can authenticate to your pool, because every organization’s tokens come from the same issuer; see Authorize on the subject. The condition on
assertion.sub is the subject check every connection type needs. The exact form accepts only the agents you list, and the prefix form accepts every agent in your organization, because every subject carries your organization ID between /org/ and /agent/.
Listing exact subjects is the strongest form. The prefix form is the minimum, and it admits every agent in your organization to the pool. With the prefix form, you can still grant IAM roles only to individual agents’ principal:// members, as shown under Grant access. Claude’s admin settings don’t show agent IDs, so you learn a subject from Cloud Audit Logs after a first exchange, and you update the condition or the grants when a Slack channel is deleted and recreated, because the new channel’s agent has a new ID.
Mapping attribute.org from assertion.tenant is optional. The tenant claim carries the same organization ID as the subject, so the condition attribute.org == "<your organization ID>" is the prefix check in claim form. The mapping is standard Google attribute mapping.
Grant access
Choose one of the two forms. The console step “Name the service account, or leave the field empty” depends on your choice.Without a service account
Grant IAM roles on each resource directly to the federated identity. To grant a role to one channel’s agent, use the agent’s full subject, unescaped, for exampleprincipal://iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/claude/subject/wimse://identity.anthropic.com/org/<your organization ID>/agent/<agent ID>.
To grant a role to all of your organization’s agents at once, map attribute.org from assertion.tenant as described under Create the pool and provider in Google Cloud, and use the principal set
principalSet://…/workloadIdentityPools/claude/*). In this form, don’t grant the federated identity any permission that mints credentials, such as iam.serviceAccounts.getAccessToken, iam.serviceAccounts.signJwt, or service account key creation, because Claude could then obtain a Google credential that works outside Claude. (The form with a service account grants one such permission on purpose, on one service account.)
With a service account
Create a dedicated service account in any project and grant it the roles Claude needs. The console accepts only addresses of the form<name>@<project>.iam.gserviceaccount.com, so the default Compute Engine and App Engine service accounts can’t be used. Enable the IAM Service Account Credentials API in the service account’s project. Then grant the Workload Identity User role (roles/iam.workloadIdentityUser) to the same principalSet:// or principal:// member as in Without a service account, on the service account’s own IAM policy rather than on the project. Don’t grant the service account any permission to mint further credentials or create keys.
Connect the identity in the console
1
Open the Connect a Google Cloud identity dialog
In Cloud roles, click Connect a Google Cloud identity.
2
Enter the provider resource name
In the Workload identity provider field, enter
//iam.googleapis.com/ followed by the provider’s full name as Google reports it, for example //iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/claude/providers/agents. Use the project number, not the project ID (find it on the project’s dashboard in the Google Cloud console). The value is stored as you type it and is the token’s audience.3
Name the service account, or leave the field empty
In the Service account to act as (optional) field, enter the service account’s email, for example
claude@my-project.iam.gserviceaccount.com, if you chose the form with a service account. Leave the field empty to have Claude act as the federated identity itself. The connection is named after the service account, or after the provider’s ID (the last part of its resource name) when there is none.4
Decide whether to block credential minting
The Block requests that mint new credentials checkbox is selected by default. With it selected:
- Claude can’t use this identity to call Google endpoints that create keys, tokens, or other credentials, even if IAM would allow the call.
- Requests to a list of services that deal in credentials are refused entirely. See what the credential-minting block refuses on the limits page.
- gRPC calls are refused, so tell Claude in the custom instructions to use the REST transport of client libraries such as Spanner, Bigtable, Firestore, and Pub/Sub.
5
Narrow the allowed Google hosts
Replace the prefilled
*.googleapis.com entry in the Allowed Google hosts field with the hosts Claude needs, for example storage.googleapis.com. A wildcard as the leftmost label, such as *.storage.googleapis.com, matches any subdomain but not the name itself. Every host must be googleapis.com, a subdomain of it, or a subdomain of clients6.google.com. You can change the list later from the connection’s Edit connection dialog on the bundle’s Credentials tab.6
Confirm the attribute condition
Select the checkbox labeled The provider’s attribute condition requires the subject prefix shown above. The Connect identity button stays disabled until you do. Select the checkbox only if the provider’s attribute condition pins
assertion.sub to one or more full subjects under your Subject prefix, or at minimum pins assertion.sub to your Subject prefix (or, if you mapped it, attribute.org to your organization ID), as described under Create the pool and provider in Google Cloud.7
Choose an Access bundle and connect
Choose a bundle from the Access bundle list, or click New bundle, enter a Bundle name, and click Create bundle. Then click Connect identity. This creates a connection in that bundle, labeled Google Cloud identity on its Credentials tab, with the hosts you entered under Allowed hosts. The same provider can be connected more than once, for example once with a service account and once without, as long as no two Google Cloud connections in one bundle share a host under Allowed hosts. To use a connection in several scopes (workspaces or channels), attach its bundle to each.
Let agents use the identity
Claude uses the identity in channels whose scope has the bundle attached. Attach the bundle to a workspace or channel if it isn’t attached already. Claude also needs to know what the identity is for. Add a line like this to the scope’s custom instructions:@Claude !restart at the channel’s top level (not inside a thread) to start a fresh session with your organization’s current configuration.
Verify the connection
In a channel whose workspace or channel has the bundle attached, start a new thread and ask Claude to make a small read (replaceexample-reports with a bucket the identity can read):
- A token refused by your provider usually means the attribute condition didn’t accept it. Check the organization ID in the condition, then the issuer URL and the allowed audience.
- A permission error on the API call means the role grant is missing or too narrow.
Common errors
Two messages come up while connecting:- A message that a connection “already covers” a host “in this bundle”: another Google Cloud connection in the bundle you chose already has that host under Allowed hosts, so Claude would never use the new connection for it. Remove the shared host or choose another bundle.
- A rejected Workload identity provider or Service account to act as value: the value doesn’t match the form the field describes, usually because the resource name carries the project ID instead of the project number, or the service account is a default one.
Related resources
- Give Claude access: the Access bundle and connection model
- Attach a bundle to a scope: where an identity connection applies
- Identity token reference: every claim in the token, lifetimes, and key rotation
- Limits: what the credential-minting block refuses, and the other limits for Google Cloud identities
- Troubleshoot federated cloud access: console and runtime errors for every connection type
- BigQuery: the stored-key alternative for one Google service