按网域限制身份

Resource Manager 提供可在组织政策中使用的网域限制条件,用以限制根据网域或组织资源共享资源。借助此限制条件,您可以限制允许在 Identity and Access Management 政策中使用的一组身份。

组织政策可以使用此限制条件将资源共享限制为属于特定组织资源的身份。或者,您也可以指定一组(一个或多个)网域,并可以按文件夹或按项目授予例外情况。如需详细了解如何添加异常,请参阅替换项目的组织政策

网域限制条件不具有追溯性。设置网域限制后,此限制将应用于在此之后对 IAM 政策所做的更改,而不会应用于在此之前所做的任何更改。 网域限制条件将应用于所有 IAM 政策更改,包括服务代理为响应其他操作而进行的更改。例如,如果您拥有用于导入 BigQuery 数据集的自动化服务,则 BigQuery 服务代理会对新创建的数据集进行 IAM 政策更改。此操作将受网域限制条件的限制并会被屏蔽。

例如,假设有 examplepetstore.com 和 altostrat.com 两个相关组织。您已向 examplepetstore.com 身份授予 altostrat.com 的某一 IAM 角色。后来,您决定按网域限制身份,并在 altostrat.com 中实施了具有网域限制条件的组织政策。在这种情况下,现有的 examplepetstore.com 身份不会失去对 altostrat.com 的访问权限。从此刻开始,您只能向 altostrat.com 网域中的身份授予 IAM 角色。

网域限制条件是以 iam.allowedPolicyMemberDomains 列表限制条件为基础。

对 Google Cloud 组织资源设置此限制条件时,它会影响以该组织资源作为父级的所有身份。在 Google Workspace 网域上设置此限制条件时,将影响该网域下的所有身份。这包括在 Google Workspace 控制台中管理的用户帐号,而不是在 Google Cloud 控制台中管理的用户帐号。

设置组织政策

网域限制条件是一种列表限制条件。 您可以在网域限制条件的 allowed_values 列表中添加和移除 Google Workspace 客户 ID 和 Google Cloud 组织资源 ID。网域限制条件不支持拒绝值,并且组织政策不能与 denied_values 列表中的 ID 一起保存。

组织政策将允许与 allowed_values 中列出的 Google Workspace 帐号或组织资源关联的所有网域。所有其他网域都将被组织政策拒绝。

您可以对受支持资源列表中包含的任何资源设置有条件地强制执行网域限制条件的组织政策。例如,Cloud Storage 存储分区、BigQuery 数据集或 Compute Engine 虚拟机。

您必须拥有修改组织政策的权限才能设置该限制条件。例如,orgpolicy.policyAdmin 角色具有设置组织政策限制条件的权限。resourcemanager.organizationAdmin 角色具有将用户添加为 Organization Policy Administrator 的权限。 如需详细了解如何在组织级层管理政策,请参阅使用限制条件页面。

控制台

如需设置包含网域限制条件的组织政策,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到组织政策页面。

    转到“组织政策”

  2. 从项目选择器中,选择您要设置组织政策的组织资源。

  3. 组织政策页面上,从限制条件列表中选择网域限定共享

  4. 政策详情页面上,点击管理政策

  5. 应用对象下方,选择覆盖父级政策

  6. 点击添加规则

  7. 政策值下,选择“自定义”。注意:网域限制条件不支持全部拒绝

  8. 政策类型下,选择允许。注意:网域限制条件不支持 Deny 值。

  9. 自定义值下的字段中输入组织资源 IDGoogle Workspace 客户 ID

  10. 如果您要添加多个 ID,请点击新建政策值以创建额外的字段。

  11. 点击完成

  12. (可选)如需对标记设置有条件的网域限制条件,请点击添加条件

    1. 名称字段中,输入条件的名称。

    2. 说明字段中,输入条件的说明。该说明介绍了所需标记的背景信息以及它们如何影响资源。

    3. 您可以使用条件构建器创建条件,要求具有特定标记限制条件才会生效。

      1. 条件构建器标签页的条件类型下拉菜单中,选择标记

      2. 为条件选择运算符。要匹配整个标记,请使用匹配运算符。要匹配标记键和标记值,请使用匹配 ID 运算符。

      3. 如果您选择了匹配运算符,请输入标记的值命名空间名称。如果您选择了匹配 ID 运算符,请输入键和值 ID。

      4. 您可以通过点击添加创建多个条件。如果添加了其他条件,则可以通过切换将条件逻辑设置为要求满足所有条件。您可以通过切换将条件逻辑设置为仅要求其中一个条件为真。

      5. 您可以通过点击条件字段右侧的 X 来删除表达式。

      6. 完成条件修改后,点击保存

  13. 如需强制执行政策,请点击设置政策

gcloud

您可以通过 Google Cloud CLI 设置政策。如需创建包含网域限制条件的政策,请运行以下命令:

如需设置包含网域限制条件的组织政策,请运行以下命令:

gcloud org-policies set-policy POLICY_PATH

其中,POLICY_PATH 是组织政策 YAML 文件的完整路径,应如下所示:

