使用 Okta 配置员工身份联合并让用户登录

本指南介绍如何使用 Okta 作为身份提供方 (IdP) 来配置员工身份联合、管理访问权限以及让用户访问支持员工身份联合的 Google Cloud 服务。

准备工作

  1. 确保您已设置 Google Cloud 组织。
  2. After installing the Google Cloud CLI, configure the gcloud CLI to use your federated identity and then initialize it by running the following command:

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

所需的角色

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

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

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

创建员工身份池

控制台

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

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

    转到“员工身份池”

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

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

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

    3. 默认情况下已设置会话时长。如需输入自定义会话时长,请点击修改。会话时长,用于确定来自此员工池的 Google Cloud 访问令牌、控制台(联合)登录会话和 gcloud CLI 登录会话的有效时长。时长必须大于 15 分钟(900 秒)且小于 12 小时(43200 秒)。如果未设置会话时长,则默认为 1 小时(3600 秒)。

    4. 如需创建状态为已启用的池,请确保已启用池处于开启状态。

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

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:可选。会话时长,用于确定来自此员工池的 Google Cloud 访问令牌、控制台(联合)登录会话和 gcloud CLI 登录会话的有效时长。时长必须大于 15 分钟(900 秒)且小于 12 小时(43200 秒)。如果未设置会话时长,则默认为 1 小时(3600 秒)。

创建 Okta 应用集成

本部分介绍了使用 Okta 管理控制台创建 Okta 应用集成的步骤。如需了解详情,请参阅创建自定义应用集成

员工身份池支持使用 OIDC 和 SAML 协议进行联合。

如需了解详情,请参阅 Okta 的 OIDCSAML 集成指南。本部分介绍了基本配置。

OIDC

如需创建使用 OIDC 协议的 Okta 应用集成,请执行以下步骤:

  1. 登录 Okta 管理控制台。
  2. 转到应用 > 应用
  3. 如需开始配置应用集成,请执行以下操作:

    1. 点击创建应用集成
    2. 登录方法中,选择 OIDC - OpenID Connect
    3. 应用类型中,选择应用类型;例如 Web 应用
    4. 如需创建应用,请点击下一步
    5. 应用集成名称中,输入应用的名称。
    6. 授权类型部分中,选中隐式(混合)复选框。
    7. 登录重定向 URI 部分的文本字段中,输入重定向网址。用户成功登录后,系统会将用户重定向到此网址。如果您要配置对控制台(联合)的访问权限,请使用以下网址格式:

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

      请替换以下内容:

      • WORKFORCE_POOL_ID:您在本指南前面部分创建的员工池的 ID。
      • WORKFORCE_PROVIDER_ID:您选择的员工身份提供方 ID,例如:okta-oidc-provider。如需了解如何设置 ID 的格式,请参阅 API 文档中的查询参数部分。
    8. 选中Skip group assignment for now(暂时跳过群组分配)复选框。

    9. 如需保存应用集成,请点击保存

  4. 将应用集成分配给用户

  5. 可选:如需为 Okta 用户个人资料添加自定义属性,请执行以下操作:

    1. 数据类型中,选择 string
    2. 显示名称中,输入 Department
    3. 变量名称中,输入 department
    4. 如需保存映射,请点击保存

    如需详细了解如何添加自定义特性,请参阅向 Okta 用户个人资料添加自定义特性

  6. 可选:如需为 OIDC 令牌中发送的属性创建映射,请在目录中点击配置文件编辑器,然后执行以下操作:

    1. 找到您在本指南前面部分创建的 OIDC 应用。
    2. 点击映射
    3. 选择 Okta 用户到应用标签页。
    4. Okta 用户用户个人资料 标签页的一个可用组合框中,输入 department。Okta 会自动补全到 user.department
    5. 如需保存映射,请点击保存映射。如需了解详情,请参阅添加属性映射

    如需详细了解映射,请参阅在配置文件编辑器中将 Okta 特性映射到应用特性

  7. 可选:如需配置群组声明,请执行以下操作:

    1. 如果您使用组织授权服务器,请执行以下操作:
      1. 转到应用 > 应用
      2. 选择您在本部分前面创建的 OpenID Connect 客户端应用。
      3. 转到登录标签页
      4. OpenID Connect ID 令牌部分中,点击修改
      5. 群组声明类型部分中,您可以选择以下任一选项:
        • 选择表达式
        • 选择匹配正则表达式,然后输入 .*
      6. 如需保存群组声明,请点击保存
      7. 在本指南的后面部分中创建员工身份池提供方时,请添加 groups 作为从 Okta 请求群组声明以进行 Web 单点登录的额外范围。只有在您使用控制台(联合)或基于浏览器的 gcloud CLI 登录流程时,才需要执行此步骤。
    2. 如果您使用自定义授权服务器,请执行以下操作:
      1. 在管理控制台中,从安全性菜单中选择 API
      2. 选择要配置的自定义授权服务器。
      3. 进入声明标签页,然后点击添加声明
      4. 输入声明的名称。在此示例中,将其命名为 groups
      5. 在声明的包括在令牌类型中部分,选择 ID 令牌,然后选择始终
      6. 选择群组作为值类型
      7. 在“过滤条件”下拉框中,选择匹配正则表达式,然后在“值”中输入以下表达式:.*
      8. 点击创建

