Google Cloud 组织政策可让您以编程方式集中控制组织的资源。作为组织政策管理员,您可以定义组织政策,这是一组称为限制条件的限制,会应用于Google Cloud 资源层次结构中的 Google Cloud 资源及其后代。您可以在组织、文件夹或项目级强制执行组织政策。
组织政策为各种Google Cloud 服务提供预定义限制条件。但是,如果您想要更精细地控制和自定义组织政策中受限的特定字段,还可以创建自定义限制条件。为 CCAI 平台实现自定义限制需要您为实例配置专用访问权限。这样可限制这些实例对公共互联网的访问权限,这意味着您需要为代理、经理和 CCAI 平台管理员设置 Private Service Connect,以便他们访问这些实例。如需了解详情,请参阅设置 Private Service Connect。
优势
CCAI Platform 的组织政策可让 Google Cloud管理员针对 VPC Service Controls 未涵盖的网络路径强制执行组织级限制。此外,这些组织政策还可通过将网络流量划分为多个组件,对入站和出站路径进行精细控制。如需了解详情,请参阅组件。
政策继承
如果您对资源强制执行政策,默认情况下,该资源的后代会继承组织政策。例如,如果您对某个文件夹强制执行一项政策, Google Cloud 会对该文件夹中的所有项目强制执行该政策。如需详细了解此行为及其更改方式,请参阅层次结构评估规则。
价格
组织政策服务(包括预定义组织政策和自定义组织政策)可免费使用。
限制
CCAI 平台未与 Cloud Asset Inventory 集成,因此 Policy Intelligence 的 Policy Simulator 功能不适用于 CCAI 平台组织政策。
准备工作
在开始之前,请执行以下操作:
- 按照为 CCAI 平台设置 Google Cloud 项目中的步骤操作。
- 如需安装并初始化 Google Cloud CLI,请执行以下操作:
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
- 请确保您知道自己的组织 ID。
所需的角色
如需获得管理组织政策所需的权限,请让您的管理员为您授予以下 IAM 角色:
- 组织资源的 Organization Policy Administrator (
roles/orgpolicy.policyAdmin) -
如需拥有对 CCAI 平台资源的完整访问权限:
项目资源的 Contact Center AI 平台管理员 (
roles/contactcenteraiplatform.admin) -
如需能够启用、停用和检查使用方项目的服务状态、检查该项目的操作,以及使用其配额和结算服务,请在项目资源上授予 Service Usage Admin (
roles/serviceusage.serviceUsageAdmin) 角色
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含管理组织政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
管理组织政策需要以下权限:
-
orgpolicy.customConstraints.get -
orgpolicy.customConstraints.list -
orgpolicy.customConstraints.create -
orgpolicy.customConstraints.update -
orgpolicy.customConstraints.delete
组件
在 CCAI 平台实例上创建自定义限制条件时,您可以使用组件。组件是与特定 CCAI 平台功能关联的网络路径的抽象表示。例如,代理组件表示与代理、经理或 CCAI 平台管理员所执行任务相关的所有入站网络路径的集合。
下表显示了 CCAI Platform 自定义限制中使用的组件:
| 组件 | 说明 | 流量方向 | 示例值 |
|---|---|---|---|
AGENT |
与代理、经理或 CCAI 平台管理员执行的任务相关的所有入站网络路径的集合。 | 入站流量 | AGENT |
CRM |
流向客户关系管理 (CRM) 应用的出站流量。 | 出站 | CRM |
MEDIA |
媒体出站流量。 | 出站 | MEDIA |
DIRECT_ACCESS_POINT |
流向直接访问端点 (DAP) 的出站流量。 | 出站 | DIRECT_ACCESS_POINT |
EMAIL |
电子邮件出站流量。 | 出站 | EMAIL |
COBROWSE |
屏幕共享出站流量。 | 出站 | COBROWSE |
创建自定义限制条件
自定义限制条件是在 YAML 文件中,由实施组织政策的服务所支持的资源、方法、条件和操作定义的。自定义限制条件的条件使用通用表达式语言 (CEL) 进行定义。如需详细了解如何使用 CEL 构建自定义限制条件中的条件,请参阅创建和管理自定义限制条件的 CEL 部分。
如需在 YAML 文件中为 CCAI 平台定义自定义限制条件,请按以下步骤操作:
创建一个包含以下行的文本文件:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: - contactcenteraiplatform.googleapis.com/ContactCenter methodTypes: - CREATE - UPDATE condition: "CONDITION" actionType: ACTION_TYPE displayName: "DISPLAY_NAME" description: "DESCRIPTION"替换以下内容:
ORGANIZATION_ID:您的组织 ID。CONSTRAINT_NAME:自定义限制条件的名称。自定义限制条件必须以custom.前缀开头,只能包含大写字母、小写字母或数字,例如custom.requirePrivateAccess。此字段的长度上限为 70 个字符,不计算前缀。CONDITION:针对受支持的服务资源的表示法编写的 CEL 条件,例如resource.privateAccess.ingressSettings.exists(private_component, private_component.name == 'AGENT')。此字段的最大长度为 1,000 个字符。如需详细了解可用于编写条件的资源,请参阅 CCAI 平台支持的资源和操作。如需详细了解组件,请参阅组件。ACTION_TYPE:满足condition时要执行的操作。指定ALLOW。DISPLAY_NAME:限制条件的直观易记名称。 此字段的最大长度为 200 个字符。DESCRIPTION:直观易懂的限制条件说明,在违反政策时显示为错误消息。 此字段的最大长度为 2000 个字符。
将自定义限制条件保存为 YAML 文件,例如
customconstraint.yaml。在设置自定义限制中,使用此文件的路径作为CONSTRAINT_PATH变量的值。
如需详细了解自定义组织政策和限制条件语法,请参阅常见用例的自定义组织政策示例。
设置自定义限制条件
控制台
如需创建自定义限制条件,请执行以下操作:
- 在 Google Cloud 控制台中,转到组织政策页面。
- 在项目选择器中,选择要为其设置组织政策的项目。
- 点击 自定义限制条件。
- 在显示名称框中,为限制条件输入一个人类可读名称。此名称会在错误消息中使用,并可用于识别和调试用途。请勿在显示名称中使用个人身份信息 (PII) 或敏感数据,因为此名称可能会在错误消息中公开。此字段最多可包含 200 个字符。
-
在限制条件 ID 框中,为新的自定义限制条件输入所需的 ID。自定义限制条件只能包含字母(包括大写和小写)或数字,例如
custom.requirePrivateAccess。此字段最多可包含 70 个字符,不计算前缀 (custom.),例如organizations/123456789/customConstraints/custom。请勿在限制条件 ID 中包含个人身份信息或敏感数据,因为该 ID 可能会在错误消息中公开。 - 在说明框中,输入人类可读的限制条件说明。当违反政策时,此说明将用作错误消息。请包含有关发生违规的原因以及如何解决违规问题的详细信息。请勿在说明中包含个人身份信息或敏感数据,因为该说明可能会在错误消息中公开。 此字段最多可包含 2000 个字符。
-
在资源类型框中,选择包含要限制的对象和字段的 Google Cloud REST 资源的名称,例如
container.googleapis.com/NodePool。大多数资源类型最多支持 20 个自定义限制条件。如果您尝试创建更多自定义限制条件,操作将会失败。 -
此限制条件只能对 REST
CREATE方法强制执行。 - 如需定义条件,请点击 修改条件。
-
在添加条件面板中,创建一个引用受支持服务资源的 CEL 条件,例如
resource.management.autoUpgrade == false。此字段最多可包含 1,000 个字符。如需详细了解 CEL 用法,请参阅通用表达式语言。 如需详细了解可在自定义限制条件中使用的服务资源,请参阅自定义限制条件支持的服务。 - 点击保存。
- 在操作下,选择在满足条件时是允许还是拒绝评估的方法。
- 点击创建限制条件。
如需查看每种服务支持的方法,请在 支持自定义限制条件的服务中找到相应服务。
拒绝操作意味着,如果条件计算结果为 true,则创建或更新资源的操作会被阻止。
允许操作意味着,仅当条件计算结果为 true 时,才允许执行创建或更新资源的操作。除了条件中明确列出的情况之外,其他所有情况都会被阻止。
在每个字段中输入值后,右侧将显示此自定义限制条件的等效 YAML 配置。
gcloud
- 如需创建自定义限制条件,请使用以下格式创建 YAML 文件:
ORGANIZATION_ID:您的组织 ID,例如123456789。-
CONSTRAINT_NAME:新的自定义限制条件的名称。自定义限制条件只能包含字母(包括大写和小写)或数字,例如custom.requirePrivateAccess。此字段最多可包含 70 个字符,不计算前缀 (custom.),例如organizations/123456789/customConstraints/custom。请勿在限制条件 ID 中包含个人身份信息或敏感数据,因为该 ID 可能会在错误消息中公开。 -
RESOURCE_NAME:包含要限制的对象和字段的 Google Cloud资源的完全限定名称。例如contactcenteraiplatform.googleapis.com/ContactCenter。 大多数资源类型最多支持 20 个自定义限制条件。如果您尝试创建更多自定义限制条件,操作将会失败。 -
methodTypes:强制执行限制条件的 REST 方法。 只能是CREATE。 -
CONDITION:针对受支持服务资源的表示形式编写的 CEL 条件。此字段最多可包含 1,000 个字符。例如。resource.privateAccess.ingressSettings.exists(private_component, private_component.name == 'AGENT') -
ACTION:满足condition时要执行的操作。 只能是ALLOW。 -
DISPLAY_NAME:限制条件的直观易记名称。此名称会在错误消息中使用,并可用于识别和调试用途。请勿在显示名称中使用个人身份信息或敏感数据,因为此名称可能会在错误消息中公开。 此字段最多可包含 200 个字符。 -
DESCRIPTION:直观易懂的限制条件说明,当违反政策时会作为错误消息显示。此字段最多可包含 2000 个字符。 -
为新的自定义限制条件创建 YAML 文件后,您必须对其进行设置,以使其可用于组织中的组织政策。如需设置自定义限制条件,请使用
gcloud org-policies set-custom-constraint命令: - 如需验证自定义限制条件是否存在,请使用
gcloud org-policies list-custom-constraints命令:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: RESOURCE_NAME methodTypes: - CREATE condition: "CONDITION" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
请替换以下内容:
如需查看每种服务支持的方法,请在 支持自定义限制条件的服务中找到相应服务。
如需详细了解可针对其编写条件的资源,请参阅支持的资源。
允许操作意味着,如果条件计算结果为 true,则允许执行创建或更新资源的操作。这也意味着,除了条件中明确列出的情况之外,其他所有情况都会被阻止。
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
将 CONSTRAINT_PATH 替换为自定义限制条件文件的完整路径。例如 /home/user/customconstraint.yaml。
此操作完成后,您的自定义限制条件将作为组织政策显示在您的 Google Cloud 组织政策列表中。
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
将 ORGANIZATION_ID 替换为您的组织资源的 ID。
如需了解详情,请参阅查看组织政策。
强制执行自定义限制条件
如需强制执行布尔值限制条件,您可以创建引用该限制条件的组织政策,并将该组织政策应用于 Google Cloud 资源。
如需强制执行自定义限制条件,请按以下步骤操作:
如需创建强制执行布尔值限制条件的组织政策,请创建引用以下限制条件的 YAML 政策文件:
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true替换以下内容:
PROJECT_ID:要对其实施限制条件的项目。CONSTRAINT_NAME:您为自定义限制条件定义的名称,例如custom.requirePrivateAccess。
如需强制执行包含限制条件的组织政策,请运行以下命令:
gcloud org-policies set-policy POLICY_PATH将
POLICY_PATH替换为组织政策 YAML 文件的完整路径。该政策将在 15 分钟内生效。
测试自定义约束条件
自定义限制条件(如创建自定义限制条件中所定义,具有 AGENT 类型的组件,如 CONDITION 说明中的示例所示)会强制执行以下行为:
创建或更新包含
AGENT类型组件的实例会成功。 如需了解详情,请参阅创建和更新具有AGENT类型组件的 CCAI 平台实例。创建或更新没有
AGENT类型组件的实例会失败。 如需了解详情,请参阅创建不含AGENT类型组件的 CCAI 平台实例和更新不含AGENT类型组件的 CCAI 平台实例。
创建和更新包含类型为 AGENT 的组件的 CCAI 平台实例
如需测试如何创建和更新具有 AGENT 类型组件的 CCAI 平台实例,请按以下步骤操作:
按照创建配置为私密访问的 CCAI 平台实例中的说明创建实例。实例创建成功。
如需更新实例,请执行以下操作:
在 Google Cloud 控制台的导航菜单中,点击 CCAI 平台。
系统会显示 CCAI 平台实例页面。
点击您之前在此程序中创建的实例的名称。
点击修改,然后点击配置部署。
更改部署时间表,然后点击保存。更新成功。
由于您创建的是专用 CCAI Platform 实例,因此需要设置 Private Service Connect 连接 才能访问该实例。
创建不含 AGENT 类型组件的 CCAI 平台实例
如需测试在没有 AGENT 类型组件的情况下创建和更新 CCAI 平台实例,请按以下步骤操作:
按照创建 CCAI 平台实例中的说明尝试创建实例,但不配置专用访问通道。实例创建失败。
更新不含 AGENT 类型组件的 CCAI 平台实例
如创建不含 AGENT 类型组件的 CCAI Platform 实例中所述,在强制执行自定义限制后,您无法创建不含 AGENT 类型组件的实例。如果您在强制执行自定义限制条件之前已有此类实例,那么在强制执行该限制条件后,对该实例的更新会失败(除非更新包括添加类型为 AGENT 的组件 - 请参阅以下注释)。
CCAI 平台支持的资源和操作
下表显示了组织政策自定义限制条件支持的资源和操作。
| 资源 | 操作 | 属性 | 运算符 | 条件示例 |
|---|---|---|---|---|
| ContactCenter | 创建或更新实例。如需了解详情,请参阅创建 CCAI 平台实例。 | name | 包含 | resource.name.contains("us-central1/contactCenters/myContactCenter") |
| 匹配 | resource.name.matches("projects/my-project/locations/us-central1/contactCenters/myContactCenter") |
|||
| startsWith | resource.name.startsWith("projects/my-project") |
|||
| endsWith | resource.name.endsWith("myContactCenter") |
|||
| privateAccess | exists |
resource.privateAccess.ingressSettings.exists(private_component, private_component.name == 'AGENT')
检查 |
常见用例的自定义组织政策示例
下表列出了一些您可能会觉得有用的自定义组织政策的语法:
| 说明 | 限制条件语法 |
|---|---|
所有指定的组件都是私有的,也就是说,AGENT)。 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.requirePrivateAccess resourceTypes: - contactcenteraiplatform.googleapis.com/ContactCenter methodTypes: - CREATE - UPDATE condition: "resource.privateAccess.ingressSettings.exists(private_component, private_component.name == 'AGENT')" actionType: ALLOW displayName: Agents cannot connect over the internet. description: Internet access is disallowed for agents. |
除单个指定实例之外的所有实例都必须使用指定的专用 AGENT。 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.requirePrivateAccess resourceTypes: - contactcenteraiplatform.googleapis.com/ContactCenter methodTypes: - CREATE - UPDATE condition: "resource.privateAccess.ingressSettings.exists(private_component, private_component.name == 'AGENT' || resource.name.contains('myContactCenterId')" actionType: ALLOW displayName: Restrict Internet access to AGENT for all instances except a single instance. description: Internet access for agents is restricted except for myContactcenterId CCAI Platform instances. |