本页介绍了如何排查 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 政策。