name: organizations/ORGANIZATION_ID/policies/iam.allowedPolicyMemberDomains
    spec:
      rules:
      - condition: // This condition applies to the values block.
          expression: "resource.matchTag('ORGANIZATION_ID/environment', 'dev')"
        values:
          allowedValues:
          - PRINCIPAL_SET
      - values:
          allowedValues:
          - PRINCIPAL_SET

替换以下内容:

  • ORGANIZATION_ID 替换为要为其设置此政策的组织资源的 ID。
  • PRINCIPAL_SET:表示您想允许的 Cloud Identity 主帐号标识符,包括组织资源 ID。例如 is:principalSet://iam.googleapis.com/organizations/01234567890123

    对于您希望允许的所有其他身份,必须使用 Google Workspace 客户 ID。例如 is:C03g5e3bc

应用此组织政策后,IAM 政策将只允许属于 allowed_values 列表中的组织资源 ID 或 Google Workspace 网域的身份。Google Workspace 真人用户和群组必须是该组织资源的子级或 Google Workspace 网域的一部分,并且 IAM 服务帐号必须是与给定 Google Workspace 网域关联的组织资源的子级。

例如,如果您创建的组织政策只包含您公司 Google Workspace 的客户 ID,则从那一刻起,只能将来自该网域的主账号添加到 IAM 政策。

