排查政策问题

本页介绍了如何排查 Identity and Access Management (IAM) 允许政策、拒绝政策和主账号访问边界政策的问题。

使用政策问题排查工具

如果您需要排查特定主账号的访问权限问题,请使用 IAM 政策问题排查工具。

政策问题排查工具可帮助您了解主账号是否可以访问某项资源。给定主账号、资源和权限后,政策问题排查工具会检查影响主账号访问权限的允许政策、拒绝政策和主账号访问边界 (PAB) 政策。然后,该工具会根据这些政策告知您主账号是否可以使用指定权限访问相应资源。该页面还列出了相关政策,并说明了这些政策对主账号的访问权限有何影响。

如需了解如何使用政策问题排查工具来排查允许政策、拒绝政策和主账号访问边界政策问题,请参阅排查 IAM 权限问题

查看适用于资源的所有允许和拒绝政策

在 Google Cloud 中,以下允许和拒绝政策会影响对资源的访问权限:

  • 资源的允许政策
  • 资源的拒绝政策(如果有)
  • 资源的父级项目、文件夹和组织(如果有)的允许政策
  • 资源的父级项目、文件夹和组织(如果有)的拒绝政策

由于政策继承,父级项目、文件夹和组织的允许和拒绝政策会影响对资源的访问权限。将允许或拒绝政策附加到项目、文件夹或组织时,该政策也适用于该项目、文件夹或组织内的所有资源。

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

同样,如果项目的允许政策为主账号授予了特定权限,则该主账号对项目中的任何资源都拥有该权限,前提是它们没有被拒绝该权限。

所有这些政策的并集称为资源的适用政策或有效政策

在 Google Cloud 中,您可以结合使用 gcloud beta projects get-ancestors-iam-policy 命令和 --include-deny 标志来获取影响项目访问权限的所有允许和拒绝政策的列表。这些政策共同构成了适用于项目的政策。您可以调查每项政策,了解其对主账号的访问权限有何影响。

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目 ID。 项目 ID 是字母数字字符串,例如 my-project

执行 gcloud beta projects get-ancestors-iam-policy 命令:

Linux、macOS 或 Cloud Shell

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows (PowerShell)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows (cmd.exe)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

响应将包含以下对象的允许和拒绝政策:项目;作为项目祖先实体的任何文件夹;以及组织。以下示例展示了组织 1234567890123 和项目 my-project 的允许政策,以及项目 my-project 的拒绝政策:

[
  {
    "id": "1234567890123",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/iam.denyAdmin"
        },
        {
          "members": [
            "user:raha@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwXW6Eab7TI=",
      "version": 1
    },
    "type": "organization"
  },
  {
    "id": "my-project",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwXXjOM7L6M=",
      "type": "project"
    }
  },
  {
    "id": "my-project",
    "policy": {
      "createTime": "2022-02-14T21:46:35.865279Z",
      "displayName": "My deny policy",
      "etag": "MTgyMzg2ODcwNTEyMjMxMTM3Mjg=",
      "kind": "DenyPolicy",
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/my-deny-policy",
      "rules": [
        {
          "denyRule": {
            "deniedPermissions": [
              "iam.googleapis.com/serviceAccounts.create"
            ],
            "deniedPrincipals": [
              "user:raha@example.com"
            ]
          },
          "description": "Prevent service account creation"
        }
      ],
      "uid": "c83e3dc3-d8a6-6f51-4018-814e9f200b05",
      "updateTime": "2022-02-14T21:46:35.865279Z"
    },
    "type": "project"
  }
]

在此示例中,Raha 被授予组织的 Service Account Admin 角色 (roles/iam.serviceAccountAdmin),但是项目的一个拒绝政策禁止 Raha 使用 iam.googleapis.com/serviceAccounts.create 权限。因此,如果 Raha 尝试在项目 my-project 中创建服务账号,该请求将被拒绝。

在某些情况下,您可能只需要查看资源的有效允许政策,例如,如果组织不使用拒绝政策。在这些情况下,您可以使用以下方法查看有效的许可政策:

  • 在 Google Cloud 控制台中查看资源的 IAM 允许政策。Google Cloud 控制台会自动显示每个资源的有效政策。

    如需了解如何在 Google Cloud 控制台中查看资源的 IAM 允许政策,请参阅查看当前访问权限

  • 使用 Cloud Asset API 获取资源的有效允许政策。如需了解详情,请参阅查看有效的 IAM 政策

如果您需要在允许政策中查找特定角色绑定,可以搜索允许政策。

借助 Cloud Asset Inventory,您可以在允许政策中搜索与指定参数匹配的角色绑定。您可以使用多种搜索参数,包括:

  • 资源类型
  • 主账号类型
  • 角色
  • 项目
  • 文件夹
  • 组织

如需了解详情,请参阅搜索 IAM 允许政策