使用 PingOne AIC 配置员工身份联合

本文档介绍了如何使用 PingOne Advanced Identity Cloud (AIC) 作为身份提供方 (IdP) 来配置员工身份联合,以及如何管理对Google Cloud的访问权限。配置 PingOne AIC IdP 后,联合用户可以使用 SAML 2.0 协议访问支持员工身份联合的 Google Cloud 服务。

准备工作

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

    gcloud init

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

  3. 创建托管的 IdP

    1. Native Consoles > Access Management 中,依次前往 Realms > REALM_NAME > Dashboard,然后点击 SAML Applications
    2. 依次点击添加实体提供方> 托管
    3. 输入实体 ID。记录此值以备后用。

      1. 验证实体提供方基本网址值是否正确。Advanced Identity Cloud 会将此值用于所有与 SAML 2.0 相关的端点。
      2. Meta Aliases(元别名)部分,在 Identity Provider Meta Alias(身份提供方元别名)属性中提供一个适合用作网址的值。此别名在信任圈中必须是唯一的。
      3. 点击创建
      4. Assertion Processing(断言处理)标签页的 Attribute Mapper(属性映射器)部分,将 SAML 属性名称映射到本地属性名称。SAML 属性名称是指在断言中使用的名称。
      5. 点击每个映射的添加更新
      6. 点击保存更改

    使用属性

    本部分介绍了如何使用 SAML 断言中的属性。

    在以下示例中,SAML 断言中的属性会映射到本地属性:

    SAML 属性 本地属性
    IDPEmail mail
    FirstName givenName
    groups groups

    在属性映射部分中设置必需的属性。在本指南的后面部分,您将在创建员工身份池提供方时映射这些属性。

    导出提供方元数据

    您可以通过以下任一方式访问托管提供商的 SAML 2.0 元数据:

    • 通过 REST

      运行以下命令:

      curl --output METADATA_XML \
          "https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM"
      
    • 在浏览器中

      在浏览器中打开租户环境的元数据网址,下载 XML 文件: https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM

    1. 将 XML 文件保存到本地机器。

    将 Google 作为远程 SP 导入

    1. 准备 Google Cloud SP 元数据 XML。使用以下模板,替换占位值:

      <?xml version="1.0" encoding="UTF-8"?>
      <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID">
         <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
            <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
            <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
            <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID" index="0" isDefault="true"/>
         </md:SPSSODescriptor>
      </md:EntityDescriptor>
      
    2. 您可以通过以下任一方式导入元数据:

      • 在控制台中

        1. 在 PingOne AIC 管理控制台中,前往 SAML Applications
        2. 依次点击添加实体提供程序 > 远程
        3. 上传您刚刚创建的 Google Cloud SP 元数据 XML 文件。
        4. 点击创建
      • 通过 REST

        1. 将 XML 元数据转换为 base64url 编码的字符串。
        2. 获取访问令牌
        3. 运行以下命令:

          curl --request POST \
              --header 'authorization: Bearer ACCESS_TOKEN' \
              --header 'Content-Type: application/json' \
              --header 'Accept-API-Version: resource=1.0' \
              --data-raw '{"standardMetadata": "BASE64URL_ENCODED_METADATA"}' \
              'https://TENANT_ENV_FQDN/am/json/realms/root/realms/alpha/realm-config/saml2/remote?_action=importEntity'
          

    创建信任圈 (CoT)

    1. 依次前往大区 > REALM_NAME > 应用 > 联盟 > 信任圈
    2. 点击添加信任圈
    3. 输入名称,然后点击创建
    4. 信任圈页面上,在实体提供方属性中,选择您的托管 IdP 和 Google Cloud 远程 SP。
    5. 点击保存更改

    创建 PingOne AIC 员工身份池提供方

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

    创建 SAML 员工身份池提供方

    1. 如需创建 SAML 员工身份池提供方,您需要确保身份提供方元数据至少包含 SAML 实体 ID、单点登录网址和一个签名公钥。请按以下步骤进行此操作:

      gcloud

      1. 保存 PingOne AIC 应用中的 SAML 元数据。

      2. 如需创建 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="XML_METADATA_PATH" \
            --attribute-mapping="ATTRIBUTE_MAPPING" \
            --attribute-condition="ATTRIBUTE_CONDITION" \
            --location=global
        

        替换以下内容:

        • WORKFORCE_PROVIDER_ID:提供方 ID。
        • WORKFORCE_POOL_ID:员工身份池 ID。
        • DISPLAY_NAME:显示名称。
        • DESCRIPTION:说明。
        • XML_METADATA_PATH:您从 PingOne AIC 导出的 XML 格式元数据文件的路径。
        • ATTRIBUTE_MAPPING属性映射;例如,google.subject=assertion.subject,google.groups=assertion.attributes.groups,attribute.department=assertion.attributes.department[0]
        • ATTRIBUTE_CONDITION:可选属性条件;例如,如需将 ipaddr 属性限制为特定 IP 范围,您可以设置条件 assertion.ipaddr.startsWith('98.11.12.')

        如需了解详情,请参阅属性映射

        此命令会将 SAML 断言中的 subjectgroupsdepartment 分别分配给 google.subjectgoogle.groupsattribute.department 属性。该属性条件还可确保只有特定 IP 范围内的用户才能使用此员工提供方登录。

      控制台

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

      1. 在 Google Cloud 控制台中,前往员工身份池页面: 前往“员工身份池”
      2. 员工身份池表中,选择要为其创建提供方的池。
      3. 提供方部分中,点击 添加提供方
      4. 选择提供方供应商列表中,选择通用身份提供方
      5. 选择身份验证协议中,选择 SAML
      6. 创建提供方部分中,执行以下操作:
        1. 名称中,输入提供方的名称。
        2. 可选:在说明中,输入提供方的说明。
        3. IDP 元数据文件 (XML) 中,选择您从 PingOne AIC 导出的元数据 XML 文件。
        4. 确保已启用提供方处于启用状态。
        5. 点击继续
      7. 分享提供方信息部分中,点击继续
      8. 配置提供方部分中,执行以下操作:

        1. 属性映射中,输入 google.subject 的 CEL 表达式(例如 assertion.subject)。
        2. 可选:如需输入其他映射,请点击添加映射,然后输入其他映射,例如:

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

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

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

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

    本部分介绍了如何管理 PingOne AIC 用户对 Google Cloud 资源的访问权限。

    本指南中使用的示例项目可能与您设置员工身份联合时使用的项目不同。

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

    使用映射的部门属性

    如需向 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 项目的 GROUP_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 员工身份联合控制台(也称为控制台 [联合]),请执行以下操作:

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

      前往控制台(联合)

    2. 输入提供方名称,格式如下:
      locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
    3. 出现提示时,输入您的 PingOne AIC 凭据。

    基于浏览器的 Google Cloud CLI 登录

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

    如需创建登录配置文件,请运行以下命令。您可以选择添加 --activate 标志来激活文件,将其作为 gcloud CLI 的默认设置。然后,您就可以运行 gcloud auth login,而无需每次都指定配置文件路径。

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

    替换以下内容:

    • WORKFORCE_POOL_ID:员工池 ID
    • PROVIDER_ID:提供方 ID
    • LOGIN_CONFIG_FILE_PATH:您指定的配置文件的路径,例如 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"
    }

    如需阻止 gcloud auth login 自动使用此配置文件,您可以运行 gcloud config unset auth/login_config_file 来取消设置。

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

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

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

      gcloud auth login --login-config=LOGIN_CONFIG_FILE_PATH
    • 如需使用环境变量来指定配置文件的位置,请将 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 无头登录

    如需使用 SAML 协议通过 gcloud CLI 登录 PingOne AIC,请执行以下操作:

    1. 让用户登录您的 PingOne AIC 应用并获取 SAML 响应。
    2. 将 PingOne AIC 返回的 SAML 响应保存到本地机器上的安全位置。将该路径存储在环境变量中,例如:SAML_ASSERTION_PATH=/tmp/saml_assertion.xml
    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
      

      替换以下内容:

      • SAML_ASSERTION_PATH:SAML 断言文件的路径。
      • PROJECT_ID:项目 ID。
    4. 生成的配置文件类似于以下内容:

      {
        "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"
      }
      
    5. 如需使用令牌交换登录 gcloud CLI,请运行以下命令:

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

      然后,gcloud 会以透明方式将您的 PingOne AIC 凭据交换为临时的 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].

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

      gcloud auth list
      

    测试访问权限

    您可以访问您有权访问的 Google Cloud 支持员工身份联合的服务。在本指南的前面部分中,您向特定部门或群组中的所有身份授予了项目 TEST_PROJECT_ID 的 Storage Admin 角色。您可以通过列出 Cloud Storage 存储分区来测试您是否具有访问权限。

    控制台(联合)登录

    如需在控制台(联合)中验证您的访问权限,请执行以下操作:

    1. 转到 Cloud Storage 页面。
    2. 验证您是否可以看到项目 TEST_PROJECT_ID 的现有存储分区列表。

    gcloud CLI

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

    gcloud alpha storage ls --project="TEST_PROJECT_ID"
    

    主账号必须具有 gcloud CLI 会话中设置的项目的 serviceusage.services.use 权限:PROJECT_ID

    后续步骤