员工身份联合

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本文档介绍了员工身份联合的关键概念。

什么是员工身份联合?

通过员工身份联合,您可以使用外部身份提供方 (IdP) 对员工(用户群组,例如员工、合作伙伴和承包商)通过 IAM 进行身份验证和授权,以便用户能够访问 Google Cloud 服务。借助员工身份联合,您无需像使用 Cloud Identity 的 Google Cloud Directory Sync (GCDS) 一样将用户身份从现有 IdP 同步到 Google Cloud 身份。员工身份联合扩展了 Google Cloud 的身份功能,可支持基于属性的非同步单点登录。

用户进行身份验证后,系统会使用从 IdP 收到的信息确定对 Google Cloud 资源的访问权限范围。

您可以将员工身份联合与支持 OpenID Connect (OIDC)SAML 2.0 的任何 IdP(如 Azure Active Directory (Azure AD)、Active Directory Federation Services (AD FS)、Okta 等)搭配使用。

员工身份联合池

借助员工身份联合池,您可以管理员工身份群组及其对 Google Cloud 资源的访问权限。

通过池,您可以执行以下操作:

  • 对用户身份进行分组;例如 employeespartners
  • 授予对整个池或部分池的 IAM 访问权限。
  • 从一个或多个 IdP 联合身份。
  • 为需要类似访问权限的用户群组定义政策。
  • 指定特定于 IdP 的配置信息,包括属性映射属性条件
  • 为第三方身份启用 Google Cloud CLI 和 API 访问权限。
  • 记录池中的用户对 Cloud Audit Logs 的访问以及池 ID。

您可以创建多个池。如需查看描述此类方法的示例,请参阅示例:多个员工身份池

池是在 Google Cloud 组织级层配置的。因此,只要您拥有查看池的相应 IAM 权限,就可将池用于组织中的所有项目和文件夹。首次为组织设置员工身份联合时,需要指定池名称。在 IAM 允许政策中,您可以通过名称来引用池。因此,我们建议您在为池命名时,使其能够清楚地描述其所包含的身份。

员工身份池提供方

员工身份池提供方是描述 Google Cloud 组织和 IdP 之间关系的实体。

员工身份联合遵循 OAuth 2.0 令牌交换规范 (RFC 8693)。您可以将外部身份提供方的凭据提供给 Security Token Service,该服务会验证凭据中的身份,然后通过交换返回短期 Google Cloud 访问令牌。

Google Cloud 员工身份联合控制台

员工身份池中的用户可以访问 Google Cloud 员工身份联合控制台,也称为控制台(联合)。这些用户可以通过该控制台对支持员工身份联合的 Google Cloud 产品的界面进行访问。

特性映射

您的 IdP 会提供一些属性(某些 IdP 将其称为声明)。属性包含有关用户的信息。您可以使用通用表达式语言 (CEL) 映射这些属性以供 Google Cloud 使用。

本部分介绍 Google Cloud 提供的一组必需属性和可选属性。

您还可以在 IdP 中定义自定义属性,以供特定 Google Cloud 产品使用;例如在 IAM 允许政策中使用。

属性映射的大小上限为 4 KB。

属性如下所示:

  • google.subject(必需):用来对用户进行身份验证的唯一标识符。通常是 JWT 的主题断言,因为 Cloud Audit Logs 日志将此字段的内容记录为主帐号。您可以使用此字段配置 IAM 以进行授权决策。我们建议您不要使用可变值,因为如果您更改了 IdP 用户目录中的值,则用户会失去访问权限。

    长度上限为 127 个字节。

  • google.groups(可选):进行身份验证的用户所属的群组集合。您可以使用生成字符串数组的 CEL 子集来配置逻辑表达式。您还可以使用此字段配置 IAM 以进行授权决策。google.groups 的限制如下:

    • 我们建议您将群组名称长度限制在 100 个字符以内。

    • 如果一个用户与超过 100 个群组相关联,请定义一组较小的群组,并且仅在用于将用户联合到 Google Cloud 的断言中包含这些群组。

    • 如果您使用此属性在 IAM 中授予访问权限,则所映射群组中的每个成员都将获得访问权限。因此,我们建议您确保只有组织中的授权用户才能修改所映射群组的成员资格。

  • google.display_name(可选):用于在 Google Cloud 控制台中设置已登录用户的名称的特性。此特性不能用于 IAM 允许政策和特性条件。

    长度上限为 100 个字节。

  • google.profile_photo(可选):用户的照片缩略图的网址。我们建议照片尺寸为 400x400 像素。设置此属性后,图片会在 Google Cloud 控制台中显示为用户的个人资料照片。如果未设置该值或无法获取该值,系统会显示一个通用用户图标。此特性不能用于 IAM 允许政策或特性条件。

  • attribute.KEY(可选):用户 IdP 令牌中存在的客户定义属性。您可以使用这些自定义属性在 IAM 允许政策中定义自己的授权策略。例如,您可以选择定义用户成本中心 attribute.costcenter = "1234" 之类的特性。然后,您可以在 IAM 条件中使用此属性,以便仅向该成本中心的用户授予访问权限。

    您最多可以配置 50 个自定义属性映射规则。每个此类规则的大小上限为 2048 个字符。

    虽然我们对您可以映射的属性没有限制,但我们强烈建议您选择值稳定的属性。例如,attribute.job_description 等属性可能会因各种原因而发生变化(例如为了提高其可读性)。作为替代方案,请考虑使用 attribute.role。后者的变化表明分配责任的改变,并会反映在对用户授予的访问权限上。

