员工身份联合的 SCIM 配置

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

功能

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

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

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

  • Gemini Enterprise 集成:SCIM 租户支持在 Gemini Enterprise 中共享内容。用户可以使用群组的名称(而不是其对象 ID [UUID])与群组共享 NotebookLM 笔记本。如需了解详情,请参阅与群组共享笔记本

注意事项

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

  • 您必须先设置员工身份池和提供方,然后再配置 SCIM 租户。
  • 每个员工身份池仅支持一个 SCIM 租户。如需在同一员工身份池中配置新的 SCIM 租户,您必须先删除现有租户。删除 SCIM 租户时,您有以下两种选择:
    • 软删除(默认):删除 SCIM 租户会启动 30 天的软删除期限。在此期间,租户处于隐藏状态,无法使用,并且您无法在同一员工身份池中创建新的 SCIM 租户。
    • 硬删除:如需永久且立即删除 SCIM 租户,请将 --hard-delete 标志与删除命令结合使用。此操作不可逆,可让您在删除完成后立即在同一员工身份池中创建新的 SCIM 租户。或者,您可以创建新的员工身份池和新的 SCIM 租户,也可以使用之前未配置 SCIM 租户的员工身份池。
  • 使用 SCIM 时,您需要在员工身份池提供方和 SCIM 租户中映射属性。google.subject 属性必须唯一引用相同的身份。您可以使用 --attribute-mapping 标志在员工身份池提供方中指定 google.subject,并使用 --claim-mapping 标志在 SCIM 租户中指定 google.subject。映射非唯一身份值可能会导致 Google Cloud 将不同的 IdP 身份视为同一身份。因此,授予一个用户或群组身份的访问权限可以扩展到其他身份,但撤消一个身份的访问权限可能不会撤消所有身份的访问权限。
  • 如需使用 SCIM 映射群组,请设置 --scim-usage=enabled-for-groups。使用 SCIM 映射群组时,系统会忽略员工身份池提供方中定义的任何群组映射。引用 SCIM 管理的群组时,映射的属性为 google.group,而不是 google.groupsgoogle.groups 仅指令牌映射的群组。
  • 使用 SCIM 时,通过 --attribute-mapping 映射的基于令牌的属性仍可用于身份验证和主账号标识符。
  • 对于 Microsoft Entra ID 配置,您不应在创建员工身份池提供方时使用 --extended-attributes 标志。

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

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

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

下表提供了将常见 IdP 令牌声明映射到 SCIM 属性的参考示例:

Google 属性 员工身份池提供方映射(令牌) SCIM 租户映射 (SCIM)
google.subject assertion.oid user.externalId
google.subject assertion.email user.emails[0].value
google.subject assertion.email.lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.preferred_username user.userName
google.subject assertion.sub 不兼容
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。

SCIM 行为限制

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

  • 单一电子邮件地址要求:为了成功进行 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

后续步骤