在 Microsoft Entra ID 中配置 SCIM

本文档介绍了如何在员工身份池中配置 SCIM 租户。如需详细了解 SCIM,请参阅 员工身份联合的 SCIM 配置

每个员工身份池仅支持一个 SCIM 租户。如需在已有一个 SCIM 租户的身份池中配置新的 SCIM 租户,您必须先硬删除现有租户

SCIM 租户的 --claim-mapping 标志只能包含特定的通用表达式语言 (CEL) 表达式。如需了解支持哪些表达式,请参阅映射令牌和 SCIM 属性

如需配置 跨域身份管理系统 (SCIM),请执行以下操作:
  1. 在 中配置 SCIM 租户和令牌 Google Cloud
  2. 在 Microsoft Entra ID 中配置 SCIM
  3. 更新提供方以启用 SCIM
  4. 验证 SCIM 同步

在 中配置 SCIM 租户和令牌 Google Cloud

如需在 Google Cloud中配置 SCIM 租户,请执行以下操作:

  1. 创建 SCIM 租户。

        gcloud iam workforce-pools providers scim-tenants create SCIM_TENANT_ID \
            --workforce-pool="WORKFORCE_POOL_ID" \
            --provider="PROVIDER_ID" \
            --display-name="SCIM_TENANT_DISPLAY_NAME" \
            --description="SCIM_TENANT_DESCRIPTION" \
            --claim-mapping="CLAIM_MAPPING" \
            --location="global"
        

    请替换以下内容:

    • SCIM_TENANT_ID:SCIM 租户的 ID。
    • WORKFORCE_POOL_ID:您在本文档前面部分创建的员工池的 ID。
    • PROVIDER_ID:您在本文档前面部分创建的员工身份池提供方的 ID。
    • SCIM_TENANT_DISPLAY_NAME:SCIM 租户的显示名称。
    • SCIM_TENANT_DESCRIPTION:SCIM 租户的说明。
    • CLAIM_MAPPING:属性映射的逗号分隔列表。如需查看映射属性的扩展列表,请参阅映射令牌和 SCIM 属性。建议为 Gemini Enterprise 使用以下映射:
      google.subject=user.emails[0].value.lowerAscii(),google.group=group.externalId

      您在 SCIM 租户中映射的 google.subject 属性必须使用 --attribute-mapping 标志唯一引用在员工身份池提供方的 google.subject 属性中映射的相同身份。 创建 SCIM 租户后,您无法更新声明映射。如需替换,您可以硬删除 SCIM 租户,然后立即创建一个新的 SCIM 租户。如需详细了解使用 SCIM 的注意事项,请参阅 SCIM 支持

  2. 命令完成后,执行以下操作:

    1. 在输出的 baseUri 字段中,保存整个 URI,其格式为 https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID。您需要向 IdP 提供此 URI。
    2. 此外,从 URI 中,仅保存 SCIM_TENANT_UID。 您需要在本文档后面部分使用此 UID 设置相应 SCIM 租户的 IAM 允许政策。
  3. 创建 SCIM 令牌:

        gcloud iam workforce-pools providers scim-tenants tokens create SCIM_TOKEN_ID \
            --display-name DISPLAY_NAME \
            --scim-tenant SCIM_TENANT_ID \
            --workforce-pool WORKFORCE_POOL_ID \
            --provider PROVIDER_ID \
            --location global
        

    请替换以下内容:

    • SCIM_TOKEN_ID:SCIM 令牌的 ID
    • DISPLAY_NAME:SCIM 令牌的显示名称
    • WORKFORCE_POOL_ID:员工池的 ID
    • SCIM_TENANT_ID:SCIM 租户的 ID
    • PROVIDER_ID:员工身份池提供方的 ID
  4. gcloud iam workforce-pools providers scim-tenants tokens create 命令完成后,执行以下操作:

    1. 在输出中,保存 securityToken 字段中 SCIM_TOKEN 的值。您需要向 IdP 提供此安全 令牌。安全令牌仅在此输出中显示, 如果丢失,您必须创建新的 SCIM 令牌。

    2. 如需检查 SCIM_TOKEN 是否因您的 组织政策而被拒绝,请运行以下命令:

      curl -v -H "Authorization: Bearer SCIM_TOKEN"  https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users

      如果该命令因权限相关错误而失败,请运行 gcloud organizations add-iam-policy-binding,如后续步骤中所述。如果该命令成功,您可以跳过该步骤。

  5. 为 SCIM 租户和令牌设置 IAM 允许政策。如果上一步中的 curl 命令 因权限相关错误而失败,则必须运行以下命令:

        gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
            --member=serviceAccount:SERVICE_AGENT_EMAIL \
            --role roles/iam.scimSyncer
        

    请替换以下内容:

    • ORGANIZATION_ID:组织的 ID。
    • SERVICE_AGENT_EMAIL:服务代理的邮箱。该邮箱的格式如下:o-ORGANIZATION_ID-SCIM_TENANT_UID@gcp-sa-iamscim.iam.gserviceaccount.com。创建 SCIM 租户时,系统会返回 SCIM_TENANT_UID

