员工身份联合的 SCIM 配置

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

功能

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

  • 身份同步:将用户和群组从外部 IdP 同步到 Google Cloud ,以全面了解员工身份。
  • 声明的主要来源:为员工提供方启用 SCIM 后, Google Cloud 会将同步的 SCIM 用户和群组用作 IAM 政策评估的用户属性和群组成员资格的可信来源。
  • 身份自动补全:在 Gemini Enterprise 中授予访问权限和共享资源(例如 Notebooks 和代理)时,启用用户和群组自动补全功能。

注意事项

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

  • 您必须先设置员工身份池和提供方,然后再配置 SCIM 租户。
  • 每个员工身份池仅支持一个 SCIM 租户,该租户与单个提供方相关联。您无法在同一身份池中的任何其他提供方上启用 SCIM 使用 (--scim-usage)。 如需在同一员工身份池中配置新的 SCIM 租户,您必须先删除现有租户。如需删除 SCIM 租户,请使用以下方法之一:
    • 软删除(默认):删除 SCIM 租户会启动 30 天的软删除期。在此期间,租户处于隐藏状态,无法使用,并且您无法在同一员工身份池中创建新的 SCIM 租户。
    • 硬删除:如需永久且立即删除 SCIM 租户,请将 --hard-delete 标志与删除命令结合使用。此操作不可逆,可让您立即在同一员工身份池中创建新的 SCIM 租户,而无需等待 30 天的保留期限。或者,您可以创建新的员工身份池和新的 SCIM 租户,也可以使用之前未配置 SCIM 租户的员工身份池。
  • SCIM 使用模式 (--scim-usage)
    • enabled-for-groups (Gemini Enterprise):使用 SCIM 同步的群组进行 IAM 授权和政策评估。 用户属性继续从登录令牌中获取。仅评估 google.subjectgoogle.group 映射。
    • enabled-for-users-groups (Looker)(预览版:使用 SCIM 同步的用户和群组数据作为 IAM 授权和 OAuth 登录工作流的声明来源。评估 google.subjectgoogle.group 和所有已配置的用户声明(例如 google.display_namegoogle.profile_photogoogle.emailgoogle.posix_username 和自定义 attribute.KEY)。
  • 互斥性:设置 --scim-usage=enabled-for-users-groups预览版)与额外属性 (extra_attributes_oauth2_client) 和扩展属性 (extended_attributes_oauth2_client) 互斥。
  • 使用 SCIM 时,您需要在员工身份池提供方和 SCIM 租户中映射属性。google.subject 属性必须唯一引用相同的身份。您可以使用 --attribute-mapping 标志在 员工身份池提供方中指定 google.subject,并使用 --claim-mapping 标志在 SCIM 租户中指定。映射非唯一身份值可能会导致 Google Cloud 将不同的 IdP 身份视为同一身份。因此,授予一个用户或群组身份的访问权限可以扩展到其他身份,但撤消一个身份的访问权限可能不会撤消所有身份的访问权限。
  • 如果您在没有附加 SCIM 租户的情况下在提供方上启用 SCIM 使用,则登录尝试会失败,因为 Google Cloud 找不到该提供方的 SCIM 租户。
  • 强制执行唯一性:验证并强制执行 SCIM 租户中映射到 google.subject(用户)和 google.group(群组)的属性的唯一性。 Google Cloud 如果您的 IdP 提供的映射属性在同步期间导致 google.subjectgoogle.group 的值重复,则配置会失败并显示 HTTP 409 Conflict 错误。如果映射的属性的计算结果为 null 或空值,则配置会失败并显示 HTTP 400 Bad Request 错误。
  • 属性大小限制:序列化映射的用户属性(不包括 google.group)的大小上限为 16 kB。如果映射的属性超出此限制,登录尝试将会失败。
  • SCIM 令牌限制:每个 SCIM 租户最多支持两个 SCIM 令牌(例如,为了支持零停机时间令牌轮换)。如果您已有两个令牌,请先删除一个现有令牌,然后再创建新令牌。
  • SCIM API (iamscim.googleapis.com) 受速率配额限制,该配额与标准 IAM 资源 API 配额不同。默认情况下,写入和读取请求的限制为每个组织每分钟每个 SCIM 租户 3,000 个请求。如需了解详情,请参阅配额和限制

声明映射

配置 SCIM 时,您需要在 SCIM 租户中定义声明映射 (--claim-mapping),以将 SCIM 用户和群组属性映射到 Google 属性。

支持用于声明映射的 Google Cloud 属性