特性条件

属性条件是可选的 CEL 表达式,您可以通过这些表达式对 Google Cloud 接受的身份属性设置限制条件。

使用属性条件的好处包括:

  • 您可以使用属性条件仅允许一部分外部身份向您的 Google Cloud 项目进行身份验证。例如,您可能只想允许特定团队中的身份登录,尤其是在使用公共 IdP 时。另一个例子是,您可能希望允许会计团队登录,但不允许工程团队登录。
  • 借助属性条件,您可以防止用于其他平台的凭据被用在 Google Cloud,反之亦然。这有助于避免混淆代理问题

在 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/*

限制跨组织访问

员工身份联合池主帐号无法直接访问他们所属组织之外的资源。但是,如果主帐号被授予在组织内模拟服务帐号的权限,则可以绕过此限制条件,因为服务帐号没有同等限制。

若要限制服务帐号访问其他组织中的资源,管理员可以配置 VPC Service Controls。在 VPC Service Controls 边界内的项目中创建的服务帐号无法访问该边界外的项目中的资源。

员工池用户项目

Google Cloud 服务通常会对包含资源的项目(资源项目)收取结算费用并计算配额用量,而有些 Google Cloud API 则会对 API 调用中指定的项目收费。在这些情况下,员工身份联合池用户项目将用于结算和配额限制用途。主帐号需要拥有此项目的 serviceusage.services.use 权限。如果您已在使用 Google Cloud 服务,则可以使用现有项目进行结算和配额限制。如果您还没有项目,则可以创建一个新项目。您可以使用新项目来代替资源项目。

示例:多个员工身份联合池

本部分包含一个示例,说明了多个池的典型用法。

您可以为员工创建一个池,为合作伙伴创建另一个池。跨国组织可能会为其组织中的不同部门创建单独的池。您可以通过池进行分布式管理,其中不同的群组可以独立管理其特定池,而角色也只会授予给该池中的身份。

例如,假设一家名为 Enterprise Example Organization 的公司与另一家名为 Partner Example Organization Inc 的公司合作,提供 Google Kubernetes Engine (GKE) DevOps 服务。为了使 Partner Example Organization 的员工能够提供服务,他们必须有权访问 Google Kubernetes Engine (GKE) 和 Enterprise Example Organization 组织中的其他 Google Cloud 资源。Enterprise Example 组织已经拥有一个名为 enterprise-example-organization-employees 的员工身份联合池。

为了让 Partner Example Organization 能够管理对 Enterprise Example Organization 资源的访问权限,Enterprise Example Organization 会为 Partner Example Organization 的员工用户创建一个单独的员工池,以便 Partner Example Organization 可以管理访问权限。Enterprise Example Organization 会将该员工池提供给 Partner Example Organization 的管理员。Partner Example Organization 的管理员会使用自己的 IdP 向其员工授予访问权限。

为此,Enterprise Example Organization 的管理员会执行以下任务:

  1. 在 Enterprise Example Organization 的 IdP 中为 Partner Example Organization 的管理员创建一个身份(例如 partner-organization-admin@example.com),该身份已经在名为 enterprise-example-organization-employees 的池中配置。

  2. 创建一个名为 example-organization-partner 的新员工池。

  3. example-organization-partner 池创建以下 IAM 政策:

    {
      "bindings": [
        {
          "role": "roles/iam.workforcePoolEditor",
          "members": [
            "principalSet://iam.googleapis.com/locations/global/workforcePools/enterprise-example-organization-employees/subject/partner-organization-admin@example.com",
          ]
        }
      ]
    }
    
  4. example-organization-partner 池授予他们需要在 Enterprise Example Organization 组织中访问的资源的相应角色。

Partner Example Organization 的管理员现在可以配置 example-organization-partner 池以与其 IdP 相关联。然后,他们可以允许 Partner Example Organization 的员工使用自己组织的 IdP 凭据登录。登录后,Partner Example Organization 的员工用户便可以访问相应的 Google Cloud 资源,但会受 Enterprise Example Organization 定义的政策所约束。

简化访问权限管理

在大型企业中,IT 管理员通常会在访问权限控制模型中创建安全群组。安全群组控制对内部资源的访问权限。此外,公司通常会为员工和合作伙伴分别创建额外的群组,以将这种访问权限控制模型扩展到云资源。这可能导致深度嵌套群组数量激增,而这又会增加管理难度。

您的组织可能还提供政策来限制您可以创建的群组数量,以使用户目录层次结构保有一定的平面度。为了防止 IAM 政策配置错误并限制群组增长,一种更好的解决方案是使用多个池,以根据不同的组织单元、业务部门和合作伙伴组织对用户进行更好的分隔。然后,您可以引用这些池及其包含的群组来定义 IAM 政策(请参阅“配置 IAM”步骤中的示例)。

VPC Service Controls 限制

员工身份联合、员工池配置 API 和 Security Token Service API 均不支持 VPC Service Controls。但是,员工池用户可以访问的 Google Cloud 产品支持 VPC Service Controls。如需了解详情,请参阅 VPC Service Controls 的支持的产品和限制页面。

后续步骤