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 的权限。
如需详细了解如何在组织级层管理政策,请参阅使用限制条件页面。
控制台
如需设置包含网域限制条件的组织政策,请执行以下操作:
在 Google Cloud 控制台中,转到组织政策页面。
在项目选择器中,选择要为其设置组织政策的组织资源。
在组织政策页面上,从限制条件列表中选择网域限制共享。
在政策详情页面上,点击管理政策。
在应用对象下,选择覆盖父资源的政策。
点击添加规则。
在政策值下,选择“自定义”。注意:域名限制限制条件不支持全部拒绝。
在政策类型下,选择允许。注意:网域限制约束条件不支持 Deny 值。
在自定义值下,在相应字段中输入组织资源 ID 或 Google Workspace 客户 ID。
如果您想添加多个 ID,请点击新政策值以创建其他字段。
点击完成。
(可选)如需使网域限制约束条件基于某个标记,请点击添加条件。
在名称字段中,输入条件的名称。
在说明字段中,输入条件的说明。该说明介绍了所需标记的背景信息以及它们如何影响资源。
您可以使用条件构建器创建条件,要求具有特定标记限制条件才会生效。
在条件构建器标签页的条件类型下拉菜单中,选择标记。
为条件选择运算符。要匹配整个标记,请使用匹配运算符。要匹配标记键和标记值,请使用匹配 ID 运算符。
如果您选择了匹配运算符,请输入标记的值命名空间名称。如果您选择了匹配 ID 运算符,请输入键和值 ID。
您可以通过点击添加创建多个条件。如果添加了其他条件,则可以通过切换和将条件逻辑设置为要求满足所有条件。您可以通过切换或将条件逻辑设置为仅要求其中一个条件为真。
您可以通过点击条件字段右侧的 X 来删除表达式。
完成条件修改后,点击保存。
如需强制执行政策,请点击设置政策。
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 政策。
如需详细了解如何在组织政策中使用限制条件,请参阅使用限制条件。
错误消息示例
如果因尝试添加 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,请执行以下操作:
- 前往 Google Cloud 控制台:
- 从页面顶部的项目选择器中,选择您的组织资源。
- 在右侧,点击更多,然后点击设置。
设置页面会显示您的组织资源 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_NAME
、ID
(组织 ID)和 DIRECTORY_CUSTOMER_ID
。DIRECTORY_CUSTOMER_ID
为 Google Workspace 客户 ID。
API
您可以使用 Google Workspace Directory API 检索 Google Workspace 客户 ID。
以 Google Workspace 管理员的身份登录后,您可以查看 Customers: get API 方法文档,然后点击执行。授权后,响应会显示您的客户 ID。
或者,您也可以使用 API 客户端:
- 获取
https://www.googleapis.com/auth/admin.directory.customer.readonly
范围的 OAuth 访问令牌。 运行以下命令以查询 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
服务账号已直接或使用 Google 群组在项目级别添加为 Editor
也是如此。
如需将 Google Analytics 360 与 BigQuery 相关联,请执行以下操作:
公开共享数据
某些 Google Cloud 产品(例如 BigQuery、Cloud Run 函数、Cloud Run、Cloud Storage 和 Pub/Sub)支持公开共享数据。在组织政策中实施网域限定共享限制条件将会阻止公开共享数据。
如需公开共享数据,请对您要共享的数据所在的项目资源暂时停用网域限定共享限制条件。公开共享资源后,您可以重新启用网域限定共享限制条件。
结算账号的 BigQuery 日志接收器
BigQuery 日志接收器用于结算账号的服务账号(格式:b*@*.iam.gserviceaccount.com
)被视为外部服务账号,并被组织政策中的网域限定共享限制条件阻止。如需向此服务账号授予已实施网域限制条件的项目中的 BigQuery 数据集上的角色,请执行以下操作:
Cloud Billing 导出服务账号
在启用该限制条件的情况下启用结算导出至存储分区可能会失败。请勿在用于导出结算数据的存储分区上使用该限制条件。
Cloud Billing 导出服务账号电子邮件地址如下:509219875288-kscf0cheafmf4f6tp1auij5me8qakbin@developer.gserviceaccount.com
启用存储空间访问日志记录
启用后,网域限制条件将屏蔽组织政策中未明确允许的任何网域,同时还会阻止向 Google 服务账号授予访问权限。如需对已实施网域限制条件的 Cloud Storage 存储桶设置存储空间访问日志记录,请执行以下操作:
授予服务代理角色
服务代理角色仅授予服务账号。如果您需要授予此类角色,请执行以下操作:
启用 Firebase API
启用后,网域限制条件将屏蔽组织政策中不允许的服务账号。这就导致不能启用 Firebase API,在启用该 API 的过程中需要外部服务账号。启用 API 后,您可以安全地强制执行网域限制条件,而不会影响 Firebase API 的功能。如需启用 Firebase API,请执行以下操作:
Google 群组
如果系统在您的组织中强制执行了网域限制条件,则您可能无法向新创建的 Google 群组授予角色,即使这些群组属于允许的网域也是如此。这是因为,一个组最长可能需要 24 小时才能在 Google Cloud 中完全传播。如果您无法向新创建的 Google 群组授予角色,请等待 24 小时,然后重试。
此外,在评估群组是否属于允许的网域时,IAM 仅会评估群组的网域。它不会评估群组成员的任何网域。因此,项目管理员可以通过向 Google 群组添加外部成员,然后向这些 Google 群组授予角色,来绕过网域限制条件。
为确保项目管理员无法绕过网域限制条件,Google Workspace 管理员在 Google Workspace 管理员面板中应确保该群组所有者不能允许网域以外的成员。
强制授予账号访问权限
对于违反网域限制的项目,如果您需要强制账号访问:
移除包含网域限制条件的组织政策。
授予对项目的账号访问权限。
再次实施含有网域限制条件的组织政策。
或者,您也可以向包含相关服务账号的 Google 群组授予访问权限:
在允许的网域中创建 Google 群组。
使用 Google Workspace 管理员面板关闭该群组的网域限制。
将服务账号添加到群组。
在 IAM 政策中向 Google 群组授予访问权限。
将 Pub/Sub 用作 Google Chat 应用的端点。
当您尝试向 Google Chat API 服务账号授予对您主题的发布权限时,如果“受限网域共享”约束条件处于启用状态,您可能会被屏蔽。按照相应流程强制访问账号。