下表列出了您可以使用通用表达式语言 (CEL) 在 SCIM 租户 (--claim-mapping) 中映射的 Google Cloud 属性:

Google Cloud 属性 要求 说明 支持的表达式和限制
google.subject 必填

进行身份验证的用户的唯一标识符。

用于填充 google.subject 的底层 IdP 属性在提供方映射 (--attribute-mapping) 和 SCIM 租户 (--claim-mapping) 中必须完全相同。如果这些映射不一致,用户可能能够登录,但不会被识别为 SCIM 预配的群组的成员。

仅限以下基本表达式(或使用 .lowerAscii()):
  • user.externalId
  • user.userName
  • user.emails[0].value

长度上限:127 字节。

注意:SCIM 租户创建后,此映射便无法更改;如需更新,您必须硬删除并重新创建 SCIM 租户。

google.group 对于 SCIM 群组,此字段为必需字段 使用 SCIM 同步的群组成员资格的唯一标识符。 仅限以下基本表达式(或使用 .lowerAscii()):
  • group.externalId
  • group.displayName

注意:SCIM 租户创建后,此映射便无法更改;如需更新,您必须硬删除并重新创建 SCIM 租户。

google.display_name 可选 用于在 Google Cloud 控制台中设置所登录用户的名称的属性。不能用于 IAM 允许政策。 映射到字符串属性(例如 user.displayNameuser.name.formatted)。长度上限:100 字节。
google.profile_photo 可选 用户的缩略照片的网址,该照片会在 Google Cloud 控制台中显示为用户的个人资料照片。不能用于 IAM 允许政策。 必须计算为有效的网址字符串(例如 user.photos.filter(p, p.type == 'thumbnail')[0].valueuser.photos[0].value)。
google.email 可选 一种属性,用于将电子邮件地址从 IdP 映射到使用员工身份联合 OAuth 客户端集成进行集成的产品。不能用于 IAM 允许政策。 映射到电子邮件属性(例如 user.emails.filter(e, e.type == 'work')[0].valueuser.emails[0].value)。
google.posix_username 可选 符合 POSIX 标准的唯一用户名字符串,用于 SSH-in-browser 和使用员工身份联合的 OS Login。此属性不能用于 IAM 允许政策。 最大长度为 32 个字符。
attribute.KEY 可选

IdP 中的自定义属性,可用于在 IAM 允许政策中定义授权策略。将 KEY 替换为您要使用的属性名称。

例如,您可以定义一个自定义属性(例如 costcenter = "1234"),然后使用 principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.costcenter/1234 引用该属性。向此主账号标识符授予访问权限后,在 IdP 中配置为具有该成本中心的所有身份都有权访问。

最多 50 个自定义属性映射规则。每条规则的大小上限:256 个字符。

基于提供方 SCIM 使用情况的行为 (--scim-usage)

SCIM 声明映射的评估取决于员工身份池提供方上配置的 --scim-usage 模式:

  • enabled-for-groups (Gemini Enterprise):仅评估 google.subjectgoogle.group 映射。--claim-mapping 中的任何其他用户声明映射都会被忽略。
  • enabled-for-users-groups (Looker)(预览版:评估 google.subjectgoogle.group 和所有已配置的用户声明(例如 google.display_namegoogle.profile_photogoogle.emailgoogle.posix_username 和自定义 attribute.<var>KEY</var>)。

主题一致性示例映射

声明映射支持的属性中所述,用于填充 google.subject 的底层 IdP 属性在提供方映射 (--attribute-mapping) 和 SCIM 租户 (--claim-mapping) 中必须完全相同。下表显示了参考示例:

Google 属性 员工身份池提供方映射 SCIM 租户映射 (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()

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

支持以下标准 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 令牌的请求会从 Google Cloud返回 HTTP 401 状态代码。响应不是 SCIM 规范要求的有效 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() 进行不区分大小写的比较。

属性限制

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

用户属性

下表列出了用户属性及其在 Workforce Identity Federation 声明中的可用性:

属性 子属性 在 SCIM 配置中受支持 限制 --claim-mapping 中支持
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 不受支持。

群组属性

下表列出了群组属性及其在 Workforce Identity Federation 声明中的可用性:

属性 支持的子属性 --claim-mapping 中受支持
displayName 不适用
externalId 不适用
members valuetype$refdisplay

企业用户架构扩展属性

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

属性 支持的子属性 --claim-mapping 中受支持
employeeNumber 不适用
costCenter 不适用
organization 不适用
division 不适用
department 不适用
manager value$refdisplayName 是($ref 仅在 SCIM 配置中受支持,在 --claim-mapping 中不受支持)

后续步骤