拒绝政策

Identity and Access Management (IAM) 拒绝政策让您可以对Google Cloud 资源访问权限设置保护措施。借助拒绝政策,您可以定义拒绝规则,以防止某些主账号使用特定的权限(无论主账号被授予哪些角色)。

本页面简要介绍了拒绝政策和拒绝规则。如需了解如何创建和更新拒绝政策,请参阅拒绝访问资源

拒绝政策的工作原理

拒绝政策由拒绝规则组成。每条拒绝规则指定以下内容:

  • 一组被权限拒绝的主账号
  • 拒绝主账号使用的权限或主账号无法使用的权限
  • 可选:拒绝权限所必须满足的条件

在主账号被拒绝时,无论它们被授予哪些 IAM 角色,都无法执行需要该权限的任何操作。这是因为 IAM 始终会先检查相关拒绝政策,然后再检查相关允许政策。有关详情,请参阅政策评估

如需指定拒绝政策的应用位置,您可以将其附加到项目、文件夹或组织。将拒绝政策附加到以上某项资源时,政策中的主账号便无法使用指定的权限来访问该资源或资源的任何后代。 如需详细了解您可以在哪里附加拒绝政策,请参阅本页面上的附加点

您可以将多项拒绝政策附加到单个资源。这可让您为不同类型的拒绝规则创建单独的拒绝政策。例如,您可以将与合规性相关的拒绝规则放入一个政策中,然后在其他拒绝规则中使用另一个政策。每个拒绝政策都独立于所有其他拒绝政策进行评估。

每个资源最多可以有 500 个拒绝政策。这些拒绝政策总共可以包含 500 条拒绝规则。

附加点

每个拒绝政策都挂接到组织、文件夹或项目。拒绝政策附加到某个资源后,该项目、文件夹或组织中所有较低级层的资源都会继承拒绝政策。如需使用拒绝政策,您需要拒绝政策所附加的资源的标识符,这称为连接点。此标识符使用下表中的某种格式:

连接点格式
组织

cloudresourcemanager.googleapis.com/organizations/ORG_ID
ORG_ID 替换为数字组织 ID。对于 REST API,对整个值进行网址编码。

gcloud CLI 示例:
cloudresourcemanager.googleapis.com/organizations/123456789012

REST API 示例:
cloudresourcemanager.googleapis.com%2Forganizations%2F123456789012

文件夹

cloudresourcemanager.googleapis.com/folders/FOLDER_ID
FOLDER_ID 替换为数字文件夹 ID。对于 REST API,对整个值进行网址编码。

gcloud CLI 示例:
cloudresourcemanager.googleapis.com/folders/987654321098

REST API 示例:
cloudresourcemanager.googleapis.com%2Ffolders%2F987654321098

项目

cloudresourcemanager.googleapis.com/projects/PROJECT_ID
PROJECT_ID 替换为字母数字或数字项目 ID。对于 REST API,对整个值进行网址编码。

gcloud CLI 示例:
cloudresourcemanager.googleapis.com/projects/my-project

REST API 示例:
cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project

拒绝政策继承

拒绝政策类似于允许政策,通过资源层次结构继承。将拒绝政策附加到项目、文件夹或组织时,该政策也将适用于该项目、文件夹或组织内的所有资源。

例如,如果组织的拒绝政策规定主账号无法使用特定权限,则主账号无法对组织中的任何资源使用该权限。即使该组织中的文件夹和项目具有更宽松的拒绝政策,此规则也适用。

同样,如果项目的拒绝政策表示主账号无法使用特定权限,则主账号无法将该权限用于该项目中的任何资源。即使父级组织和文件夹具有更宽松的拒绝政策,此规则也适用。

拒绝条件

拒绝条件指定应用拒绝规则所必须满足的条件。如果条件的评估结果为 true 或无法评估,则会应用拒绝规则,并且主账号无法使用指定的权限。如果条件的评估结果为 false,则不会应用拒绝规则,并且主账号可以使用指定的权限(如果有)。

拒绝条件与 IAM 条件的结构相同。但是,拒绝条件只能识别资源标记函数

如需了解如何编写条件,请参阅 IAM 条件概览

权限组

某些服务允许您拒绝权限组。权限组是与指定模式匹配的权限集。您可以使用权限组来拒绝一组相关权限,例如,您可以拒绝单个服务或资源的所有权限。

拒绝政策中支持的权限列出了受支持的权限组。受支持的权限组的标识符会将权限名称的一个或多个部分替换为通配符字符 (*)。每个组包含的权限取决于通配符的位置:

  • SERVICE_FQDN/RESOURCE.*:拒绝指定资源的所有权限。
  • SERVICE_FQDN/*.*:拒绝指定服务的所有权限。
  • SERVICE_FQDN/*.VERB:拒绝以指定动词结尾的所有服务权限。

权限组包含当前和未来与指定模式匹配的所有权限。例如,假设您使用权限组 example.googleapis.com/exampleResource.* 来拒绝用户具有 exampleResource 资源类型的所有权限。如果 example.googleapis.com 添加了针对 exampleResource 资源类型的新权限(例如 example.googleapis.com/exampleResource.newPermission),则系统会自动拒绝用户具有新权限。

您只能在受支持的权限组中使用通配符。不支持在其他权限名称中使用通配符。

拒绝政策的结构

拒绝政策是元数据和拒绝规则的集合。拒绝规则会将一组主账号与一组拒绝主账号使用或主账号无法使用的权限相关联。每条规则还可以指定一个条件,用于确定何时拒绝权限。

例如,以下拒绝政策会阻止所有主账号删除项目,除非主账号是 project-admins 群组的成员或要删除的项目具有值为 test 的标记。

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F253519172624/denypolicies/limit-project-deletion",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",