员工身份联合的 SCIM 配置

如果您的身份提供方 (IdP) 支持跨网域身份管理系统 (SCIM),您可以将 IdP 配置为在 Google Cloud中预配和管理群组。

功能

员工身份联合 SCIM 支持提供以下功能:

  • 身份同步:从您的 IdP 同步用户数据的只读副本,以便在 Google Cloud中全面了解用户属性和成员资格。

  • 群组扁平化:SCIM 会处理来自 IdP 的群组,以便将用户的所有直接和间接(嵌套)成员资格扁平化并同步到Google Cloud 群组成员资格服务 (GMS)。然后,IAM 会使用这些扁平化群组进行政策检查,从而克服 IdP 令牌中常见的规模限制。

  • Gemini Enterprise 集成:SCIM 租户支持在 Gemini Enterprise 中共享内容。SCIM 租户可启用与在 Gemini Notebook Enterprise 中共享笔记本相关的两项功能:

    • 自动补全电子邮件地址和群组

    • 使用群组的名称而非其对象 ID (UUID)

    如需了解详情,请参阅与群组共享笔记本

注意事项

使用员工身份联合 SCIM 支持时,请注意以下事项:

  • 您必须先设置员工身份池和提供方,然后再配置 SCIM 租户。
  • 每个员工身份池仅支持一个 SCIM 租户,该租户与单个提供方相关联。您无法在同一身份池中的任何其他提供方上启用 SCIM 使用情况 (--scim-usage=enabled-for-groups)。 如需在同一员工身份池中配置新的 SCIM 租户,您必须先删除现有租户。如需删除 SCIM 租户,请使用以下方法之一:
    • 软删除(默认):删除 SCIM 租户会启动 30 天的软删除期。在此期间,租户处于隐藏状态,无法使用,并且您无法在同一员工身份池中创建新的 SCIM 租户。
    • 硬删除:如需永久且立即删除 SCIM 租户,请将 --hard-delete 标志与删除命令结合使用。此操作不可逆,可让您立即在同一员工身份池中创建新的 SCIM 租户,而无需等待 30 天的保留期限。或者,您可以创建新的员工身份池和新的 SCIM 租户,也可以使用之前未配置 SCIM 租户的员工身份池。
  • 使用 SCIM 时,您需要在员工身份池提供方和 SCIM 租户中映射属性。google.subject 属性必须唯一引用相同的身份。您可以使用 --attribute-mapping 标志在员工身份池提供方中指定 google.subject,并使用 --claim-mapping 标志在 SCIM 租户中指定。映射非唯一身份值可能会导致 Google Cloud 将不同的 IdP 身份视为同一身份。因此,授予一个用户或群组身份的访问权限可以扩展到其他身份,但撤销一个身份的访问权限可能不会撤销所有身份的访问权限。
  • 如需使用 SCIM 映射群组,请在附加了 SCIM 租户的员工身份池提供方上设置 --scim-usage=enabled-for-groups。使用 SCIM 映射群组时,系统会忽略相应提供方中定义的任何群组映射,而改用 SCIM 管理的群组。引用 SCIM 管理的群组时,映射的属性为 google.group,而不是 google.groupsgoogle.groups 仅指令牌映射的群组。如果您在没有附加 SCIM 租户的提供商上启用 SCIM 使用,则通过该提供商进行的登录尝试会在运行时失败,因为Google Cloud 无法在该提供商的路径下找到 SCIM 租户。
  • 强制执行唯一性: Google Cloud 验证并强制执行 SCIM 租户中映射到 google.subject(用户)和 google.group(群组)的属性的唯一性。如果您的 IdP 提供的映射属性在同步期间导致 google.subjectgoogle.group 的值重复,则配置会失败,并显示 HTTP 409 Conflict 错误。如果映射的属性的计算结果为 null 或空值,则配置会失败并显示 HTTP 400 Bad Request 错误。
  • 使用 SCIM 时,通过 --attribute-mapping 映射的基于令牌的属性仍可用于身份验证和主账号标识符。
  • 对于 Microsoft Entra ID 配置,如需在 Gemini Enterprise 中启用人类可读的群组名称,请使用 SCIM。
  • SCIM 令牌限制:每个 SCIM 租户最多支持两个 SCIM 令牌(例如,为了支持零停机时间令牌轮换)。如果您已有两个令牌,并且需要创建新令牌,则必须先删除现有令牌,然后才能创建新令牌。
  • SCIM API (iamscim.googleapis.com) 受速率配额限制,该配额与标准 IAM 资源 API 配额不同。默认情况下,写入和读取请求的限制为每个组织每分钟每个 SCIM 租户 3,000 个请求。如需了解详情,请参阅配额和限制

将 OIDC 和 SAML 提供方映射到 SCIM 配置

员工身份池提供方配置 (--attribute-mapping) 中的属性映射与 SCIM 租户 (--claim-mapping) 中的声明映射必须保持一致。用于填充 google.subject(针对用户)的基础 IdP 属性必须相同,无论它是从令牌声明还是 SCIM 属性中读取的。