如需详细了解群组声明,请参阅添加群组声明

SAML

如需创建使用 SAML 协议的 Okta 应用集成,请执行以下步骤:

  1. 登录 Okta 管理控制台。
  2. 转到应用 > 应用
  3. 点击创建应用集成
  4. 登录方法中,选择 SAML 2.0,然后点击下一步
  5. 输入应用的名称,然后点击下一步以继续配置 SAML 选项。
  6. 单点登录网址中,输入重定向网址。这是用户成功登录后将被重定向到的网址。如果您要配置对控制台的访问权限,请使用以下网址格式。

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

  7. 输入目标对象 URI (SP Entity ID);该 ID 的格式如下:

    https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID

    替换以下内容:

    • WORKFORCE_POOL_ID:您在本指南前面部分创建的员工身份池的 ID
    • WORKFORCE_PROVIDER_ID:您选择的员工身份提供方 ID,例如:okta-saml-provider

    如需了解如何设置 ID 的格式,请参阅 API 文档中的查询参数部分。

  8. 可选:使用特性语句指定要在 SAML 断言中发送的任何自定义特性。设置完成后,您可以在 Google Cloud 中使用这些特性来创建访问权限管理政策,也可以在 attribute_condition 中使用这些特性;例如,在本指南中,您可以按如下方式映射部门:

    名称
    department user.department

    可选:如需添加本指南后面会用到的群组声明,请参阅如何在 SAML 断言中传递用户的群组成员资格

  9. 完成 Okta 应用集成的创建。

创建员工身份池提供方

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

创建 OIDC 员工身份池提供方

如需使用 OIDC 协议为您的 Okta 应用集成创建员工身份池提供方,请执行以下操作:

  1. 如需获取 Okta 应用集成的客户端 ID,请执行以下操作:

    1. 打开 Okta 应用集成。
    2. 点击常规标签页。
    3. 复制客户端 ID 字段中的内容。
  2. 如需创建 OIDC 员工身份池提供方以基于网络进行登录,请执行以下操作:

    控制台

    代码流

    1. 在 Okta 中,执行以下操作:

      1. 客户端身份验证中,选择客户端密钥

      2. 客户端密文表中,找到密钥,然后点击 复制

    2. 在 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. 响应类型中,执行以下操作。响应类型仅用于基于网络的单点登录流程。

        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 格式输入条件;例如:如果之前映射的 subject 的值包含以 @example.com 结尾的电子邮件地址,则为 assertion.subject.endsWith('@example.com')
      8. 如需创建提供方,请点击提交

    隐式流

    1. 在 Google Cloud 控制台中,执行以下操作:

      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. 响应类型中,执行以下操作。响应类型仅用于基于网络的单点登录流程。

        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 格式输入条件;例如:如果之前映射的 subject 的值包含以 @example.com 结尾的电子邮件地址,则为 assertion.subject.endsWith('@example.com')

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

    gcloud

    代码流

    在 Okta 中,执行以下操作:

    1. 客户端身份验证中,选择客户端密钥

    2. 客户端密文表中,找到密钥,然后点击 复制

    在 Google Cloud 中,如需创建使用授权代码流程进行 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" \ --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 登录的额外范围;例如 groups,用于在使用 Okta 的组织授权服务器时从 Okta 请求群组声明。
    • ATTRIBUTE_MAPPING属性映射。以下是属性映射示例:
      google.subject=assertion.sub,
      google.groups=assertion.group1,
      attribute.costcenter=assertion.costcenter
      此示例会将 OIDC 断言中的 IdP 属性 subjectgroup1costcenter 分别映射到 google.subjectgoogle.groupsattribute.costcenter 属性。
    • ATTRIBUTE_CONDITION属性条件;例如:如果之前映射的 subject 的值包含以 @example.com 结尾的电子邮件地址,则为 assertion.subject.endsWith('@example.com')
    • JWK_JSON_PATH本地上传的 OIDC JWK 的可选路径。如果未提供此参数,Google Cloud 会改用您的 IdP 的 /.well-known/openid-configuration 路径来寻找包含公钥的 JWK。如需详细了解本地上传的 OIDC JWK,请参阅管理 OIDC JWK
    在命令响应中,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" \
        --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 登录的额外范围;例如 groups,用于在使用 Okta 的组织授权服务器时从 Okta 请求群组声明。
    • ATTRIBUTE_MAPPING属性映射。以下是属性映射示例:
      google.subject=assertion.sub,
      google.groups=assertion.group1,
      attribute.costcenter=assertion.costcenter
      此示例会将 OIDC 断言中的 IdP 属性 subjectgroup1costcenter 分别映射到 google.subjectgoogle.groupsattribute.costcenter 属性。
    • ATTRIBUTE_CONDITION属性条件;例如:如果之前映射的 subject 的值包含以 @example.com 结尾的电子邮件地址,则为 assertion.subject.endsWith('@example.com')
    • JWK_JSON_PATH本地上传的 OIDC JWK 的可选路径。如果未提供此参数,Google Cloud 会改用您的 IdP 的 /.well-known/openid-configuration 路径来寻找包含公钥的 JWK。如需详细了解本地上传的 OIDC JWK,请参阅管理 OIDC JWK
    在命令响应中,POOL_RESOURCE_NAME 是池的名称;例如 locations/global/workforcePools/enterprise-example-organization-employees