如需详细了解如何在组织政策中使用限制条件,请参阅 [使用 Constraints/resource-manager/docs/organization-policy/using-constraints#list-constraint)。

错误消息示例

如果因尝试添加 allowed_values 列表中未包含的主账号而违反了组织的网域限制条件,则操作将失败并显示错误消息。

控制台

控制台屏幕截图

gcloud

ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION:
One or more users named in the policy do not belong to a permitted customer.

检索组织资源 ID

您可以使用 Google Cloud 控制台、gcloud CLI 或 Cloud Resource Manager API 获取组织资源 ID。

控制台

如需使用 Google Cloud 控制台获取组织资源 ID,请执行以下操作:

  1. 前往 Google Cloud 控制台:

    转到 Google Cloud 控制台

  2. 从页面顶部的项目选择器中选择您的组织资源。
  3. 在右侧,点击更多,然后点击设置

设置页面会显示您的组织资源 ID。

gcloud

如需查找您的组织资源 ID,请运行以下命令:

gcloud organizations list

此命令会列出您所属的所有组织资源及其对应的组织资源 ID。

API

如需使用 Cloud Resource Manager API 查找您的组织资源 ID,请使用 organizations.search() 方法(包括查询您的网域)。例如:

GET https://cloudresourcemanager.googleapis.com/v3/organizations:search{query=domain:altostrat.com}

响应包含属于 altostrat.com 的组织资源的元数据,其中包括组织资源 ID。

获得组织资源 ID 后,您需要为属于它的一组主账号使用正确的标识符。例如:

principalSet://iam.googleapis.com/organizations/01234567890123

如需详细了解 IAM 主账号标识符,请参阅主账号标识符

检索 Google Workspace 客户 ID

网域限制条件使用的 Google Workspace 客户 ID 可通过两种方式获得:

gcloud

您可以使用 gcloud organizations list 命令查看自己拥有 resourcemanager.organizations.get 权限的所有组织:

gcloud organizations list

此命令将返回 DISPLAY_NAMEID(组织 ID)和 DIRECTORY_CUSTOMER_IDDIRECTORY_CUSTOMER_ID 为 Google Workspace 客户 ID。

API

您可以使用 Google Workspace Directory API 检索 Google Workspace 客户 ID。

以 Google Workspace 管理员的身份登录后,您可以查看 Customers: get API 方法文档,然后点击执行。授权后,响应会显示您的客户 ID。

或者,您也可以使用 API 客户端:

  1. 获取 https://www.googleapis.com/auth/admin.directory.customer.readonly 范围的 OAuth 访问令牌。
  2. 运行以下命令以查询 Google Workspace 目录 API:

    curl -# -X GET "https://www.googleapis.com/admin/directory/v1/customers/customerKey" \
    -H "Authorization: Bearer $access_token" -H "Content-Type: application/json"
    

该命令将返回包含客户信息的 JSON 响应。id 为 Google Workspace 客户 ID。

限制子网域

如果您在网域限制条件中允许 Google Cloud 组织资源,则它将允许访问与该组织资源相关联的所有资源,但禁止访问其他所有资源。

如果您在网域限制条件中允许某个 Google Workspace 客户 ID,则会限制对与该 Google Workspace 客户 ID 关联的所有网域的访问权限,并阻止对所有其他网域的访问。每个 Google Workspace 帐号只有一个主域名,以及零个或多个辅助网域。与 Google Workspace 客户 ID 关联的所有网域都将受到此限制条件的约束。

对资源强制执行网域限制条件可控制可以访问该资源及其在资源层次结构中的后代的主网域和所有辅助网域。

如需查看常见 Google Workspace 网域和子网域组合的示例,请参阅下表:

主网域 子网域 网域限制条件 是否允许 user@sub.altostrat.com
altostrat.com 允许:altostrat.com
altostrat.com sub.altostrat.com 允许:altostrat.com
altostrat.com sub.altostrat.com 允许:sub.altostrat.com
sub.altostrat.com altostrat.com 允许:sub.altostrat.com
sub.altostrat.com 允许:sub.altostrat.com

如需区分两个网域之间的网域限制条件访问权限,每个网域都必须与不同的 Google Workspace 账号关联。每个 Google Workspace 账号都与一个组织节点相关联,并且可应用各自的组织政策。如此,您便能将 altostrat.com 与一个 Google Workspace 账号关联,并将 sub.altostrat.com 与另一个 Google Workspace 账号关联,从而实现更精细的访问权限控制。如需了解详情,请参阅管理多个组织

排查已知问题

组织政策不具有追溯性。如果您需要强制执行的资源层次结构更改违反了实施的限制条件,您可以停用组织政策、进行更改,然后再重新启用组织策略。

以下部分介绍了在实施此限制条件时服务可能发生的已知问题。

将 Google Analytics 360 与 BigQuery 相关联

如果您尝试将 Google Analytics 360 与已实施网域限制条件的 BigQuery 相关联,操作将失败并显示 One or more users named in the policy do not belong to a permitted customer 错误消息,即使 analytics-processing-dev@system.gserviceaccount.com 服务帐号已在项目级直接添加为 Editor 也是如此(无论是直接还是使用 Google 群组)。

若要将 Google Analytics 360 与 BigQuery 相关联,请执行以下操作:

  1. 停用包含网域限制条件的组织政策。

  2. 执行 Google Analytics 360 中的关联流程

  3. 再次强制执行网域限制条件。

公开共享数据

某些 Google Cloud 产品(例如 BigQuery、Cloud Functions、Cloud Run、Cloud Storage 和 Pub/Sub)支持公开共享数据。在组织政策中实施网域限定共享限制条件将会阻止公开共享数据。

如需公开共享数据,请对您要共享的数据所在的项目资源暂时停用网域限定共享限制条件。公开共享资源后,您可以重新启用网域限定共享限制条件。

结算账号的 BigQuery 日志接收器

BigQuery 日志接收器用于结算账号的服务账号(格式:b*@*.iam.gserviceaccount.com)被视为外部服务账号,并被组织政策中的网域限定共享限制条件阻止。如需向此服务账号授予已实施网域限制条件的项目中的 BigQuery 数据集上的角色,请执行以下操作:

  1. 停用包含网域限制条件的组织政策。

  2. 向相应的服务账号(格式:b*@*.iam.gserviceaccount.com)授予在接收器创建过程中指定的 BigQuery 角色。

  3. 再次强制执行网域限制条件。

Cloud Billing 导出服务账号

在启用该限制条件的情况下启用结算导出至存储桶可能会失败。请勿在用于导出结算数据的存储分区上使用该限制条件。

Cloud Billing 导出服务账号电子邮件地址如下:509219875288-kscf0cheafmf4f6tp1auij5me8qakbin@developer.gserviceaccount.com

启用存储空间访问日志记录

启用后,网域限制条件将屏蔽组织政策中未明确允许的任何网域,同时还会阻止向 Google 服务账号授予访问权限。如需对已实施网域限制条件的 Cloud Storage 存储桶设置存储空间访问日志记录,请执行以下操作:

  1. 停用包含网域限制条件的组织政策。

  2. cloud-storage-analytics@google.com 授予该存储桶的 WRITE 访问权限。

  3. 再次强制执行网域限制条件。

启用 Firebase API

启用后,网域限制条件将屏蔽组织政策中不允许的服务账号。这就导致不能启用 Firebase API,在启用该 API 的过程中需要外部服务账号。启用 API 后,您可以安全地强制执行网域限制条件,而不会影响 Firebase API 的功能。如需启用 Firebase API,请执行以下操作:

  1. 停用包含网域限制条件的组织政策。

  2. 启用 Firebase Management API。

  3. 再次强制执行网域限制条件。

Google 群组

在实施网域限制条件后,在允许的网域中创建的 Google 群组始终可以在 IAM 政策中授予角色,即使该群组包含来自该网域以外的成员也是如此。

为确保项目管理员无法绕过网域限制条件,Google Workspace 管理员在 Google Workspace 管理员面板中应确保该群组所有者不能允许网域以外的成员

强制账号访问

对于违反网域限制的项目,如果您需要强制账号访问:

  1. 移除包含网域限制条件的组织政策。

  2. 授予对项目的账号访问权限。

  3. 再次实施含有网域限制条件的组织政策。

或者,您也可以向包含相关服务账号的 Google 群组授予访问权限:

  1. 在允许的网域中创建 Google 群组。

  2. 使用 Google Workspace 管理员面板关闭该群组的网域限制

  3. 将服务账号添加到群组。

  4. 在 IAM 政策中向 Google 群组授予访问权限。

使用 Pub/Sub 作为 Google Chat 应用的端点。

当您尝试将主题的发布权限授予 Google Chat API 服务帐号时,如果启用了“受限网域共享”限制条件,您可能会被屏蔽。按照流程强制授予帐号访问权限