If your identity provider (IdP) supports System for Cross-domain Identity Management (SCIM), you can configure it to provision and manage users and groups in Google Cloud.
Capabilities
Workforce Identity Federation SCIM support provides the following capabilities:
- Identity synchronization: Syncs users and groups from your external IdP to Google Cloud to maintain a holistic view of workforce identities.
- Primary source for claims: When SCIM is enabled for a workforce provider, Google Cloud uses the synchronized SCIM users and groups as the source of truth for both user attributes and group memberships for IAM policy evaluation.
- Identity autocomplete: Enables user and group autocomplete when granting access and sharing resources (such as Notebooks and Agents) in Gemini Enterprise.
Considerations
When you use Workforce Identity Federation SCIM support, the following considerations apply:
- You must set up a workforce identity pool and provider before configuring a SCIM tenant.
- Each workforce identity pool supports only one SCIM tenant, linked to a single provider.
You cannot enable SCIM usage (
--scim-usage) on any other provider in the same pool. To configure a new SCIM tenant in the same workforce identity pool, you must first delete the existing one. To delete a SCIM tenant, use one of the following methods:- Soft delete (default): Deleting a SCIM tenant initiates a 30-day soft-delete period. During this time, the tenant is hidden and cannot be used, and you cannot create a new SCIM tenant in the same workforce identity pool.
- Hard delete: To permanently and immediately delete a SCIM tenant,
use the
--hard-deleteflag with the delete command. This action is irreversible and lets you create a new SCIM tenant in the same workforce identity pool immediately without waiting for the 30-day retention period. Alternatively, you can create a new workforce identity pool and a new SCIM tenant or use a workforce identity pool that hasn't previously been configured with a SCIM tenant.
- SCIM usage modes (
--scim-usage):enabled-for-groups(Gemini Enterprise): Uses SCIM-synced groups for IAM authorization and policy evaluation. User attributes continue to be sourced from login tokens. Onlygoogle.subjectandgoogle.groupmappings are evaluated.enabled-for-users-groups(Looker) (Preview): Uses SCIM-synced user and group data as the source of claims for IAM authorization and OAuth sign-in workflows. Evaluatesgoogle.subject,google.group, and all configured user claims (such asgoogle.display_name,google.profile_photo,google.email,google.posix_username, and customattribute.KEY).
- Mutual exclusivity: Setting
--scim-usage=enabled-for-users-groups(Preview) is mutually exclusive with Extra Attributes (extra_attributes_oauth2_client) and Extended Attributes (extended_attributes_oauth2_client). - When you use SCIM, you map attributes in both the workforce identity pool
provider and the SCIM tenant. The
google.subjectattribute must uniquely refer to the same identities. You specifygoogle.subjectin the workforce identity pool provider by using the--attribute-mappingflag and in the SCIM tenant using the--claim-mappingflag. Mapping non-unique identity values can cause Google Cloud to treat different IdP identities as the same identity. As a result, access that's granted to one user or group identity can extend to others, but revoking access from one might not remove it from all. - If you enable SCIM usage on a provider without an attached SCIM tenant, sign-in attempts fail because Google Cloud can't find a SCIM tenant for that provider.
- Uniqueness enforcement: Google Cloud validates and enforces
uniqueness on attributes mapped to
google.subject(users) andgoogle.group(groups) in a SCIM tenant. If the mapped attributes provisioned by your IdP result in duplicate values forgoogle.subjectorgoogle.groupduring synchronization, then provisioning fails with an HTTP409 Conflicterror. If a mapped attribute evaluates to null or empty, provisioning fails with an HTTP400 Bad Requesterror. - Attribute size limits: The maximum size for serialized mapped user
attributes (excluding
google.group) is 16 kB. If mapped attributes exceed this limit, sign-in attempts fail. - SCIM token limit: Each SCIM tenant supports a maximum of two SCIM tokens (for example, to support zero-downtime token rotation). If you have two tokens, delete an existing token before creating a new one.
- The SCIM API (
iamscim.googleapis.com) is subject to rate quotas that differ from standard IAM resource API quotas. By default, write and read requests are limited to 3,000 requests per SCIM tenant per organization per minute. For more information, see Quotas and limits.
Claim mapping
When you configure SCIM, you define claim mappings (--claim-mapping) in the SCIM tenant to map SCIM user and group attributes to Google attributes.
Supported Google Cloud attributes for claim mapping
The following table lists the Google Cloud attributes that you can map in your SCIM tenant (--claim-mapping) using Common Expression Language (CEL):
| Google Cloud attribute | Requirement | Description | Supported expressions and limits |
|---|---|---|---|
google.subject |
Mandatory |
Unique identifier for the authenticating user. The underlying IdP attribute used to populate |
Restricted to the following base expressions (or with .lowerAscii()):
Maximum length: 127 bytes. Note: This mapping is immutable once the SCIM tenant is created; to update it, you must hard-delete and recreate the SCIM tenant. |
google.group |
Mandatory for SCIM groups | Unique identifier for group membership synced using SCIM. | Restricted to the following base expressions (or with .lowerAscii()):
Note: This mapping is immutable once the SCIM tenant is created; to update it, you must hard-delete and recreate the SCIM tenant. |
google.display_name |
Optional | An attribute that sets the name of the signed-in user in the Google Cloud console. It can't be used in IAM allow policies. | Maps to a string attribute (such as user.displayName or user.name.formatted). Maximum length: 100 bytes. |
google.profile_photo |
Optional | A URL of the user's thumbnail photo that is visible as their profile picture in the Google Cloud console. It can't be used in IAM allow policies. | Must evaluate to a valid URL string (such as user.photos.filter(p, p.type == 'thumbnail')[0].value or user.photos[0].value). |
google.email |
Optional | An attribute used to map email addresses from the IdP to products integrated by using Workforce Identity Federation OAuth client integration. It can't be used in IAM allow policies. | Maps to an email attribute (such as user.emails.filter(e, e.type == 'work')[0].value or user.emails[0].value). |
google.posix_username |
Optional | A unique POSIX-compliant username string used for SSH-in-browser and OS Login with Workforce Identity Federation. This attribute can't be used in IAM allow policies. | The maximum length is 32 characters. |
attribute.KEY |
Optional |
Custom attributes from your IdP that you can use to define your authorization strategy in an IAM allow policy. Replace KEY with the attribute name you want to use. For example, you can define a custom attribute such as |
Up to 50 custom attribute mapping rules. Maximum size per rule: 256 characters. |
Behavior based on provider SCIM usage (--scim-usage)
The evaluation of SCIM claim mappings depends on the --scim-usage mode configured on the workforce identity pool provider:
enabled-for-groups(Gemini Enterprise): Onlygoogle.subjectandgoogle.groupmappings are evaluated. Any additional user claim mappings in--claim-mappingare ignored.enabled-for-users-groups(Looker) (Preview): Evaluatesgoogle.subject,google.group, and all configured user claims (such asgoogle.display_name,google.profile_photo,google.email,google.posix_username, and customattribute.<var>KEY</var>).
Example mappings for subject consistency
As described in Supported attributes for claim mapping, the underlying IdP attribute used to populate google.subject must be identical across both the provider mapping (--attribute-mapping) and the SCIM tenant (--claim-mapping). The following table shows reference examples:
| Google attribute | Workforce identity pool provider mapping | SCIM tenant mapping (SCIM) |
|---|---|---|
google.subject |
assertion.oid (Entra ID) |
user.externalId |
google.subject |
assertion.sub (Okta) |
user.externalId |
google.subject |
assertion.preferred_username |
user.userName |
google.subject |
assertion.preferred_username.lowerAscii() |
user.userName.lowerAscii() |
google.subject |
assertion.email |
user.emails[0].value |
google.subject |
assertion.email.lowerAscii() |
user.emails[0].value.lowerAscii() |
Supported and unsupported endpoints
The following standard SCIM protocol endpoints are supported:
/Users: manage user resources. Supported operations:Create,Get,Update,Delete,Patch, andPut./Groups: manage group resources. Supported operations:Create,Get,Update,Delete, andPatch. ThePUTmethod isn't supported for groups./Schemas: retrieve schema information./ServiceProviderConfig: retrieve the service provider configuration.
The following SCIM protocol endpoints aren't supported:
/Me/Bulk/Search/ResourceTypes
Limitations
The following sections describe the limitations and deviations of the Workforce Identity Federation SCIM implementation from the SCIM specifications (RFC 7643 and 7644).
Protocol feature limitations
Filter support: When you list users or groups using the
/Usersor/Groupsendpoints, filter expressions only support theeq(equals) operator. You can combine multipleeqfilters withand. Other SCIM filter operators, such asco(contains) orsw(starts with), aren't supported.Pagination: The IAM SCIM API does not support standard pagination for listing users or groups.
startIndex: this parameter is always1. The API returns up to 100 results regardless of the value that you provide forstartIndex.itemsPerPage: the maximum number of resources that are returned in a single response is 100.totalResults: the API does not return the actual total count of matching resources. ThetotalResultsfield in the response is always equal to the number of items that are returned in that response, with a maximum of 100.
Get Group and list Groups without filter:
GetGroupandListGroupsAPIs return an empty member list. To retrieve members for a specific group, use theListGroupsAPI with a member filter.Non-compliant JSON response with invalid tokens: Requests that contain an invalid API token return an
HTTP 401status code from Google Cloud. The response is not valid JSON as required by the SCIM specification.
SCIM behavior limitations
Immutable identifiers: The values of SCIM attributes that are mapped to
google.subjectorgoogle.groupare treated as immutable identifiers within Google Cloud. If you need to change these values, you must permanently delete the user or group from your IdP and then recreate it with the new value.Unique and non-empty identifiers: Google Cloud enforces uniqueness on values mapped to
google.subjectandgoogle.groupin a SCIM tenant. Syncing mapped attributes that result in duplicate values forgoogle.subjectorgoogle.groupfails with an HTTP409 Conflicterror. Mapped attributes that evaluate to null or empty fail with an HTTP400 Bad Requesterror.Single email requirement: For successful SCIM synchronization, each user must have exactly one email address of type
work. Provisioning or updates will fail if your IdP sends multiple emails or if the single email provided is not of typework.Case-insensitive transformations: Limited Common Expression Language (CEL) transformations are supported for SCIM claim mappings. Only
.lowerAscii()is supported for case-insensitive comparisons foruser.userNameanduser.emails[0].value.
Attribute limitations
The following sections describe the attribute support for users, groups, and the enterprise user schema extension.
User attributes
The following table lists user attributes and their availability in Workforce Identity Federation claims:
| Attribute | Sub-attributes | Supported in SCIM Provisioning | Limitations | Supported in --claim-mapping |
|---|---|---|---|---|
userName |
N/A | Yes | N/A | Yes |
name |
formatted, familyName, givenName, middleName, honorificPrefix, honorificSuffix |
Yes | N/A | Yes |
displayName |
N/A | Yes | N/A | Yes |
nickName |
N/A | Yes | N/A | Yes |
profileUrl |
N/A | Yes | N/A | Yes |
title |
N/A | Yes | N/A | Yes |
userType |
N/A | Yes | N/A | Yes |
preferredLanguage |
N/A | Yes | N/A | Yes |
locale |
N/A | Yes | N/A | Yes |
timezone |
N/A | Yes | N/A | Yes |
active |
N/A | Yes | N/A | Yes |
password |
N/A | No | N/A | No |
emails |
display, type, value, primary |
Yes | Only the work email type is supported. |
Yes |
phoneNumbers |
display, type, value, primary |
Yes | N/A | Yes |
ims |
display, type, value |
Yes | N/A | Yes |
photos |
display, type, value |
Yes | N/A | Yes |
addresses |
formatted, streetAddress, locality, region, postalCode, country |
Yes | N/A | Yes |
groups |
N/A | No | N/A | No |
entitlements |
display, type, value |
Yes | N/A | Yes |
roles |
type, value |
Yes | display isn't supported. |
Yes |
x509Certificates |
type, value |
Yes | display isn't supported. |
No |
Group attributes
The following table lists group attributes and their availability in Workforce Identity Federation claims:
| Attribute | Supported sub-attributes | Supported in --claim-mapping |
|---|---|---|
displayName |
N/A | Yes |
externalId |
N/A | Yes |
members |
value, type, $ref, display |
No |
Enterprise user schema extension attributes
The following table details the support for the enterprise user schema extension:
| Attribute | Supported sub-attributes | Supported in --claim-mapping |
|---|---|---|
employeeNumber |
N/A | Yes |
costCenter |
N/A | Yes |
organization |
N/A | Yes |
division |
N/A | Yes |
department |
N/A | Yes |
manager |
value, $ref, displayName |
Yes ($ref is supported in SCIM provisioning only, not in --claim-mapping) |
What's next
- Configure SCIM support for Workforce Identity Federation
- Troubleshoot SCIM provisioning
- IAM SCIM audit logging