创建 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. 如果您打算设置对控制台的用户访问权限,请在 SAML IdP 中将重定向网址或断言消费者服务 (ACS) 网址字段设置为以下网址:

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

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

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

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

控制台

如需使用 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. 点击继续

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

gcloud

如需使用 SAML 协议为您的 Okta 应用集成创建员工身份池提供方,请执行以下操作:

  1. 如需保存 Okta 应用的 SAML 元数据,请执行以下操作:

    1. 转到 Okta 应用。
    2. 点击登录标签页。
    3. SAML 签名证书部分,依次点击有效证书的操作 > 查看 IdP 元数据菜单项。
    4. 在打开的新页面中,复制 XML 元数据。
    5. 将元数据保存为本地 XML 文件。
  2. 如需为您的 Okta 应用创建员工提供方,请运行以下命令:

    gcloud iam workforce-pools providers create-saml WORKFORCE_PROVIDER_ID \
        --workforce-pool="WORKFORCE_POOL_ID" \
        --attribute-mapping="ATTRIBUTE_MAPPING" \
        --attribute-condition="ATTRIBUTE_CONDITION" \
        --idp-metadata-path="XML_METADATA_PATH" \
        --location="global"
    

    请替换以下内容:

    • WORKFORCE_PROVIDER_ID:您在本指南前面部分创建的员工提供方 ID。
    • WORKFORCE_POOL_ID:您在本指南前面部分创建的员工身份池 ID。
    • 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. 开头的用户才能使用此员工提供方登录。

    • XML_METADATA_PATH:您在本指南前面部分创建的 Okta 应用的 XML 格式元数据文件的路径。

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

    可选:接受来自 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 断言

    如需将 Okta 配置为加密 SAML 断言,请执行以下操作:

    • 前往 Okta 信息中心并登录。
    • 点击应用>应用
    • 点击您的应用。
    • 常规标签页的 SAML 设置部分中,点击修改
    • 点击下一步以查看 SAML Settings
    • 点击显示高级设置
    • SAML 设置中,执行以下操作:
      • 响应(首选)或断言签名中,选择 Signed
      • 签名算法摘要算法中,选择任一选项。
      • 设置以下值:
        • Assertion Encryption:已加密。
        • 加密算法:您选择的任何算法。
        • 加密证书:上传您之前在本指南中生成的证书文件。
    • 要保存配置,请点击下一步,然后点击完成

    将 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 加密算法

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

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

管理对 Google Cloud 资源的访问权限

本部分提供的示例展示了如何管理员工身份联合用户对 Google Cloud 资源的访问权限。

