配置员工身份联合

本指南介绍如何通过支持 OIDCSAML 2.0 的身份提供方 (IdP) 配置员工身份联合。

如需查看特定于 IdP 的说明,请参阅以下内容:

准备工作

  1. 确保您已设置 Google Cloud 组织。
  2. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

    gcloud init

    如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  3. Enable the Identity and Access Management (IAM) and Resource Manager APIs.

    Enable the APIs

  4. 如需登录,您的 IdP 必须提供已签名的身份验证信息:OIDC IdP 必须提供 JWT,而 SAML IdP 响应必须经过签名。
  5. 如需接收有关贵组织或Google Cloud 产品的变更的重要信息,您必须提供必要的联系人。如需了解详情,请参阅员工身份联合概览

费用

员工身份联合是一项免费功能。不过,员工身份联合的详细审核日志记录使用 Cloud Logging。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格

所需的角色

如需获得配置员工身份联合所需的权限,请让您的管理员为您授予组织的 Workforce Identity Pool Admin (roles/iam.workforcePoolAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

此外,Owner 基本角色 (roles/owner) 还包括配置员工身份联合所需的权限。您不应在生产环境中授予基本角色,但可以在开发或测试环境中授予这些角色。

配置员工身份联合

如需配置员工身份联合,您需要创建员工身份池员工身份池提供方

创建员工身份池

如需创建池,请执行以下命令:

gcloud

如需创建员工身份池,请运行以下命令:

gcloud iam workforce-pools create WORKFORCE_POOL_ID \     --organization=ORGANIZATION_ID \     --display-name="DISPLAY_NAME" \     --description="DESCRIPTION" \     --session-duration=SESSION_DURATION \     --location=global 

替换以下内容:

  • WORKFORCE_POOL_ID:您选择用于表示您的 Google Cloud 员工群组的 ID。如需了解如何设置 ID 的格式,请参阅 API 文档中的查询参数部分。
  • ORGANIZATION_ID:员工身份池所属 Google Cloud 组织的数字形式组织 ID。员工身份池可在组织中的所有项目和文件夹中使用。
  • DISPLAY_NAME:可选。您的员工身份池的显示名称。
  • DESCRIPTION:可选。员工身份池说明。
  • SESSION_DURATION:可选。会话时长,以在后面附加 s 的数字表示,例如 3600s。会话时长,用于确定来自此员工池的 Google Cloud 访问令牌、控制台(联合)登录会话和 gcloud CLI 登录会话的有效时长。会话时长默认为 1 小时(3600 秒)。会话时长值必须介于 15 分钟(900 秒)到 12 小时(43200 秒)之间。

控制台

如需创建员工身份池,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往员工身份池页面:

    转到“员工身份池”

  2. 为员工身份池选择组织。员工身份池可在组织中的所有项目和文件夹中使用。

  3. 点击创建池,然后执行以下操作:

    1. 名称字段中,输入池的显示名称。池 ID 是根据您输入的名称自动派生的,并显示在名称字段下方。您可以点击池 ID 旁边的修改来更新池 ID。

    2. 可选:在说明中,输入池的说明。

    3. 如需创建员工身份池,请点击下一步

员工身份池的会话时长默认为 1 小时(3600 秒)。会话时长用于确定来自此员工池的 Google Cloud 访问令牌以及控制台(联合)和 gcloud CLI 登录会话的有效时长。创建池后,您可以更新池以设置自定义会话时长。会话时长必须介于 15 分钟(900 秒)到 12 小时(43200 秒)之间。

创建员工身份池提供方

本部分介绍如何创建员工身份池提供方,以便您的 IdP 用户能够访问 Google Cloud。您可以将提供方配置为使用 OIDC 或 SAML 协议。

创建 OIDC 员工池提供方

如需使用 OIDC 协议创建员工身份池提供方,请执行以下操作:

  1. 在您的 OIDC IdP 中,为 Google Cloud员工身份联合注册一个新应用。记下 IdP 提供的客户端 ID 和颁发者 URI。您在本文档中需要使用这些信息。

  2. 如果您打算设置用户对控制台的访问权限,请将以下重定向网址添加到 OIDC IdP:

    https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID 

    替换以下内容:

    • WORKFORCE_POOL_ID:员工身份池 ID

    • WORKFORCE_PROVIDER_ID:您在本文档后面部分创建的员工身份池提供方的 ID。

    如需了解如何配置控制台(联合)登录,请参阅设置用户对控制台(联合)的访问权限

  3. 在 Google Cloud中,如需创建提供方,请执行以下操作:

    gcloud

    代码流

    如需创建使用授权代码流程进行 Web 登录的 OIDC 提供方,请运行以下命令:

     gcloud iam workforce-pools providers create-oidc WORKFORCE_PROVIDER_ID \     --workforce-pool=WORKFORCE_POOL_ID \     --display-name="DISPLAY_NAME" \     --description="DESCRIPTION" \     --issuer-uri="ISSUER_URI" \     --client-id="OIDC_CLIENT_ID" \
    --client-secret-value="OIDC_CLIENT_SECRET" \ --web-sso-response-type="code" \ --web-sso-assertion-claims-behavior="merge-user-info-over-id-token-claims" \ --web-sso-additional-scopes="WEB_SSO_ADDITIONAL_SCOPES" \ --attribute-mapping="ATTRIBUTE_MAPPING" \ --attribute-condition="ATTRIBUTE_CONDITION" \ --jwk-json-path="JWK_JSON_PATH" \ --detailed-audit-logging \ --location=global

    请替换以下内容:

    • WORKFORCE_PROVIDER_ID:唯一的员工身份池提供方 ID。前缀 gcp- 已预留,因此不能在员工身份池或员工身份池提供方 ID 中使用。
    • WORKFORCE_POOL_ID:您的 IdP 所关联的员工身份池 ID。
    • DISPLAY_NAME:提供方的可选易记显示名;例如 idp-eu-employees
    • DESCRIPTION:可选的员工提供方说明;例如 IdP for Partner Example Organization employees
    • ISSUER_URI:OIDC 颁发者 URI,采用有效的 URI 格式且以 https 开头;例如 https://example.com/oidc。注意:出于安全原因,ISSUER_URI 必须使用 HTTPS 架构。
    • OIDC_CLIENT_ID:向 OIDC IdP 注册的 OIDC 客户端的 ID;该 ID 必须与您的 IdP 颁发的 JWT 的 aud 声明相匹配。
    • OIDC_CLIENT_SECRET:OIDC 客户端密钥。
    • WEB_SSO_ADDITIONAL_SCOPES:(可选)要发送到 OIDC IdP 以进行控制台(联合)或基于浏览器的 gcloud CLI 登录的额外范围。
    • ATTRIBUTE_MAPPING属性映射。以下是属性映射示例:
      google.subject=assertion.sub, google.groups=assertion.group1, attribute.costcenter=assertion.costcenter
      此示例会将 OIDC 断言中的 IdP 属性 subjectgroup1costcenter 分别映射到 google.subjectgoogle.groupsattribute.costcenter 属性。
    • ATTRIBUTE_CONDITION属性条件;例如 assertion.role == 'gcp-users'。本示例条件可确保仅具有 gcp-users 角色的用户才能使用此提供方登录。
    • JWK_JSON_PATH本地上传的 OIDC JWK 的可选路径。如果未提供此参数, Google Cloud 会改用您的 IdP 的 /.well-known/openid-configuration 路径来寻找包含公钥的 JWK。如需详细了解本地上传的 OIDC JWK,请参阅管理 OIDC JWK
    • 员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格

      如需为员工身份池提供方停用详细审核日志记录,请在运行 gcloud iam workforce-pools providers create 时省略 --detailed-audit-logging 标志。如需停用详细审核日志记录,您也可以更新提供方

    在命令响应中,POOL_RESOURCE_NAME 是池的名称;例如 locations/global/workforcePools/enterprise-example-organization-employees

    隐式流

    如需创建使用隐式流进行 Web 登录的 OIDC 提供方,请运行以下命令:

     gcloud iam workforce-pools providers create-oidc WORKFORCE_PROVIDER_ID \     --workforce-pool=WORKFORCE_POOL_ID \     --display-name="DISPLAY_NAME" \     --description="DESCRIPTION" \     --issuer-uri="ISSUER_URI" \     --client-id="OIDC_CLIENT_ID" \     --web-sso-response-type="id-token" \     --web-sso-assertion-claims-behavior="only-id-token-claims" \     --web-sso-additional-scopes="WEB_SSO_ADDITIONAL_SCOPES" \     --attribute-mapping="ATTRIBUTE_MAPPING" \     --attribute-condition="ATTRIBUTE_CONDITION" \     --jwk-json-path="JWK_JSON_PATH" \     --detailed-audit-logging \     --location=global 

    请替换以下内容:

    • WORKFORCE_PROVIDER_ID:唯一的员工身份池提供方 ID。前缀 gcp- 已预留,因此不能在员工身份池或员工身份池提供方 ID 中使用。
    • WORKFORCE_POOL_ID:您的 IdP 所关联的员工身份池 ID。
    • DISPLAY_NAME:提供方的可选易记显示名;例如 idp-eu-employees
    • DESCRIPTION:可选的员工提供方说明;例如 IdP for Partner Example Organization employees
    • ISSUER_URI:OIDC 颁发者 URI,采用有效的 URI 格式且以 https 开头;例如 https://example.com/oidc。注意:出于安全原因,ISSUER_URI 必须使用 HTTPS 架构。
    • OIDC_CLIENT_ID:向 OIDC IdP 注册的 OIDC 客户端的 ID;该 ID 必须与您的 IdP 颁发的 JWT 的 aud 声明相匹配。
    • WEB_SSO_ADDITIONAL_SCOPES:(可选)要发送到 OIDC IdP 以进行控制台(联合)或基于浏览器的 gcloud CLI 登录的额外范围。
    • ATTRIBUTE_MAPPING属性映射。以下是属性映射示例:
      google.subject=assertion.sub, google.groups=assertion.group1, attribute.costcenter=assertion.costcenter
      此示例会将 OIDC 断言中的 IdP 属性 subjectgroup1costcenter 分别映射到 google.subjectgoogle.groupsattribute.costcenter 属性。
    • ATTRIBUTE_CONDITION属性条件;例如 assertion.role == 'gcp-users'。本示例条件可确保仅具有 gcp-users 角色的用户才能使用此提供方登录。
    • JWK_JSON_PATH本地上传的 OIDC JWK 的可选路径。如果未提供此参数, Google Cloud 会改用您的 IdP 的 /.well-known/openid-configuration 路径来寻找包含公钥的 JWK。如需详细了解本地上传的 OIDC JWK,请参阅管理 OIDC JWK
    • 员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格

      如需为员工身份池提供方停用详细审核日志记录,请在运行 gcloud iam workforce-pools providers create 时省略 --detailed-audit-logging 标志。如需停用详细审核日志记录,您也可以更新提供方

    在命令响应中,POOL_RESOURCE_NAME 是池的名称;例如 locations/global/workforcePools/enterprise-example-organization-employees

    前缀 gcp- 已预留,因此不能在员工身份池或员工身份池提供方 ID 中使用。

    对于 OIDC 联合,您可以使用 assertion.NAME:一个字符串,该字符串等于 ID 令牌载荷中类似名称声明的值。

    控制台

    代码流

    在 Google Cloud 控制台中,如需创建使用授权代码流程的 OIDC 提供方,请执行以下操作:

    1. 在 Google Cloud 控制台中,前往员工身份池页面:

      进入“员工身份池”

    2. 员工身份池表中,选择要为其创建提供方的池。

    3. 提供方表中,点击添加提供方

    4. 选择协议中,选择 OpenID Connect (OIDC)

    5. 创建池提供方中,执行以下操作:

      1. 名称中,输入提供方的名称。
      2. 颁发者 (网址) 中,输入颁发者 URI。OIDC 颁发者 URI 必须采用有效的 URI 格式,并以 https 开头;例如 https://example.com/oidc
      3. 输入客户端 ID,即注册到 OIDC IdP 的 OIDC 客户端 ID,该 ID 必须与 IdP 颁发的 JWT 的 aud 声明相匹配。
      4. 如需创建状态为已启用的提供方,请确保已启用提供方处于开启状态。
      5. 点击继续
    6. 流程类型中,执行以下操作。流程类型仅用于基于 Web 的单点登录流程。

      1. 流程类型中,选择代码
      2. 客户端密钥中,输入 IdP 提供的客户端密钥。
      3. 断言声明行为中,选择以下任一选项:

        • 用户信息和 ID 令牌
        • 仅 ID 令牌
      4. 点击继续

    7. 配置提供方中,您可以配置属性映射和属性条件。如需创建属性映射,请执行以下操作。您可以提供 IdP 字段名称,也可以提供返回字符串的 CEL 格式表达式。

      1. 必需:在 OIDC 1 中,输入 IdP 中的主题;例如 assertion.sub

      2. 可选:如需添加其他属性映射,请执行以下操作:

        1. 点击添加映射
        2. Google n 中(其中 n 为数字),输入一个 Google Cloud支持的密钥
        3. 在相应的 OIDC n 字段中,以 CEL 格式输入要映射的 IdP 特定字段的名称。
      3. 如需创建属性条件,请执行以下操作:

        1. 点击添加条件
        2. 属性条件中,以 CEL 格式输入条件;例如 assertion.role == 'gcp-users'。本示例条件可确保仅具有 gcp-users 角色的用户才能使用此提供方登录。
      4. 如需启用详细审核日志记录,请在详细日志记录中点击启用详细的属性值日志记录切换开关。

        员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格

        如需为员工身份池提供方停用详细审核日志记录,请在运行 gcloud iam workforce-pools providers create 时省略 --detailed-audit-logging 标志。如需停用详细审核日志记录,您也可以更新提供方

    8. 如需创建提供方,请点击提交

    隐式流

    在 Google Cloud 控制台中,如需创建使用隐式流的 OIDC 提供方,请执行以下操作:

    1. 在 Google Cloud 控制台中,前往员工身份池页面:

      进入“员工身份池”

    2. 员工身份池表中,选择要为其创建提供方的池。

    3. 提供方表中,点击添加提供方

    4. 选择协议中,选择 OpenID Connect (OIDC)

    5. 创建池提供方中,执行以下操作:

      1. 名称中,输入提供方的名称。
      2. 颁发者 (网址) 中,输入颁发者 URI。OIDC 颁发者 URI 必须采用有效的 URI 格式,并以 https 开头;例如 https://example.com/oidc
      3. 输入客户端 ID,即注册到 OIDC IdP 的 OIDC 客户端 ID,该 ID 必须与 IdP 颁发的 JWT 的 aud 声明相匹配。
      4. 如需创建状态为已启用的提供方,请确保已启用提供方处于开启状态。
      5. 点击继续
    6. 流程类型中,执行以下操作。流程类型仅用于基于 Web 的单点登录流程。

      1. 流程类型中,选择 ID 令牌
      2. 点击继续
    7. 配置提供方中,您可以配置属性映射和属性条件。如需创建属性映射,请执行以下操作。您可以提供 IdP 字段名称,也可以提供返回字符串的 CEL 格式表达式。

      1. 必需:在 OIDC 1 中,输入 IdP 中的主题;例如 assertion.sub

      2. 可选:如需添加其他属性映射,请执行以下操作:

        1. 点击添加映射
        2. Google n 中(其中 n 为数字),输入一个 Google Cloud支持的密钥
        3. 在相应的 OIDC n 字段中,以 CEL 格式输入要映射的 IdP 特定字段的名称。
      3. 如需创建属性条件,请执行以下操作:

        1. 点击添加条件
        2. 属性条件中,以 CEL 格式输入条件;例如 assertion.role == 'gcp-users'。本示例条件可确保仅具有 gcp-users 角色的用户才能使用此提供方登录。

      4. 如需启用详细审核日志记录,请在详细日志记录中点击启用详细的属性值日志记录切换开关。

        员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格

        如需为员工身份池提供方停用详细审核日志记录,请在运行 gcloud iam workforce-pools providers create 时省略 --detailed-audit-logging 标志。如需停用详细审核日志记录,您也可以更新提供方

    8. 如需创建提供方,请点击提交

创建 SAML 员工池提供方

  1. 在您的 SAML IdP 中,为 Google Cloud员工身份联合注册一个新应用。

  2. 设置 SAML 断言的目标对象。它通常是 IdP 配置中的 SP Entity ID 字段。您必须将其设置为以下网址:

    https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID 
  3. 设置重定向网址,也称为断言使用方服务 (ACS) 网址。如需设置重定向网址,请在 SAML IdP 中找到重定向网址字段,然后执行以下操作之一:

    • 如需通过 Google Cloud 控制台或其他基于浏览器的登录方法来设置基于浏览器的登录,请输入以下网址:

      https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID 

      替换以下内容:

      • WORKFORCE_POOL_ID:员工身份池 ID

      • WORKFORCE_PROVIDER_ID:您在本文档后面部分创建的员工身份池提供方的 ID。

    • 如需通过 IdP 设置程序化登录,请输入以下网址:

      localhost 

    如需详细了解如何配置控制台登录,请参阅设置用户对控制台的访问权限

  4. 在 Google Cloud中,使用 IdP 的 SAML 元数据文档创建 SAML 员工身份池提供方。您可以从 IdP 下载 SAML 元数据 XML 文档。该文档必须至少包含以下内容:

    • 您的 IdP 的 SAML 实体 ID。
    • 您的 IdP 的单点登录网址。
    • 至少一个签名公钥。 如需详细了解签名密钥,请参阅本指南后面部分的密钥要求

gcloud

如需使用 gcloud CLI 配置 SAML 提供方,请执行以下操作:

  gcloud iam workforce-pools providers create-saml WORKFORCE_PROVIDER_ID \       --workforce-pool=WORKFORCE_POOL_ID \       --display-name="DISPLAY_NAME" \       --description="DESCRIPTION" \       --idp-metadata-path=METADATA_FILE_PATH \       --attribute-mapping="ATTRIBUTE_MAPPING" \       --attribute-condition="ATTRIBUTE_CONDITION" \       --location=global 

替换以下内容:

  • WORKFORCE_PROVIDER_ID:员工身份池提供方 ID。
  • WORKFORCE_POOL_ID:员工身份池 ID。
  • DISPLAY_NAME:提供方的显示名;例如 idp-eu-employees
  • DESCRIPTION:员工身份池提供方的说明;例如 IdP for Partner Example Organization EU employees
  • METADATA_FILE_PATH:SAML 元数据文件的路径。
  • ATTRIBUTE_MAPPING属性映射,例如:

    google.subject=assertion.subject, google.groups=assertion.attributes['https://example.com/aliases'], attribute.costcenter=assertion.attributes.costcenter[0]
    此示例会将 IdP 属性 assertion.subjectassertion.attributes['https://example.com/aliases']assertion.attributes.costcenter[0] 分别映射到 Google Cloud属性 google.subjectgoogle.groupsgoogle.costcenter

  • ATTRIBUTE_CONDITION属性条件。例如,要将 ipaddr 属性限制为特定 IP 范围,您可以设置条件 assertion.attributes.ipaddr.startsWith('98.11.12.')。此示例条件可确保只有 IP 地址以 98.11.12. 开头的用户才能使用此员工提供方登录。

提供方可能需要几分钟才能开始接受请求。

对于 SAML 联合,您可以在属性映射和条件中使用以下关键字:

  • assertion.subject:一个字符串,等于 SAML 断言中的 NameID 属性。
  • assertion.attributes.NAME:一个字符串列表,等于 SAML 断言中类似名称属性的值。

可选:接受来自 IdP 的加密 SAML 断言

如需让您的 SAML 2.0 IdP 能够生成员工身份联合可接受的加密 SAML 断言,请执行以下操作:

  • 在员工身份联合中,执行以下操作:
    • 为您的员工身份池提供方创建非对称密钥对。
    • 下载包含公钥的证书文件。
    • 配置您的 SAML IdP,以使用公钥加密颁发的 SAML 断言。
  • 在 IdP 中,执行以下操作:
    • 启用断言加密(也称为令牌加密)。
    • 上传您在员工身份联合中创建的公钥。
    • 确认您的 IdP 生成加密的 SAML 断言。
请注意,即使配置了 SAML 加密提供方密钥,员工身份联合仍然可以处理明文断言。

创建员工身份联合 SAML 断言加密密钥

本部分将指导您创建非对称密钥对,使员工身份联合能够接受加密的 SAML 断言。

Google Cloud 使用私钥来解密 IdP 发出的 SAML 断言。如需创建用于 SAML 加密的非对称密钥对,请运行以下命令。如需了解详情,请参阅支持的 SAML 加密算法

gcloud iam workforce-pools providers keys create KEY_ID \     --workforce-pool WORKFORCE_POOL_ID \     --provider WORKFORCE_PROVIDER_ID \     --location global \     --use encryption \     --spec KEY_SPECIFICATION

请替换以下内容:

  • KEY_ID:您选择的键名称
  • WORKFORCE_POOL_ID:池 ID
  • WORKFORCE_PROVIDER_ID:员工身份池提供方 ID
  • KEY_SPECIFICATION:密钥规范,可以是 rsa-2048rsa-3072rsa-4096 之一。

创建密钥对后,如需将公钥下载到证书文件中,请执行以下命令。只有员工身份联合可以访问私钥。

gcloud iam workforce-pools providers keys describe KEY_ID \     --workforce-pool WORKFORCE_POOL_ID \     --provider WORKFORCE_PROVIDER_ID \     --location global \     --format "value(keyData.key)" \     > CERTIFICATE_PATH

替换以下内容:

  • KEY_ID:密钥名称
  • WORKFORCE_POOL_ID:池 ID
  • WORKFORCE_PROVIDER_ID:员工身份池提供方 ID
  • CERTIFICATE_PATH:要将证书写入的路径,例如 saml-certificate.cersaml-certificate.pem

配置符合 SAML 2.0 标准的 IdP,以发出加密的 SAML 断言

配置您的 SAML IdP,以使用上一步中下载的公共证书来加密颁发的 SAML 断言。如需了解具体说明,请咨询您的 IdP 团队。

将 IdP 配置为加密 SAML 断言后,我们建议您检查以确保其生成的断言确实已加密。即使配置了 SAML 断言加密,员工身份联合仍然可以处理明文断言。

删除员工身份联合加密密钥

如需删除 SAML 加密密钥,请运行以下命令:
  gcloud iam workforce-pools providers keys delete KEY_ID \       --workforce-pool WORKFORCE_POOL_ID \       --provider WORKFORCE_PROVIDER_ID \       --location global

请替换以下内容:

  • KEY_ID:密钥名称
  • WORKFORCE_POOL_ID:池 ID
  • WORKFORCE_PROVIDER_ID:员工身份池提供方 ID

支持的 SAML 加密算法

员工身份联合支持以下密钥传输算法:

员工身份联合支持以下块加密算法:

SAML X.509 签名密钥要求

以下密钥规范适用于 SAML X.509 签名密钥:

  • 封装在 X.509 v3 证书中的 RSA 公钥。

  • 证书有效性要求:

    • notBefore:不超过未来 7 天的时间戳
    • notAfter:不超过未来 25 年的时间戳
  • 推荐的算法:

在给定时间,员工身份池提供方最多可以同时配置 3 个签名密钥。如果存在多个密钥, Google Cloud会遍历这些密钥,并尝试使用每个未过期的密钥来履行令牌交换请求。

出于安全方面的考虑,我们强烈建议您不要在其他服务中重复使用相同的密钥对。

密钥管理

如需更新 IdP 的签名密钥,请执行以下操作:

  1. 创建新的非对称密钥对,并使用密钥对配置 SAML 身份提供方。您需要首先将其标记为无效,然后在后续步骤中将其激活。

  2. 从 IdP 下载 SAML 元数据 XML 文档。

  3. 使用 SAML 元数据文档更新员工身份池提供方资源。如果存在多个密钥, Google Cloud 会遍历每个未过期的密钥并尝试履行密钥交换请求。

    如需使用 SAML 元数据更新员工身份池提供方,请执行以下命令。

    gcloud iam workforce-pools providers update-saml WORKFORCE_PROVIDER_ID \     --workforce-pool=WORKFORCE_POOL_ID \     --idp-metadata-path=SAML_METADATA_FILE_PATH \     --location=global 

    替换以下内容:

    • WORKFORCE_PROVIDER_ID:员工身份池提供方 ID
    • WORKFORCE_POOL_ID:员工身份池 ID
    • SAML_METADATA_FILE_PATH:SAML 元数据文件的路径
  4. 等待上一步返回的操作完成(该操作标记为已完成),然后在 SAML IdP 中激活新的签名密钥。旧签名密钥会被标记为无效。您的 IdP 发出的断言会使用新密钥进行签名。

以下步骤不是强制性的,但我们建议您最好执行这些步骤:

  1. 从 IdP 中删除现已失效的旧签名密钥。
  2. 从 IdP 下载 SAML 元数据 XML 文档。
  3. 使用 SAML 元数据文档更新员工身份池提供方资源。 Google Cloud 会拒绝使用过期签名密钥签名的断言。如需更新文档,请执行以下命令:

    gcloud iam workforce-pools providers update-saml WORKFORCE_PROVIDER_ID \     --workforce-pool=WORKFORCE_POOL_ID \     --idp-metadata-path=SAML_METADATA_FILE_PATH \     --location=global 

    替换以下内容:

    • WORKFORCE_PROVIDER_ID:员工身份池提供方 ID
    • WORKFORCE_POOL_ID:员工身份池 ID
    • SAML_METADATA_FILE_PATH:SAML 元数据路径

密钥删除限制条件

Google Cloud 会拒绝使用已删除密钥签名的断言。

控制台

如需使用 Google Cloud 控制台配置 SAML 提供方,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往员工身份池页面:

    转到“员工身份池”

  2. 员工身份池表中,选择要为其创建提供方的池。

  3. 提供方表中,点击添加提供方

  4. 选择协议中,选择 SAML

  5. 创建池提供方中,执行以下操作:

    1. 名称中,输入提供方的名称。

    2. 可选:在说明中,输入提供方的说明。

    3. IDP 元数据文件 (XML) 中,选择您在本指南前面部分生成的元数据 XML 文件。

    4. 确保已启用提供方处于启用状态。

    5. 点击继续

  6. 配置提供方中,执行以下操作:

    1. 属性映射中,输入 google.subject 的 CEL 表达式。

    2. 可选:如需输入其他映射,请点击添加映射,然后输入其他映射,例如:

      google.subject=assertion.subject, google.groups=assertion.attributes['https://example.com/aliases'], attribute.costcenter=assertion.attributes.costcenter[0]
      此示例会将 IdP 属性 assertion.subjectassertion.attributes['https://example.com/aliases']assertion.attributes.costcenter[0] 分别映射到 Google Cloud属性 google.subjectgoogle.groupsgoogle.costcenter

    3. 可选:如需添加属性条件,请点击添加条件,然后输入表示属性条件的 CEL 表达式。 例如,要将 ipaddr 属性限制为特定 IP 范围,您可以设置条件 assertion.attributes.ipaddr.startsWith('98.11.12.')。此示例条件可确保只有 IP 地址以 98.11.12. 开头的用户才能使用此员工提供方登录。

    4. 点击继续

    5. 如需启用详细审核日志记录,请在详细日志记录中点击启用详细的属性值日志记录切换开关。

      员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格

      如需为员工身份池提供方停用详细审核日志记录,请在运行 gcloud iam workforce-pools providers create 时省略 --detailed-audit-logging 标志。如需停用详细审核日志记录,您也可以更新提供方

  7. 如需创建提供方,请点击提交

在 IAM 政策中表示员工池用户

下表显示了用于向单个用户、用户群组、执行特定声明的用户或员工池中的所有用户授予角色的主账号标识符。

身份 标识符格式
员工身份池中的单个身份 principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/SUBJECT_ATTRIBUTE_VALUE
群组中的所有员工身份 principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/group/GROUP_ID
具有特定属性值的所有员工身份 principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
员工身份池中的所有身份 principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*

如需查看主账号标识符的完整列表,请参阅主账号标识符

向主账号授予 IAM 角色

您可以为主账号(例如单个身份、身份群组或整个池)授予角色。

如需向主账号授予项目角色,请执行以下命令:

gcloud projects add-iam-policy-binding PROJECT_ID \     --role="ROLE" \     --member="PRINCIPAL" 

请替换以下内容:

  • PROJECT_ID:项目 ID
  • ROLE:要设置的角色
  • PRINCIPAL:主账号;请参阅员工身份联合的主账号标识符

在以下示例中,该命令会将 Storage Admin (roles/storage.admin) 授予 GROUP_ID 群组中的所有身份:

gcloud projects add-iam-policy-binding my-project \     --role="roles/storage.admin" \     --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID" 

如需详细了解主账号格式,请参阅员工身份联合的主账号标识符

删除用户

员工身份联合为联合用户身份创建用户元数据和资源。如果您选择在 IdP 中删除用户,则还必须在 Google Cloud中明确删除这些资源。为此,请参阅删除员工身份联合用户及其数据

您可能会看到资源仍与已删除的用户关联。这是因为删除用户元数据和资源需要长时间运行的操作。在您启动用户身份删除后,用户在删除操作之前启动的进程可以继续运行,直到这些进程完成或取消。

后续步骤