拒绝访问资源

本页面介绍了如何通过阻止主帐号使用特定的 Identity and Access Management (IAM) 权限来拒绝其访问。

在 IAM 中,您可以使用拒绝政策拒绝访问。每个拒绝政策都会附加到 Google Cloud 组织、文件夹或项目。拒绝政策包含拒绝规则,用于标识主帐号并列出主帐号无法使用的权限。

拒绝政策与允许政策(也称为 IAM 政策)是相互独立的。允许政策通过向主帐号授予 IAM 角色来提供对资源的访问权限。

您可以使用 Google Cloud CLI 或 IAM v2beta REST API 来管理拒绝政策。

准备工作

所需的角色

如需获得管理拒绝政策所需的权限,请让管理员向您授予组织的以下 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

您也可以使用自定义角色或其他预定义角色来获取这些权限。

确定要拒绝的权限

在创建拒绝政策之前,您必须确定要拒绝的权限以及应该拒绝这些权限的主帐号。

您可以拒绝所有 IAM 权限中的一部分。如需查看您可以拒绝的权限列表,请参阅拒绝政策中支持的权限

您可以使用 v2beta REST API 管理拒绝政策,该 API 需要特殊格式的权限名称。例如,用于创建 IAM 自定义角色的权限如下所示:

  • v1 API: iam.roles.create
  • v2beta 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

创建拒绝政策

您可以向组织、文件夹和项目中添加拒绝政策。每个此类资源最多可以拥有 5 个拒绝政策。

拒绝政策包含拒绝规则,用于指定以下内容:

  • 要拒绝的权限。
  • 这些权限拒绝的主帐号。
  • 可选:在权限拒绝的范围中排除的主帐号。

    例如,您可以拒绝针对某个群组的权限,但排除该群组中的特定用户。

  • 可选:利用条件表达式,根据资源的标记指定主帐号何时无法使用权限。

拒绝政策通过资源层次结构进行继承。例如,如果您在组织级层拒绝某项权限,则在该组织内的文件夹和项目中以及每个项目中特定于服务的资源上也会被拒绝。

拒绝政策会替换允许政策。如果主帐号被授予某个包含特定权限的角色,但拒绝政策指出主帐号无法使用该权限,则主帐号无法使用该权限。

gcloud

如需为资源创建拒绝政策,请先创建包含政策的 JSON 文件。拒绝政策使用以下格式:

{
  "displayName": "POLICY_NAME",
  "rules": [
    {
      "denyRule": DENY_RULE_1
    },
    {
      "denyRule": DENY_RULE_2
    },
    {
      "denyRule": DENY_RULE_N
    }
  ]
}

请提供以下值:

  • POLICY_NAME:拒绝政策的显示名。
  • DENY_RULE_1DENY_RULE_2...DENY_RULE_N:政策中的拒绝规则。每个拒绝规则都可以包含以下字段:

    如需查看拒绝规则的示例,请参阅常见使用场景

例如,以下拒绝政策包含一个拒绝规则,该规则拒绝针对用户 lucian@example.com 的一个权限:

{
  "displayName": "My deny policy.",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create"
        ]
      }
    }
  ]
}

接下来,运行 gcloud beta iam policies create 命令:

gcloud beta 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 beta iam policies create my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --policy-file=policy.json

REST

policies.createPolicy 方法可以为资源创建一个拒绝政策。

在使用任何请求数据之前,请先进行以下替换:

  • ENCODED_ATTACHMENT_POINT:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点

  • POLICY_ID:拒绝政策的标识符。
  • POLICY_NAME:拒绝政策的显示名。
  • DENY_RULE_1DENY_RULE_2...DENY_RULE_N:政策中的拒绝规则。每个拒绝规则都可以包含以下字段:

    如需查看拒绝规则的示例,请参阅常见使用场景

HTTP 方法和网址:

POST https://iam.googleapis.com/v2beta/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.v2beta.PolicyOperationMetadata",
    "createTime": "2021-09-28T19:06:12.455151Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2beta.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": "2021-09-28T19:06:12.455151Z",
    "updateTime": "2021-09-28T22:26:21.968687Z"
    "rules": [
      {
        "denyRule": {
          "deniedPrincipals": [
            "principal://goog/subject/lucian@example.com"
          ],
          "deniedPermissions": [
            "iam.googleapis.com/roles.create"
          ]
        }
      }
    ]
  }
}

该响应用于标识长时间运行的操作。您可以监控长时间运行的操作的状态,以了解其完成时间。如需了解详情,请参阅本页面上的检查长时间运行的操作的状态

列出拒绝政策

一个资源最多可以拥有 5 个拒绝政策。 您可以列出附加到某个资源的所有拒绝政策,然后查看每个拒绝政策以查看每个政策中的拒绝规则。

gcloud

如需列出某个资源的拒绝政策,请运行 gcloud beta iam policies list 命令:

gcloud beta iam policies list \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --format=json

请提供以下值:

  • ATTACHMENT_POINT:拒绝政策所关联的资源的标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点

例如,以下命令列出了附加到数字 ID 为 123456789012 的组织的拒绝政策:

gcloud beta iam policies list \
    --attachment-point=cloudresourcemanager.googleapis.com/organizations/123456789012 \
    --kind=denypolicies \
    --format=json

