本页面介绍了如何通过阻止主账号使用特定的 Identity and Access Management (IAM) 权限来拒绝其访问。
在 IAM 中,您可以使用拒绝政策拒绝访问。每个拒绝政策都会附加到 Google Cloud 组织、文件夹或项目。拒绝政策包含拒绝规则,用于标识主账号并列出主账号无法使用的权限。
拒绝政策与允许政策(也称为 IAM 政策)是相互独立的。允许政策通过向主账号授予 IAM 角色来提供对资源的访问权限。
您可以使用 Google Cloud CLI 或 IAM v2
REST API 来管理拒绝政策。
准备工作
Enable the IAM API.
设置身份验证。
Select the tab for how you plan to use the samples on this page:
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Terraform
如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Go
如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Node.js
如需在本地开发环境中使用本页面上的 Node.js 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
阅读拒绝政策概览。
所需的角色
如需获得管理拒绝政策所需的权限,请让管理员向您授予组织的以下 IAM 角色:
-
Deny Reviewer (
roles/iam.denyReviewer
)(如需查看拒绝政策) -
Deny Admin (
roles/iam.denyAdmin
)(如需查看、创建、更新和删除拒绝政策)
如需详细了解如何授予角色,请参阅管理访问权限。
这些预定义角色包含管理拒绝政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
您需要具备以下权限才能管理拒绝政策:
-
如需查看拒绝政策:
-
iam.denypolicies.get
-
iam.denypolicies.list
-
-
如需创建、更新和删除拒绝政策:
-
iam.denypolicies.create
-
iam.denypolicies.delete
-
iam.denypolicies.get
-
iam.denypolicies.update
-
确定要拒绝的权限
在创建拒绝政策之前,您必须确定要拒绝的权限以及应该拒绝这些权限的主账号。
只能拒绝部分权限。如需查看您可以拒绝的权限列表,请参阅拒绝政策中支持的权限。
在某些情况下,您还可以使用权限组来拒绝权限集。如需了解详情,请参阅权限组。
您可以使用
v2
REST API 管理拒绝政策,该 API 需要特殊格式的权限名称。例如,用于创建 IAM 自定义角色的权限如下所示:v1
API:iam.roles.create
v2
API:iam.googleapis.com/roles.create
确定连接点
每个拒绝政策都挂接到组织、文件夹或项目。拒绝政策附加到某个资源后,该项目、文件夹或组织中所有较低级层的资源都会继承拒绝政策。如需使用拒绝政策,您需要拒绝政策所附加的资源的标识符,这称为连接点。此标识符使用下表中的某种格式:
连接点格式 组织 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
创建拒绝政策
您可以向组织、文件夹和项目中添加拒绝政策。每个资源最多可以有 500 个拒绝政策。
拒绝政策包含拒绝规则,用于指定以下内容:
- 要拒绝的权限。
- 这些权限拒绝的主账号。
可选:在权限拒绝的范围中排除的主账号。
例如,您可以拒绝针对某个群组的权限,但排除该群组中的特定用户。
可选:条件表达式,用于指定主账号何时无法使用权限。在拒绝政策中,条件表达式只能使用资源标记类函数,不支持其他函数和运算符。
每个资源的所有附加拒绝政策最多可以有 500 个拒绝规则。
拒绝政策通过资源层次结构进行继承。例如,如果您在组织级层拒绝某项权限,则在该组织内的文件夹和项目中以及每个项目中特定于服务的资源上也会被拒绝。
拒绝政策会替换允许政策。如果主账号被授予某个包含特定权限的角色,但拒绝政策指出主账号无法使用该权限,则主账号无法使用该权限。
gcloud
如需为资源创建拒绝政策,请先创建包含政策的 JSON 文件。拒绝政策使用以下格式:
{ "displayName": "POLICY_NAME", "rules": [ { "denyRule": DENY_RULE_1 }, { "denyRule": DENY_RULE_2 }, { "denyRule": DENY_RULE_N } ] }
请提供以下值:
POLICY_NAME
:拒绝政策的显示名。-
DENY_RULE_1
、DENY_RULE_2
、...DENY_RULE_N
:政策中的拒绝规则。每个拒绝规则都可以包含以下字段:-
deniedPermissions
:指定的主账号无法使用的权限列表。这些权限必须在拒绝政策中受支持。在某些情况下,您还可以使用权限组来拒绝权限集。如需了解详情,请参阅权限组。
-
deniedPrincipals
:无法使用指定权限的主账号列表。为主账号标识符使用v2
API 格式。 -
exceptionPrincipals
:可选。可以使用指定权限的主账号列表,即使这些主账号包含在deniedPrincipals
中也是如此。例如,您可以使用此字段来排除属于被拒群组的特定用户。为主账号标识符使用v2
API 格式。 -
denialCondition
:可选。条件表达式,用于指定主账号何时无法使用权限。包含以下字段:-
expression
:使用通用表达式语言 (CEL) 语法的条件表达式。表达式必须使用 CEL 函数来评估资源标记。不支持其他函数和运算符。 -
title
:可选。条件目的的简要摘要。 -
description
:可选。条件的详细说明。
-
如需查看拒绝规则的示例,请参阅常见使用场景。
-
例如,以下拒绝政策包含一个拒绝规则,该规则拒绝针对用户
lucian@example.com
的一个权限:{ "displayName": "My deny policy.", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create" ] } } ] }
接下来,运行
gcloud iam policies create
命令:gcloud iam policies create POLICY_ID \ --attachment-point=ATTACHMENT_POINT \ --kind=denypolicies \ --policy-file=POLICY_FILE
请提供以下值:
-
POLICY_ID
:拒绝政策的标识符。 -
ATTACHMENT_POINT
:拒绝政策所关联的资源的标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。 -
POLICY_FILE
:包含拒绝政策的 JSON 文件的文件路径。
默认情况下,如果此命令执行成功,将不会输出任何输出内容。如需输出详细响应,请在命令中添加
--format=json
标志。例如,以下命令使用名为
policy.json
的文件为项目my-project
创建名为my-deny-policy
的拒绝政策:gcloud iam policies create my-deny-policy \ --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \ --kind=denypolicies \ --policy-file=policy.json
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。 如需了解详情,请参阅 Terraform 提供程序参考文档。
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Node.js
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Node.js API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
policies.createPolicy
方法可以为资源创建一个拒绝政策。在使用任何请求数据之前,请先进行以下替换:
-
ENCODED_ATTACHMENT_POINT
:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。 POLICY_ID
:拒绝政策的标识符。POLICY_NAME
:拒绝政策的显示名。-
DENY_RULE_1
、DENY_RULE_2
、...DENY_RULE_N
:政策中的拒绝规则。每个拒绝规则都可以包含以下字段:-
deniedPermissions
:指定的主账号无法使用的权限列表。这些权限必须在拒绝政策中受支持。在某些情况下,您还可以使用权限组来拒绝权限集。如需了解详情,请参阅权限组。
-
deniedPrincipals
:无法使用指定权限的主账号列表。为主账号标识符使用v2
API 格式。 -
exceptionPrincipals
:可选。可以使用指定权限的主账号列表,即使这些主账号包含在deniedPrincipals
中也是如此。例如,您可以使用此字段来排除属于被拒群组的特定用户。为主账号标识符使用v2
API 格式。 -
denialCondition
:可选。条件表达式,用于指定主账号何时无法使用权限。包含以下字段:-
expression
:使用通用表达式语言 (CEL) 语法的条件表达式。表达式必须使用 CEL 函数来评估资源标记。不支持其他函数和运算符。 -
title
:可选。条件目的的简要摘要。 -
description
:可选。条件的详细说明。
-
如需查看拒绝规则的示例,请参阅常见使用场景。
-
HTTP 方法和网址:
POST https://iam.googleapis.com/v2/policies/ENCODED_ATTACHMENT_POINT/denypolicies?policyId=POLICY_ID
请求 JSON 正文:
{ "displayName": "POLICY_NAME", "rules": [ { "denyRule": DENY_RULE_1 }, { "denyRule": DENY_RULE_2 }, { "denyRule": DENY_RULE_N } ] }
如需发送您的请求,请展开以下选项之一:
您应该会收到类似以下内容的 JSON 响应:
{ "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/89cb3e508bf1ff01", "metadata": { "@type": "type.googleapis.com/google.iam.v2.PolicyOperationMetadata", "createTime": "2022-06-28T19:06:12.455151Z" }, "response": { "@type": "type.googleapis.com/google.iam.v2.Policy", "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy", "uid": "6665c437-a3b2-a018-6934-54dd16d3426e", "kind": "DenyPolicy", "displayName": "My deny policy.", "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=", "createTime": "2022-06-28T19:06:12.455151Z", "updateTime": "2022-06-28T22:26:21.968687Z" "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create" ] } } ] } }
该响应用于标识长时间运行的操作。您可以监控长时间运行的操作的状态,以了解其完成时间。如需了解详情,请参阅本页面上的检查长时间运行的操作的状态。
列出拒绝政策
一个资源可以有多个拒绝政策。您可以列出附加到某个资源的所有拒绝政策,然后查看每个拒绝政策以查看每个政策中的拒绝规则。
gcloud
如需列出某个资源的拒绝政策,请运行
gcloud iam policies list
命令:gcloud iam policies list \ --attachment-point=ATTACHMENT_POINT \ --kind=denypolicies \ --format=json
请提供以下值:
-
ATTACHMENT_POINT
:拒绝政策所关联的资源的标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。
例如,以下命令列出了附加到数字 ID 为
123456789012
的组织的拒绝政策:gcloud iam policies list \ --attachment-point=cloudresourcemanager.googleapis.com/organizations/123456789012 \ --kind=denypolicies \ --format=json
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Node.js
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Node.js API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
policies.listPolicies
方法可列出资源的拒绝政策。在使用任何请求数据之前,请先进行以下替换:
-
ENCODED_ATTACHMENT_POINT
:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。
HTTP 方法和网址:
GET https://iam.googleapis.com/v2/policies/ENCODED_ATTACHMENT_POINT/denypolicies
如需发送您的请求,请展开以下选项之一:
您应该会收到类似以下内容的 JSON 响应:
{ "policies": [ { "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy", "uid": "6665c437-a3b2-a018-6934-54dd16d3426e", "kind": "DenyPolicy", "displayName": "My deny policy.", "createTime": "2022-06-28T19:06:12.455151Z", "updateTime": "2022-06-28T22:26:21.968687Z" }, { "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy-2", "uid": "8465d710-ea20-0a08-d92c-b2a3ebf766ab", "kind": "DenyPolicy", "displayName": "My second deny policy.", "createTime": "2022-06-05T19:21:53.595455Z", "updateTime": "2022-06-05T19:21:53.595455Z" }, { "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy-3", "uid": "ee9f7c2f-7e8c-b05c-d4e5-e03bfb2954e0", "kind": "DenyPolicy", "displayName": "My third deny policy.", "createTime": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-05T19:22:26.770543Z" } ] }
查看拒绝政策
您可以查看拒绝政策以查看其包含的拒绝规则,包括拒绝的权限以及无法使用这些权限的主账号。
gcloud
如需获取资源的拒绝政策,请运行
gcloud iam policies get
命令:gcloud iam policies get POLICY_ID \ --attachment-point=ATTACHMENT_POINT \ --kind=denypolicies \ --format=json
请提供以下值:
-
POLICY_ID
:拒绝政策的标识符。 -
ATTACHMENT_POINT
:拒绝政策所关联的资源的标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。
例如,以下命令会获取项目
my-project
的名为my-deny-policy
的拒绝政策,并将其保存在名为policy.json
的文件中:gcloud iam policies get my-deny-policy \ --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \ --kind=denypolicies \ --format=json \ > ./policy.json
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Node.js
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Node.js API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
policies.get
方法可获取资源的拒绝政策。在使用任何请求数据之前,请先进行以下替换:
-
ENCODED_ATTACHMENT_POINT
:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。 POLICY_ID
:拒绝政策的标识符。
HTTP 方法和网址:
GET https://iam.googleapis.com/v2/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID
如需发送您的请求,请展开以下选项之一:
您应该会收到类似以下内容的 JSON 响应:
{ "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy", "uid": "6665c437-a3b2-a018-6934-54dd16d3426e", "kind": "DenyPolicy", "displayName": "My deny policy.", "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=", "createTime": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-05T19:22:26.770543Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create" ] } } ] }
更新拒绝政策
创建拒绝政策后,您可以更新其包含的拒绝规则及其显示名。
要更新拒绝政策,请使用读取-修改-写入模式:
- 读取政策的当前版本。
- 根据需要修改政策中的信息。
- 写入更新后的政策。
读取拒绝政策
gcloud
如需获取资源的拒绝政策,请运行
gcloud iam policies get
命令:gcloud iam policies get POLICY_ID \ --attachment-point=ATTACHMENT_POINT \ --kind=denypolicies \ --format=json
请提供以下值:
-
POLICY_ID
:拒绝政策的标识符。 -
ATTACHMENT_POINT
:拒绝政策所关联的资源的标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。
例如,以下命令会获取项目
my-project
的名为my-deny-policy
的拒绝政策,并将其保存在名为policy.json
的文件中:gcloud iam policies get my-deny-policy \ --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \ --kind=denypolicies \ --format=json \ > ./policy.json
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Node.js
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Node.js API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
policies.get
方法可获取资源的拒绝政策。在使用任何请求数据之前,请先进行以下替换:
-
ENCODED_ATTACHMENT_POINT
:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。 POLICY_ID
:拒绝政策的标识符。
HTTP 方法和网址:
GET https://iam.googleapis.com/v2/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID
如需发送您的请求,请展开以下选项之一:
您应该会收到类似以下内容的 JSON 响应:
{ "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy", "uid": "6665c437-a3b2-a018-6934-54dd16d3426e", "kind": "DenyPolicy", "displayName": "My deny policy.", "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=", "createTime": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-05T19:22:26.770543Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create" ] } } ] }
修改拒绝政策
如需修改拒绝政策,请更改先前从 IAM 读取的政策副本。您可以更新显示名,也可以添加、更改或移除拒绝规则。这些更改在您写入更新后的政策后才会生效。
例如,您可以向现有拒绝规则添加权限:
{ "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy", "uid": "6665c437-a3b2-a018-6934-54dd16d3426e", "kind": "DenyPolicy", "displayName": "My deny policy.", "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=", "createTime": "2021-10-05T19:22:26.770543Z", "updateTime": "2021-10-05T19:22:26.770543Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create", "iam.googleapis.com/roles.delete" ] } } ] }
编写更新后的拒绝政策
在本地修改拒绝政策后,您必须将更新后的拒绝政策写入 IAM。
每个拒绝政策都包含一个
etag
字段,用于标识政策版本。每次更新政策时,etag
都会更改。当您编写更新后的政策时,请求中的etag
必须与 IAM 中存储的当前etag
匹配:如果值不匹配,请求将失败。此功能有助于防止并发更改彼此覆盖。gcloud
如需更新资源的拒绝政策,请运行
gcloud iam policies update
命令:gcloud iam policies update POLICY_ID \ --attachment-point=ATTACHMENT_POINT \ --kind=denypolicies \ --policy-file=POLICY_FILE
请提供以下值:
-
POLICY_ID
:拒绝政策的标识符。 -
ATTACHMENT_POINT
:拒绝政策所关联的资源的标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。 -
POLICY_FILE
:包含拒绝政策的 JSON 文件的文件路径。
默认情况下,如果此命令执行成功,将不会输出任何输出内容。如需输出详细响应,请在命令中添加
--format=json
标志。例如,以下命令使用名为
policy.json
的文件更新项目my-project
的名为my-deny-policy
的拒绝政策:gcloud iam policies update my-deny-policy \ --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \ --kind=denypolicies \ --policy-file=policy.json
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Node.js
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Node.js API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
policies.update
方法可更新拒绝政策。在使用任何请求数据之前,请先进行以下替换:
-
ENCODED_ATTACHMENT_POINT
:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。 POLICY_ID
:拒绝政策的标识符。-
POLICY
:更新后的拒绝政策。例如,如需为上一步中显示的政策添加权限,请将
POLICY
替换为以下内容:{ "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy", "uid": "6665c437-a3b2-a018-6934-54dd16d3426e", "kind": "DenyPolicy", "displayName": "My deny policy.", "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=", "createTime": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-05T19:22:26.770543Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create", "iam.googleapis.com/roles.delete" ] } } ] }
HTTP 方法和网址:
PUT https://iam.googleapis.com/v2/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID
请求 JSON 正文:
POLICY
如需发送您的请求,请展开以下选项之一:
您应该会收到类似以下内容的 JSON 响应:
{ "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/8b2d0ab2daf1ff01", "metadata": { "@type": "type.googleapis.com/google.iam.v2.PolicyOperationMetadata", "createTime": "2021-10-05T22:26:21.968687Z" }, "response": { "@type": "type.googleapis.com/google.iam.v2.Policy", "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy", "uid": "6665c437-a3b2-a018-6934-54dd16d3426e", "kind": "DenyPolicy", "displayName": "My deny policy.", "etag": "MTgxNTIxNDE3NTYxNjQxODYxMTI=", "createTime": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-05T22:26:21.968687Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create", "iam.googleapis.com/roles.delete" ] } } ] } }
该响应用于标识长时间运行的操作。您可以监控长时间运行的操作的状态,以了解其完成时间。如需了解详情,请参阅本页面上的检查长时间运行的操作的状态。
删除拒绝政策
如果不再需要强制执行拒绝政策中的规则,可以删除拒绝政策。
(可选)您可以为要删除的政策版本指定
etag
。如果您指定etag
,则它必须与 IAM 存储的当前etag
匹配;如果值不匹配,则请求将失败。您可以使用此功能确保删除预期的政策,而不是该政策的更新版本。如果您在请求中省略
etag
,则 IAM 会无条件地删除政策。gcloud
如需从资源中删除拒绝政策,请运行
gcloud iam policies delete
命令:gcloud iam policies delete POLICY_ID \ --attachment-point=ATTACHMENT_POINT \ --kind=denypolicies
请提供以下值:
-
POLICY_ID
:拒绝政策的标识符。 -
ATTACHMENT_POINT
:拒绝政策所关联的资源的标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。
或者,您可以添加
--etag=ETAG
标志。将ETAG
替换为拒绝政策的当前etag
值。默认情况下,如果此命令执行成功,将不会输出任何输出内容。如需输出详细响应,请在命令中添加
--format=json
标志。例如,以下命令会从项目
my-project
中删除名为my-deny-policy
的拒绝政策:gcloud iam policies delete my-deny-policy \ --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \ --kind=denypolicies
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Node.js
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Node.js API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
policies.delete
方法可从资源中删除拒绝政策。在使用任何请求数据之前,请先进行以下替换:
-
ENCODED_ATTACHMENT_POINT
:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。 POLICY_ID
:拒绝政策的标识符。-
ETAG
:可选。政策版本的标识符。如果存在,则此值必须与政策的当前etag
值匹配。
HTTP 方法和网址:
DELETE https://iam.googleapis.com/v2/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID?etag=ETAG
如需发送您的请求,请展开以下选项之一:
您应该会收到类似以下内容的 JSON 响应:
{ "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/8223fe308bf1ff01", "metadata": { "@type": "type.googleapis.com/google.iam.v2.PolicyOperationMetadata", "createTime": "2021-10-05T19:45:00.133311Z" }, "response": { "@type": "type.googleapis.com/google.iam.v2.Policy", "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy", "kind": "DenyPolicy", "displayName": "My deny policy.", "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=", "createTime": "2022-06-28T19:06:12.455151Z", "updateTime": "2022-07-05T19:45:00.133311Z", "deleteTime": "2022-07-05T19:45:00.133311Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create" ] } } ] } }
该响应用于标识长时间运行的操作。您可以监控长时间运行的操作的状态,以了解其完成时间。如需了解详情,请参阅本页面上的检查长时间运行的操作的状态。
检查长时间运行的操作的状态
使用 REST API 或客户端库时,任何更改拒绝政策的方法都会返回长时间运行的操作或 LRO。长时间运行的操作会跟踪请求的状态,并指示政策更改是否已完成。
Go
本页面上的代码示例展示了如何等待长时间运行的操作完成,然后访问其结果。
Java
本页面上的代码示例展示了如何等待长时间运行的操作完成,然后访问其结果。
Node.js
本页面上的代码示例展示了如何等待长时间运行的操作完成,然后访问其结果。
Python
本页面上的代码示例展示了如何等待长时间运行的操作完成,然后访问其结果。
REST
policies.operations.get
方法可返回长时间运行的操作的状态。在使用任何请求数据之前,请先进行以下替换:
-
ENCODED_ATTACHMENT_POINT
:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点。 -
OPERATION_ID
:操作的标识符。您在原始请求的响应中收到此标识符(作为操作名称的一部分)。使用操作名称末尾的十六进制值。例如89cb3e508bf1ff01
。
HTTP 方法和网址:
GET https://iam.googleapis.com/v2/policies/ENCODED_ATTACHMENT_POINT/operations/OPERATION_ID
如需发送您的请求,请展开以下选项之一:
您应该会收到类似以下内容的 JSON 响应:
{ "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/89cb3e508bf1ff01", "done": true }
如果操作的
done
字段不存在,请重复获取操作,以持续监控其状态。使用截断指数退避算法在每个请求之间引入延迟。当done
字段设置为true
时,操作完成,您可以停止获取操作。后续步骤
- 确定在拒绝政策中受支持的权限。
- 获取拒绝政策中的主账号标识符的格式。
- 了解如何排查包含拒绝政策的访问权限问题。
- 详细了解如何拒绝访问主账号。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-10-04。