排查政策问题

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

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

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

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

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

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

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

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

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

gcloud

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

  • PROJECT_ID:您的 Trusted 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": [
            "principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/cloud-admins"
          ],
          "role": "roles/iam.denyAdmin"
        },
        {
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/raha@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwXW6Eab7TI=",
      "version": 1
    },
    "type": "organization"
  },
  {
    "id": "my-project",
    "policy": {
      "bindings": [
        {
          "members": [
            "principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/cloud-admins"
          ],
          "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": [
              "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/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 政策