在 IdP 中配置群组时,确保每个群组的显示名称(在 displayName 字段中提供)在 SCIM 租户中都是唯一的。如需详细了解 Microsoft Entra ID 中的群组和 SCIM,请参阅群组

在 Microsoft Entra ID 中配置 SCIM

如需在 Microsoft Entra ID 中配置 SCIM,请执行以下操作:

  1. 打开 Azure 门户,并以具有全局管理员权限的用户身份登录。
  2. 依次选择 Microsoft Entra ID > 企业应用
  3. 点击新建应用
  4. Browse Microsoft Entra App gallery (浏览 Microsoft Entra 应用程序库)中,点击创建您自己的应用
  5. 在随即显示的创建您自己的应用 面板中,执行以下操作:
    1. 对于 What's the name of your app(您的应用名称是什么),输入应用的名称。
    2. 选择 Integrate any other application you don't find in gallery (Non-gallery)(集成您在库中找不到的任何其他应用(非库))。
    3. 如需创建应用,请点击创建
  6. 在您的应用中,执行以下操作:
    1. 管理部分中,点击预配
    2. 在随即显示的右侧窗格中,点击新建配置
    3. 管理员凭证下的租户网址中,输入您在创建 SCIM 租户时获得的 SCIM 网址,并在末尾添加 ?aadOptscim062020。 您必须将 ?aadOptscim062020 添加到基本 URI 的末尾。

      Microsoft Entra ID 需要此查询参数,以确保 SCIM PATCH 请求符合 SCIM RFC 标准。如需了解详情,请参阅 Microsoft 的文档

      Microsoft Entra ID 中的最终租户网址应采用以下格式:

      https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID?aadOptscim062020

      SCIM_TENANT_UID 替换为 SCIM 租户 UID。

    4. Secret token(Secret 令牌)中,输入您在创建 SCIM 令牌时获得的 Secret 令牌。
    5. 如需使用员工身份联合测试 SCIM 配置, 请点击 测试连接
    6. 如需保存配置,请点击创建
  7. 管理部分中,执行以下操作:
    1. 点击属性映射
    2. 点击预配 Microsoft Entra ID 用户
    3. 属性映射页面中,执行以下操作:
      1. 属性映射表中,找到 externalId 对应的行,然后点击该行中的修改。 在修改属性 页面中,执行以下操作:
        1. 源属性 下拉列表中,选择 objectId
        2. 点击确定
      2. 如需保存属性映射,请点击保存

更新提供方以启用 SCIM

如需为提供方启用 SCIM,请执行以下操作:

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

请替换以下内容:

  • PROVIDER_ID:员工身份池提供方的 ID
  • WORKFORCE_POOL_ID:员工池的 ID
  • LOCATION:员工池的位置

SAML

      gcloud iam workforce-pools providers update-saml PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