REST

policies.listPolicies 方法可列出资源的拒绝政策。

在使用任何请求数据之前,请先进行以下替换:

  • ENCODED_ATTACHMENT_POINT:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点

HTTP 方法和网址:

GET https://iam.googleapis.com/v2beta/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": "2021-09-28T19:06:12.455151Z",
      "updateTime": "2021-09-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": "2021-10-05T19:21:53.595455Z",
      "updateTime": "2021-10-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": "2021-10-05T19:22:26.770543Z",
      "updateTime": "2021-10-05T19:22:26.770543Z"
    }
  ]
}

查看拒绝政策

您可以查看拒绝政策以查看其包含的拒绝规则,包括拒绝的权限以及无法使用这些权限的主帐号。

gcloud

如需获取资源的拒绝政策,请运行 gcloud beta iam policies get 命令:

gcloud beta 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 beta iam policies get my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --format=json \
    > ./policy.json

REST

policies.get 方法可获取资源的拒绝政策。

在使用任何请求数据之前,请先进行以下替换:

  • ENCODED_ATTACHMENT_POINT:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点

  • POLICY_ID:拒绝政策的标识符。

HTTP 方法和网址:

GET https://iam.googleapis.com/v2beta/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": "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"
        ]
      }
    }
  ]
}

更新拒绝政策

创建拒绝政策后,您可以更新其包含的拒绝规则及其显示名。

要更新拒绝政策,请使用读取-修改-写入模式:

  1. 读取政策的当前版本。
  2. 根据需要修改政策中的信息。
  3. 写入更新后的政策。

读取拒绝政策

gcloud

如需获取资源的拒绝政策,请运行 gcloud beta iam policies get 命令:

gcloud beta 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 beta iam policies get my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --format=json \
    > ./policy.json

REST

policies.get 方法可获取资源的拒绝政策。

在使用任何请求数据之前,请先进行以下替换:

  • ENCODED_ATTACHMENT_POINT:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点

  • POLICY_ID:拒绝政策的标识符。

HTTP 方法和网址:

GET https://iam.googleapis.com/v2beta/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": "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 读取的政策副本。您可以更新显示名,也可以添加、更改或移除拒绝规则。这些更改在您写入更新后的政策后才会生效。

例如,您可以向现有拒绝规则添加权限:

{
  "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 beta iam policies update 命令:

gcloud beta 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 beta iam policies update my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --policy-file=policy.json

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": "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"
            ]
          }
        }
      ]
    }

HTTP 方法和网址:

PUT https://iam.googleapis.com/v2beta/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.v2alpha.PolicyOperationMetadata",
    "createTime": "2021-10-05T22:26:21.968687Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2alpha.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": "2021-10-05T19:22:26.770543Z",
    "updateTime": "2021-10-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 beta iam policies delete 命令:

gcloud beta 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 beta iam policies delete my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies

REST

policies.delete 方法可从资源中删除拒绝政策。

在使用任何请求数据之前,请先进行以下替换:

  • ENCODED_ATTACHMENT_POINT:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点

  • POLICY_ID:拒绝政策的标识符。
  • ETAG:可选。政策版本的标识符。如果存在,则此值必须与政策的当前 etag 值匹配。

HTTP 方法和网址:

DELETE https://iam.googleapis.com/v2beta/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.v2beta.PolicyOperationMetadata",
    "createTime": "2021-10-05T19:45:00.133311Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2beta.Policy",
    "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
    "kind": "DenyPolicy",
    "displayName": "My deny policy.",
    "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
    "createTime": "2021-09-28T19:06:12.455151Z",
    "updateTime": "2021-10-05T19:45:00.133311Z",
    "deleteTime": "2021-10-05T19:45:00.133311Z",
    "rules": [
      {
        "denyRule": {
          "deniedPrincipals": [
            "principal://goog/subject/lucian@example.com"
          ],
          "deniedPermissions": [
            "iam.googleapis.com/roles.create"
          ]
        }
      }
    ]
  }
}

该响应用于标识长时间运行的操作。您可以监控长时间运行的操作的状态,以了解其完成时间。如需了解详情,请参阅本页面上的检查长时间运行的操作的状态

检查长时间运行的操作的状态

使用 REST API 时,任何更改拒绝政策的方法都会返回长时间运行的操作或 LRO。长时间运行的操作会跟踪请求的状态,并指示政策更改是否已完成。您可以轮询长时间运行的操作以监控其状态。

要轮询长时间运行的操作,请先获取其当前状态:

REST

policies.operations.get 方法可返回长时间运行的操作的状态。

在使用任何请求数据之前,请先进行以下替换:

  • ENCODED_ATTACHMENT_POINT:拒绝政策所关联的资源的网址编码标识符。如需了解如何设置此值的格式,请参阅本页面上的确定连接点

  • OPERATION_ID:操作的标识符。您在原始请求的响应中收到此标识符(作为操作名称的一部分)。使用操作名称末尾的十六进制值。例如 89cb3e508bf1ff01

HTTP 方法和网址:

GET https://iam.googleapis.com/v2beta/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 时,操作完成,您可以停止获取操作。

后续步骤