在此示例中,您需要授予对示例项目的 Identity and Access Management (IAM) 角色。然后,用户可以登录并使用此项目访问 Google Cloud 产品。

您可以管理单个身份、一组身份或整个池的 IAM 角色。如需了解详情,请参阅在 IAM 政策中表示员工身份池用户

对于单个身份

如需向单个身份授予项目 TEST_PROJECT_ID 的 Storage Admin (roles/storage.admin) 角色,请运行以下命令:

gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
    --role="roles/storage.admin" \
    --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"

替换以下内容:

  • TEST_PROJECT_ID:项目的 ID
  • WORKFORCE_POOL_ID:员工身份池 ID
  • SUBJECT_VALUE:用户身份

使用映射的部门特性

如需向项目 TEST_PROJECT_ID 的特定部门中的所有身份授予 Storage Admin (roles/storage.admin) 角色,请运行以下命令:

gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
    --role="roles/storage.admin" \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.department/DEPARTMENT_VALUE"

替换以下内容:

  • TEST_PROJECT_ID:项目的 ID
  • WORKFORCE_POOL_ID:员工身份池 ID
  • DEPARTMENT_VALUE:映射的 attribute.department

使用映射群组

如需向特定群组中的所有身份授予项目 TEST_PROJECT_ID 的 Storage Admin (roles/storage.admin) 角色,请运行以下命令:

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

请替换以下内容:

  • TEST_PROJECT_ID:项目的 ID
  • WORKFORCE_POOL_ID:员工身份池 ID
  • GROUP_ID:映射的 google.groups 声明中的群组。

登录并测试访问权限

在本部分中,您将以员工身份池用户的身份登录,并测试您是否有权访问 Google Cloud 产品。

登录

本部分介绍了如何以联合用户身份登录并访问 Google Cloud 资源。

控制台(联合)登录

如需登录 Google Cloud 员工身份联合控制台(也称为控制台 [联合]),请执行以下操作:

  1. 前往控制台(联合)登录页面。

    前往控制台(联合)

  2. 输入提供方名称,格式如下:
    locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
    1. 如果出现提示,请在 Okta 应用集成中输入用户凭据。

    如果您启动 IdP 发起的登录,请在 SAML 设置中将以下网址用于嵌套的默认 RelayState 参数:https://console.cloud.google/

基于浏览器的 gcloud CLI 登录

如需使用基于浏览器的登录流程登录 gcloud CLI,请执行以下操作:

创建配置文件

如需创建登录配置文件,请运行以下命令。您可以选择使用 --activate 标志激活文件,以作为 gcloud CLI 的默认设置。

gcloud iam workforce-pools create-login-config \
    locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
    --output-file=LOGIN_CONFIG_FILE

替换以下内容:

  • WORKFORCE_POOL_ID:员工身份池 ID
  • WORKFORCE_PROVIDER_ID:员工身份池提供方 ID
  • LOGIN_CONFIG_FILE:您指定的登录配置文件的路径,例如 login.json

该文件包含 gcloud CLI 用于启用基于浏览器的身份验证流程的端点,并将受众群体设置为在员工身份池提供方中配置的 IdP。该文件不含机密信息。

输出类似于以下内容:

{
  "type": "external_account_authorized_user_login_config",
  "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
  "auth_url": "https://auth.cloud.google/authorize",
  "token_url": "https://sts.googleapis.com/v1/oauthtoken",
  "token_info_url": "https://sts.googleapis.com/v1/introspect",
}

使用基于浏览器的身份验证登录

如需使用基于浏览器的登录身份验证来验证身份,您可以使用以下方法之一:

  • 如果您在创建配置文件时使用了 --activate 标志,或者使用 gcloud config set auth/login_config_file 激活了配置文件,gcloud CLI 会自动使用配置文件:

    gcloud auth login
  • 如需通过指定配置文件的位置进行登录,请运行以下命令:

    gcloud auth login --login-config=LOGIN_CONFIG_FILE
  • 如需使用环境变量来指定配置文件的位置,请将 CLOUDSDK_AUTH_LOGIN_CONFIG_FILE 设置为配置文件的路径。

停用基于浏览器的登录

如需停止使用登录配置文件,请执行以下操作:

  • 如果您在创建配置文件时使用了 --activate 标志,或者使用 gcloud config set auth/login_config_file 激活了配置文件,则必须运行以下命令以取消设置:

    gcloud config unset auth/login_config_file
  • 清除 CLOUDSDK_AUTH_LOGIN_CONFIG_FILE 环境变量(如果已设置)。