由于 --claim-mapping 在创建 SCIM 租户后就无法更改,因此如果您需要更新声明映射(例如,添加 .lowerAscii() 转换),则必须硬删除 SCIM 租户并使用新映射重新创建它。

如果这些映射不一致,用户可能可以登录,但不会被识别为通过 SCIM 预配的群组的成员。例如,如果提供方使用 assertion.email 表示 google.subject,则 SCIM 租户也必须使用等效的 SCIM 属性(例如 user.emails[0].value)表示 google.subject

下表显示了令牌声明属性与 SCIM 属性之间的映射:

Google 属性 员工身份池提供方映射 SCIM 租户映射 (SCIM)
google.subject assertion.oid (EntraId) 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()
google.group 不适用(使用 SCIM 映射) group.externalId

支持的端点和不支持的端点

支持以下标准 SCIM 协议端点:

  • /Users:管理用户资源。支持的操作:CreateGetUpdateDeletePatchPut

  • /Groups:管理群组资源。支持的操作:CreateGetUpdateDeletePatch。群组不支持 PUT 方法。

  • /Schemas:检索架构信息。

  • /ServiceProviderConfig:检索服务提供商配置。

不支持以下 SCIM 协议端点:

  • /Me

  • /Bulk

  • /Search

  • /ResourceTypes

限制

以下部分介绍了员工身份联合 SCIM 实现与 SCIM 规范(RFC 7643 和 7644)的限制和偏差。

协议功能限制

  • 过滤条件支持:使用 /Users/Groups 端点列出用户或群组时,过滤表达式仅支持 eq(等于)运算符。您可以将多个 eq 过滤条件与 and 结合使用。不支持其他 SCIM 过滤条件运算符,例如 co(包含)或 sw(开头为)。

  • 分页:IAM SCIM API 不支持用于列出用户或群组的标准分页。

    • startIndex:此参数始终为 1。无论您为 startIndex 提供什么值,API 最多都会返回 100 个结果。

    • itemsPerPage:单个响应中返回的资源数上限为 100。

    • totalResults:API 不会返回匹配资源的实际总数。响应中的 totalResults 字段始终等于相应响应中返回的商品数量,上限为 100。

  • 获取群组和列出不带过滤条件的群组GetGroupListGroups API 会返回一个空成员列表。如需检索特定群组的成员,请使用带有成员过滤条件的 ListGroups API。

  • 包含无效令牌的不合规 JSON 响应:包含无效 API 令牌的 API 会导致从 Google Cloud返回 401 HTTP error。响应不是规范要求的 JSON 结构。

SCIM 行为限制

  • 不可变标识符:映射到 google.subjectgoogle.group 的 SCIM 属性的值在 Google Cloud中被视为不可变标识符。如果您需要更改这些值,必须从 IdP 中永久删除相应用户或群组,然后使用新值重新创建。

  • 唯一且非空的标识符: Google Cloud 强制要求映射到 SCIM 租户中的 google.subjectgoogle.group 的值必须唯一。 同步映射的属性,导致 google.subjectgoogle.group 的值重复,会失败并显示 HTTP 409 Conflict 错误。 如果映射的属性的求值结果为 null 或空,则会失败并显示 HTTP 400 Bad Request 错误。

  • 单一电子邮件地址要求:为确保 SCIM 同步成功,每位用户都必须拥有一个类型为 work 的电子邮件地址。如果您的 IdP 发送多封电子邮件,或者提供的单封电子邮件不是 work 类型,则配置或更新将失败。

  • 不区分大小写的转换:SCIM 声明映射支持有限的通用表达式语言 (CEL) 转换。对于 user.userNameuser.emails[0].value,仅支持 .lowerAscii() 进行不区分大小写的比较。

属性限制

以下部分介绍了用户、群组和企业用户架构扩展程序的属性支持。

用户属性

下表详细介绍了用户属性的支持情况:

属性 子属性 支持 限制
userName 不适用 不适用
name formattedfamilyNamegivenNamemiddleNamehonorificPrefixhonorificSuffix 不适用
displayName 不适用 不适用
nickName 不适用 不适用
profileUrl 不适用 不适用
title 不适用 不适用
userType 不适用 不适用
preferredLanguage 不适用 不适用
locale 不适用 不适用
timezone 不适用 不适用
active 不适用 不适用
password 不适用 不适用
emails displaytypevalueprimary 仅支持 work 电子邮件类型。
phoneNumbers displaytypevalueprimary 不适用
ims displaytypevalue 不适用
photos displaytypevalue 不适用
addresses formattedstreetAddresslocalityregionpostalCodecountry 不适用
groups 不适用 不适用
entitlements displaytypevalue 不适用
roles typevalue display 不受支持。
x509Certificates typevalue display 不受支持。

群组属性

下表详细说明了对组属性的支持:

属性 支持的子属性
displayName 不适用
externalId 不适用
members valuetype$refdisplay

企业用户架构扩展属性

下表详细介绍了对企业用户架构扩展的支持:

属性 支持的子属性
employeeNumber 不适用
costCenter 不适用
organization 不适用
division 不适用
department 不适用
manager value$refdisplayName

后续步骤