请替换以下内容:

  • PROVIDER_ID:员工身份池提供方的 ID
  • WORKFORCE_POOL_ID:员工池的 ID
  • LOCATION:员工池的位置

如需验证 SCIM 同步,请参阅验证 SCIM 同步

映射令牌和 SCIM 属性

您必须在员工身份池提供方和为该提供方配置的 SCIM 租户中保持属性映射的一致性。对于员工身份池提供方,您可以使用 --attribute-mapping 标志;对于 SCIM 租户,您可以使用 --claim-mapping 标志。无论是在令牌还是 SCIM 映射中定义,映射到用户的 google.subject 的 IdP 属性都必须唯一引用同一身份。如需详细了解如何在使用 SCIM 时映射属性,请参阅 SCIM 支持部分。 下表展示了如何映射令牌声明中的属性和 SCIM 属性:

Google 属性 员工身份池提供方映射 SCIM 租户映射
google.subject assertion.oid user.externalId
google.subject assertion.attributes['http://schemas.microsoft.com/identity/claims/objectidentifier'][0] user.externalId
google.subject assertion.email user.emails[0].value
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0] user.emails[0].value
google.subject assertion.email.lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0].lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.preferred_username user.userName
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'][0] user.userName
google.subject assertion.preferred_username.lowerAscii() user.userName.lowerAscii()
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'][0].lowerAscii() user.userName.lowerAscii()
google.group 请务必使用 --scim-usage=enabled-for-groups 更新提供方 N/A group.externalId

验证 SCIM 同步

配置 SCIM 后,您可以使用 curl 验证用户和群组是否正确同步到 Google Cloud。这些命令需要有效的 SCIM 令牌和 SCIM 租户 ID。

验证用户同步

如需验证用户是否已正确同步,请使用以下过滤条件搜索用户的 userName

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users?filter=userName%20eq%20%22USER_NAME%22"

示例响应:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "USER_ID",
      "userName": "USER_NAME",
      ...
    }
  ]
}

验证群组同步

如需验证群组是否已正确同步,请使用以下过滤条件搜索群组的 displayName

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=displayName%20eq%20%22GROUP_NAME%22"

示例响应:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

验证群组成员资格

如需验证特定用户是否为群组成员,请使用同时指定群组 ID 和用户 ID 的过滤条件。

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=id%20eq%20%22GROUP_ID%22%20and%20members%20eq%20%22USER_ID%22"

如果用户是成员,则示例响应如下:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

如果用户不是成员,则示例响应如下:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 0,
  "Resources": []
}

注意: 如需获取 GROUP_IDUSER_ID,请先使用 displayNameuserName 过滤条件查找群组和用户。ID 会在响应的 id 字段中返回。将 SCIM_TOKENSCIM_TENANT_UIDUSER_NAMEGROUP_NAMEGROUP_IDUSER_ID 替换为实际值。

强制删除 SCIM 租户

如需强制删除 SCIM 租户,请执行以下操作:

  1. 如果为提供方设置了 --scim-usage=enabled-for-groups,请从提供方配置中将其停用:
              gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
                  --workforce-pool=WORKFORCE_POOL_ID \
                  --location=LOCATION \
                  --scim-usage=SCIM_USAGE_UNSPECIFIED
            

    请替换以下内容:

    • PROVIDER_ID:员工身份池提供方的 ID
    • WORKFORCE_POOL_ID:员工池的 ID
    • LOCATION:员工池的位置

  2. 删除 SCIM 租户:
      gcloud iam workforce-pools providers scim-tenants delete SCIM_TENANT_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --provider=PROVIDER_ID \
          --hard-delete \
          --location=global
    

    请替换以下内容:

    • SCIM_TENANT_ID:要删除的 SCIM 租户的 ID
    • WORKFORCE_POOL_ID:员工池的 ID
    • PROVIDER_ID:员工身份池提供方的 ID
    如需详细了解 SCIM(包括删除 SCIM 租户),请参阅 SCIM 支持

后续步骤