gcloud CLI 无头登录

如需使用无头流登录 gcloud CLI,请执行以下操作:

OIDC

  1. 让用户登录您的 Okta 应用,并从 Okta 获取 OIDC 令牌

  2. 将 Okta 返回的 OIDC 令牌保存在本地机器上的安全位置。

  3. 如需生成与本步骤后面的示例类似的配置文件,请运行以下命令:

    gcloud iam workforce-pools create-cred-config \
        locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
        --subject-token-type="urn:ietf:params:oauth:token-type:id_token" \
        --credential-source-file="PATH_TO_OIDC_ID_TOKEN" \
        --workforce-pool-user-project="WORKFORCE_POOL_USER_PROJECT" \
        --output-file="config.json"
    

替换以下内容:

  • WORKFORCE_POOL_ID:员工身份池 ID
  • WORKFORCE_PROVIDER_ID:提供方 ID
  • PATH_TO_OIDC_TOKEN:OIDC IdP 凭据文件的路径
  • WORKFORCE_POOL_USER_PROJECT:与员工池用户项目关联的项目编号

主账号必须具有此项目的 serviceusage.services.use 权限。

运行该命令时,它会生成一个 OIDC IdP 配置文件,具有以下格式:

{
  "type": "external_account",
  "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
  "subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
  "token_url": "https://sts.googleapis.com/v1/token",
  "workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
  "credential_source": {
    "file": "PATH_TO_OIDC_CREDENTIALS_FILE"
  }
}

SAML

  1. 让用户登录您的 Okta 应用,并从 Okta 获取 SAML 响应

  2. 将 Okta 返回的 SAML 响应保存到本地机器上的安全位置,然后存储该路径,如下所示:

    SAML_ASSERTION_PATH=SAML_ASSERTION_PATH
    
  3. 如需生成配置文件,请运行以下命令:

    gcloud iam workforce-pools create-cred-config \
        locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
        --subject-token-type="urn:ietf:params:oauth:token-type:saml2" \
        --credential-source-file="SAML_ASSERTION_PATH"  \
        --workforce-pool-user-project="PROJECT_ID"  \
        --output-file="config.json"
    

    请替换以下内容:

    • WORKFORCE_PROVIDER_ID:您在本指南前面部分创建的员工提供方 ID。
    • WORKFORCE_POOL_ID:您在本指南前面部分创建的员工身份池 ID。
    • SAML_ASSERTION_PATH:SAML 断言文件的路径。
    • PROJECT_ID:项目 ID

    生成的配置文件类似于以下内容:

    {
      "type": "external_account",
      "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
      "subject_token_type": "urn:ietf:params:oauth:token-type:saml2",
      "token_url": "https://sts.googleapis.com/v1/token",
      "credential_source": {
        "file": "SAML_ASSERTION_PATH"
      },
      "workforce_pool_user_project": "PROJECT_ID"
    }
    

如需使用令牌交换登录 gcloud,请运行以下命令:

gcloud auth login --cred-file="config.json"

然后,gcloud 会以透明方式将您的 Okta 凭据交换为临时的 Google Cloud 访问令牌,以便您对 Google Cloud 进行其他 gcloud 调用。

您将看到类似如下所示的输出:

Authenticated with external account user credentials for:
[principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/USER_ID].

如需列出凭据账号和当前活跃的账号,请运行以下命令:

gcloud auth list

测试访问权限

您现在可以访问支持员工身份联合并且您有权访问的 Google Cloud 服务。在本指南的前面部分中,您向特定部门中的所有身份授予了项目 TEST_PROJECT_ID 的 Storage Admin (roles/storage.admin) 角色。现在,您可以通过列出 Cloud Storage 存储桶来测试您是否具有访问权限。

控制台(联合)

如需使用控制台(联合)列出 Cloud Storage 存储桶,请执行以下操作:

  • 转到 Cloud Storage 页面。
  • 验证您可以看到 TEST_PROJECT_ID 的现有存储桶列表

gcloud CLI

如需列出您有权访问的项目的 Cloud Storage 存储桶和对象,请运行以下命令:

gcloud storage ls --project="TEST_PROJECT_ID"

主账号必须具有指定项目的 serviceusage.services.use 权限。

删除用户

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

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

后续步骤