本页面介绍如何使用政策分析器来分析允许政策,以确定哪些主账号(用户、服务账号、群组和网域)对哪些Google Cloud 资源拥有什么访问权限。
本页面的示例展示了如何运行政策分析查询并立即查看结果。如果您想导出结果以进行进一步分析,可以使用 AnalyzeIamPolicyLongrunning 将查询结果写入 BigQuery 或 Cloud Storage。
准备工作
Enable the Cloud Asset API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.您必须在用于发送查询的项目中启用该 API。此资源不必与您将查询范围限定到的资源相同。
可选:了解政策分析器的工作原理。
可选:如果您希望每个组织每天执行 20 个以上的政策分析查询,请确保您已在组织级激活 Security Command Center 的高级层级或企业层级。如需了解详情,请参阅结算问题。
所需的角色和权限
您需要拥有以下角色和权限才能分析允许政策。
所需 IAM 角色
如需获得分析允许政策所需的权限,请让管理员向您授予您将查询范围限定到的项目、文件夹或组织的以下 IAM 角色:
-
Cloud Asset Viewer (
roles/cloudasset.viewer) -
如需分析具有自定义 IAM 角色的政策,您需要拥有:
Role Viewer (
roles/iam.roleViewer) -
如需使用 Google Cloud CLI 分析政策,请执行以下操作:
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含分析许可政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
分析允许政策需要以下权限:
-
cloudasset.assets.analyzeIamPolicy -
cloudasset.assets.searchAllResources -
cloudasset.assets.searchAllIamPolicies -
如需分析具有自定义 IAM 角色的政策,请执行以下操作:
iam.roles.get -
如需使用 Google Cloud CLI 分析政策,请执行以下操作:
serviceusage.services.use
必需的 Google Workspace 权限
如果您想展开查询结果中的群组,以查看某正文是否因其在 Google Workspace 群组中的成员资格而拥有某些角色或权限,则需要 groups.read Google Workspace 权限。此权限包含在 Groups Reader Admin 角色以及更强大的角色(例如 Groups Admin 或 Super Admin 角色)中。如需了解如何授予这些角色,请参阅分配特定管理员角色。
确定哪些主账号可以访问某个资源
您可以使用政策分析器检查哪些主账号对项目、文件夹或组织中的特定资源拥有特定角色或权限。如需获取此信息,请创建查询,其中包含要分析其访问权限的资源以及要检查的一个或多个角色或权限。
控制台
在 Google Cloud 控制台中,前往政策分析器页面。
在分析政策部分中,找到标记为自定义查询的窗格,然后点击该窗格中的创建自定义查询。
在选择查询范围字段中,选择要将查询范围限定到的项目、文件夹或组织。政策分析器将分析该项目、文件夹或组织的访问权限,以及该项目、文件夹或组织中的任何资源。
选择要检查的资源以及要检查的角色或权限:
- 在参数 1 字段中,从下拉菜单中选择资源。
- 在资源字段中,输入要分析其访问权限的资源的完整资源名称。如果您不知道完整资源名称,请输入资源的显示名,然后从提供的资源列表中选择该资源。
- 点击 添加选择器。
- 在参数 2 字段中,选择角色或权限。
- 在选择角色或选择权限字段中,选择要检查的角色或权限。
- 可选:如需检查其他角色和权限,请继续添加角色和权限选择器,直到您列出要检查的所有角色和权限。
可选:点击继续,然后选择要为此查询启用的所有高级选项。
在自定义查询窗格中,依次点击分析 > 运行查询。 报告页面会显示您输入的查询参数,以及对指定资源拥有指定角色或权限的所有主账号的结果表。
Google Cloud 控制台中的政策分析查询最多可运行 1 分钟。一分钟后, Google Cloud 控制台会停止查询并显示所有可用的结果。如果查询未在该时间内完成, Google Cloud 控制台会显示一条横幅,指示结果不完整。如需获取更多查询结果,请将结果导出到 BigQuery。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值project、folder或organization。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。FULL_RESOURCE_NAME:您要分析其访问权限的资源的完整资源名称。如需查看完整资源名称格式列表,请参阅资源名称格式。PERMISSIONS:您要检查的权限的英文逗号分隔列表,例如compute.instances.get,compute.instances.start。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。
执行 gcloud asset analyze-iam-policy 命令:
Linux、macOS 或 Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --full-resource-name=FULL_RESOURCE_NAME \ --permissions='PERMISSIONS'
Windows (PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --full-resource-name=FULL_RESOURCE_NAME ` --permissions='PERMISSIONS'
Windows (cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --full-resource-name=FULL_RESOURCE_NAME ^ --permissions='PERMISSIONS'
您会收到包含分析结果的 YAML 响应。每项分析结果都会列出一组与查询相关的访问权限、身份和资源,然后列出相关的 IAM 角色绑定。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果为 CONDITIONAL。
在指定资源上拥有任何指定权限的主账号会列在响应的 identities 字段中。以下示例展示了单个分析结果,其中突出显示了 identities 字段。
...
---
ACLs:
- accesses:
- permission: compute.instances.get
- permission: compute.instances.start
identities:
- name: user:my-user@example.com
resources:
- fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
binding:
members:
- user: my-user@example.com
role: roles/compute.admin
---
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyze-iam-policy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
REST
如需确定哪些主账号对资源具有特定权限,请使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。
在使用任何请求数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值projects、folders或organizations。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。FULL_RESOURCE_NAME:您要分析其访问权限的资源的完整资源名称。如需查看完整资源名称格式列表,请参阅资源名称格式。PERMISSION_1、PERMISSION_2...PERMISSION_N:您要检查的权限,例如compute.instances.get。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。
HTTP 方法和网址:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
请求 JSON 正文:
{
"analysisQuery": {
"resourceSelector": {
"fullResourceName": "FULL_RESOURCE_NAME"
},
"accessSelector": {
"permissions": [
"PERMISSION_1",
"PERMISSION_2",
"PERMISSION_N"
]
}
}
}
如需发送您的请求,请展开以下选项之一:
您会收到包含分析结果的 JSON 响应。每个分析结果都描述了一个相关的 IAM 角色绑定,然后列出该绑定中的资源、访问权限和主账号。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果会列为 CONDITIONAL。
在指定资源上拥有任何指定权限的主账号会列在响应的 identities 字段中。以下示例展示了单个分析结果,其中突出显示了 identities 字段。
...
{
"attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project",
"iamBinding": {
"role": "roles/compute.admin",
"members": [
"user:my-user@example.com"
]
},
"accessControlLists": [
{
"resources": [
{
"fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
}
],
"accesses": [
{
"permission": "compute.instances.get"
},
{
"permission": "compute.instances.start"
}
]
}
],
"identityList": {
"identities": [
{
"name": "user:my-user@example.com"
}
]
},
"fullyExplored": true
},
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyzeIamPolicy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
确定哪些主账号具有特定角色或权限
您可以使用政策分析器检查哪些主账号对组织中的任何 Google Cloud 资源拥有特定角色或权限。要获取此信息,请创建查询,其中包含要检查的一个或多个角色或权限,但不指定资源。
控制台
在 Google Cloud 控制台中,前往政策分析器页面。
在分析政策部分中,找到标记为自定义查询的窗格,然后点击该窗格中的创建自定义查询。
在选择查询范围字段中,选择要将查询范围限定到的项目、文件夹或组织。政策分析器将分析该项目、文件夹或组织的访问权限,以及该项目、文件夹或组织中的任何资源。
在参数 1 字段中,选择角色或权限。
在选择角色或选择权限字段中,选择要检查的角色或权限。
可选:要检查其他角色和权限,请执行以下操作:
- 点击 添加选择器。
- 在参数 2 字段中,选择角色或权限。
- 在选择角色或选择权限字段中,选择要检查的角色或权限。
- 继续添加角色和权限选择器,直到列出要检查的所有角色和权限。
可选:点击继续,然后选择要为此查询启用的所有高级选项。
在自定义查询窗格中,依次点击分析 > 运行查询。 报告页面会显示您输入的查询参数,以及对指定范围内的任意资源拥有指定角色或权限的所有主账号的结果表。
Google Cloud 控制台中的政策分析查询最多可运行 1 分钟。一分钟后, Google Cloud 控制台会停止查询并显示所有可用的结果。如果查询未在该时间内完成, Google Cloud 控制台会显示一条横幅,指示结果不完整。如需获取更多查询结果,请将结果导出到 BigQuery。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值project、folder或organization。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。ROLES:您要检查的角色的英文逗号分隔列表,例如roles/compute.admin,roles/compute.imageUser。如果您列出多个角色,政策分析器将检查是否包含所列出的任何角色。PERMISSIONS:您要检查的权限的英文逗号分隔列表,例如compute.instances.get,compute.instances.start。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。
执行 gcloud asset analyze-iam-policy 命令:
Linux、macOS 或 Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --roles='ROLES' \ --permissions='PERMISSIONS'
Windows (PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --roles='ROLES' ` --permissions='PERMISSIONS'
Windows (cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --roles='ROLES' ^ --permissions='PERMISSIONS'
您会收到包含分析结果的 JSON 响应。每个分析结果都描述了一个相关的 IAM 角色绑定,然后列出该绑定中的资源、访问权限和主账号。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果会列为 CONDITIONAL。
具有任何指定角色或权限的主账号会列在响应的 identities 字段中。以下示例展示了单个分析结果,其中突出显示了 identities 字段。
...
---
ACLs:
- accesses:
- permission: compute.instances.get
- permission: compute.instances.start
- role: roles/compute.admin
identities:
- name: user:my-user@example.com
resources:
- fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
binding:
members:
- user: my-user@example.com
role: roles/compute.admin
---
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyze-iam-policy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
REST
如需确定哪些主账号具有特定角色或权限,请使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。
在使用任何请求数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值projects、folders或organizations。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。ROLE_1、ROLE_2...ROLE_N:您要检查的角色,例如roles/compute.admin。如果您列出多个角色,政策分析器将检查是否包含所列出的任何角色。PERMISSION_1、PERMISSION_2...PERMISSION_N:要检查的权限,例如compute.instances.get。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。
HTTP 方法和网址:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
请求 JSON 正文:
{
"analysisQuery": {
"accessSelector": {
"roles": [
"ROLE_1",
"ROLE_2",
"ROLE_N"
],
"permissions": [
"PERMISSION_1",
"PERMISSION_2",
"PERMISSION_N"
]
}
}
}
如需发送您的请求,请展开以下选项之一:
您会收到包含分析结果的 JSON 响应。每个分析结果都描述了一个相关的 IAM 角色绑定,然后列出该绑定中的资源、访问权限和主账号。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果会列为 CONDITIONAL。
具有任何指定角色或权限的主账号会列在响应的 identities 字段中。以下示例展示了单个分析结果,其中突出显示了 identities 字段。
...
{
"attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project",
"iamBinding": {
"role": "roles/compute.admin",
"members": [
"user:my-user@example.com"
]
},
"accessControlLists": [
{
"resources": [
{
"fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
}
],
"accesses": [
{
"permission": "compute.instances.get"
},
{
"role": "roles/compute.admin"
}
]
}
],
"identityList": {
"identities": [
{
"name": "user:my-user@example.com"
}
]
},
"fullyExplored": true
},
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyzeIamPolicy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
确定主账号对某个资源拥有什么访问权限
您可以使用政策分析器检查主账号对组织中某个资源拥有什么角色或权限。要获取此信息,请创建查询,其中包含要分析其访问权限的主账号以及要分析其访问权限的资源。
控制台
在 Google Cloud 控制台中,前往政策分析器页面。
在分析政策部分中,找到标记为自定义查询的窗格,然后点击该窗格中的创建自定义查询。
在选择查询范围字段中,选择要将查询范围限定到的项目、文件夹或组织。政策分析器将分析该项目、文件夹或组织的访问权限,以及该项目、文件夹或组织中的任何资源。
选择要检查的资源和主账号:
- 在参数 1 字段中,从下拉菜单中选择资源。
- 在资源字段中,输入要分析其访问权限的资源的完整资源名称。如果您不知道完整资源名称,请输入资源的显示名,然后从提供的资源列表中选择该资源。
- 点击 添加选择器。
- 在参数 2 字段中,从下拉菜单中选择主账号。
- 在主账号字段中,开始输入用户、服务账号或群组的名称。然后,从提供的主账号列表中选择要分析其访问权限的用户、服务账号或群组。
可选:点击继续,然后选择要为此查询启用的所有高级选项。
在自定义查询窗格中,依次点击分析 > 运行查询。 报告页面会显示您输入的查询参数,以及指定主账号对指定资源拥有的所有角色的结果表。
Google Cloud 控制台中的政策分析查询最多可运行 1 分钟。一分钟后, Google Cloud 控制台会停止查询并显示所有可用的结果。如果查询未在该时间内完成, Google Cloud 控制台会显示一条横幅,指示结果不完整。如需获取更多查询结果,请将结果导出到 BigQuery。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值project、folder或organization。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。FULL_RESOURCE_NAME:您要分析其访问权限的资源的完整资源名称。如需查看完整资源名称格式列表,请参阅资源名称格式。PRINCIPAL:您要分析其访问权限的主账号,格式为PRINCIPAL_TYPE:ID,例如user:my-user@example.com。如需查看主账号类型的完整列表,请参阅主账号标识符。
执行 gcloud asset analyze-iam-policy 命令:
Linux、macOS 或 Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --full-resource-name=FULL_RESOURCE_NAME \ --identity=PRINCIPAL
Windows (PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --full-resource-name=FULL_RESOURCE_NAME ` --identity=PRINCIPAL
Windows (cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --full-resource-name=FULL_RESOURCE_NAME ^ --identity=PRINCIPAL
您会收到包含分析结果的 YAML 响应。每项分析结果都会列出一组与查询相关的访问权限、身份和资源,然后列出相关的 IAM 角色绑定。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果为 CONDITIONAL。
主账号对指定资源拥有的角色列在响应的 accesses 字段中。以下示例展示了单个分析结果,其中突出显示了 accesses 字段。
...
---
ACLs:
- accesses:
- roles/iam.serviceAccountUser
identities:
- name: user:my-user@example.com
resources:
- fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
binding:
members:
- user: my-user@example.com
role: roles/iam.serviceAccountUser
---
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyze-iam-policy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
REST
如需确定主账号对某个资源拥有什么访问权限,请使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。
在使用任何请求数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值projects、folders或organizations。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。FULL_RESOURCE_NAME:您要分析其访问权限的资源的完整资源名称。如需查看完整资源名称格式列表,请参阅资源名称格式。PRINCIPAL:您要分析其访问权限的主账号,格式为PRINCIPAL_TYPE:ID,例如user:my-user@example.com。如需查看主账号类型的完整列表,请参阅主账号标识符。
HTTP 方法和网址:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
请求 JSON 正文:
{
"analysisQuery": {
"resourceSelector": {
"fullResourceName": "FULL_RESOURCE_NAME"
},
"identitySelector": {
"identity": "PRINCIPAL"
}
}
}
如需发送您的请求,请展开以下选项之一:
您会收到包含分析结果的 JSON 响应。每个分析结果都描述了一个相关的 IAM 角色绑定,然后列出该绑定中的资源、访问权限和主账号。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果会列为 CONDITIONAL。
主账号对指定资源拥有的角色列在响应的 accesses 字段中。以下示例展示了单个分析结果,其中突出显示了 accesses 字段。
...
{
"attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project",
"iamBinding": {
"role": "roles/iam.serviceAccountUser",
"members": [
"user:my-user@example.com"
]
},
"accessControlLists": [
{
"resources": [
{
"fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
}
],
"accesses": [
{
"roles": "iam.serviceAccountUser"
}
]
}
],
"identityList": {
"identities": [
{
"name": "user:my-user@example.com"
}
]
},
"fullyExplored": true
},
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyzeIamPolicy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
确定主账号可以访问哪些资源
您可以使用政策分析器检查主账号对组织中的哪些资源具有特定角色或权限。要获取此信息,请创建查询,其中包含要分析其权限的主账号以及要检查的一个或多个权限或角色。
控制台
在 Google Cloud 控制台中,前往政策分析器页面。
在分析政策部分中,找到标记为自定义查询的窗格,然后点击该窗格中的创建自定义查询。
在选择查询范围字段中,选择要将查询范围限定到的项目、文件夹或组织。政策分析器将分析该项目、文件夹或组织的访问权限,以及该项目、文件夹或组织中的任何资源。
选择要检查的主账号以及要检查的角色或权限:
- 在参数 1 字段中,从下拉菜单中选择主账号。
- 在主账号字段中,开始输入用户、服务账号或群组的名称。然后,从提供的主账号列表中选择要分析其访问权限的用户、服务账号或群组。
- 点击 添加选择器。
- 在参数 2 字段中,选择角色或权限。
- 在选择角色或选择权限字段中,选择要检查的角色或权限。
- 可选:如需检查其他角色和权限,请继续添加角色和权限选择器,直到您列出要检查的所有角色和权限。
可选:点击继续,然后选择要为此查询启用的所有高级选项。
在自定义查询窗格中,依次点击分析 > 运行查询。 报告页面会显示您输入的查询参数,以及指定主账号对其拥有指定角色或权限的所有资源的结果表。
Google Cloud 控制台中的政策分析查询最多可运行 1 分钟。一分钟后, Google Cloud 控制台会停止查询并显示所有可用的结果。如果查询未在该时间内完成, Google Cloud 控制台会显示一条横幅,指示结果不完整。如需获取更多查询结果,请将结果导出到 BigQuery。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值project、folder或organization。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。PRINCIPAL:您要分析其访问权限的主账号,格式为PRINCIPAL_TYPE:ID,例如user:my-user@example.com。如需查看主账号类型的完整列表,请参阅主账号标识符。PERMISSIONS:您要检查的权限的英文逗号分隔列表,例如compute.instances.get,compute.instances.start。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。
执行 gcloud asset analyze-iam-policy 命令:
Linux、macOS 或 Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --identity=PRINCIPAL \ --permissions='PERMISSIONS'
Windows (PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --identity=PRINCIPAL ` --permissions='PERMISSIONS'
Windows (cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --identity=PRINCIPAL ^ --permissions='PERMISSIONS'
您会收到包含分析结果的 YAML 响应。每项分析结果都会列出一组与查询相关的访问权限、身份和资源,然后列出相关的 IAM 角色绑定。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果为 CONDITIONAL。
指定正文对哪些资源拥有指定权限,这些资源会列在响应的 resources 字段中。以下示例展示了单个分析结果,其中突出显示了 resources 字段。
...
---
ACLs:
- accesses:
- permission: compute.instances.get
- permission: compute.instances.start
identities:
- name: user:my-user@example.com
resources:
- fullResourceName: //compute.googleapis.com/projects/my-project/global/images/my-image
policy:
attachedResource: //compute.googleapis.com/projects/my-project/global/images/my-image
binding:
members:
- user: my-user@example.com
role: roles/compute.admin
---
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyze-iam-policy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
REST
如需确定主账号可以访问哪些资源,请使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。
在使用任何请求数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值projects、folders或organizations。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。PRINCIPAL:您要分析其访问权限的主账号,格式为PRINCIPAL_TYPE:ID,例如user:my-user@example.com。如需查看主账号类型的完整列表,请参阅主账号标识符。PERMISSION_1、PERMISSION_2...PERMISSION_N:您要检查的权限,例如compute.instances.get。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。
HTTP 方法和网址:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
请求 JSON 正文:
{
"analysisQuery": {
"identitySelector": {
"identity": "PRINCIPAL"
},
"accessSelector": {
"permissions": [
"PERMISSION_1",
"PERMISSION_2",
"PERMISSION_N"
]
}
}
}
如需发送您的请求,请展开以下选项之一:
您会收到包含分析结果的 JSON 响应。每个分析结果都描述了一个相关的 IAM 角色绑定,然后列出该绑定中的资源、访问权限和主账号。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果会列为 CONDITIONAL。
指定正文对哪些资源拥有指定权限,这些资源会列在响应的 resources 字段中。以下示例展示了单个分析结果,其中突出显示了 resources 字段。
...
{
"attachedResourceFullName": "//compute.googleapis.com/projects/my-project/global/images/my-image",
"iamBinding": {
"role": "roles/compute.admin",
"members": [
"user:my-user@example.com"
]
},
"accessControlLists": [
{
"resources": [
{
"fullResourceName": "//compute.googleapis.com/projects/my-project/global/images/my-image"
}
],
"accesses": [
{
"permission": "compute.instances.get"
},
{
"permission": "compute.instances.start"
}
]
}
],
"identityList": {
"identities": [
{
"name": "user:my-user@example.com"
}
]
},
"fullyExplored": true
},
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyzeIamPolicy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
确定特定时间的访问权限
如果提供足够的背景信息,政策分析器可以分析仅在特定时间授予访问权限的 IAM 条件角色绑定。这些条件称为日期/时间条件。为了让政策分析器准确分析具有日期/时间条件的角色绑定,您需要在请求中定义访问时间。
政策分析器还可以分析资源条件,而无需用户提供其他输入。如需详细了解 Policy Analyzer 如何与条件搭配使用,请参阅条件访问。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值project、folder或organization。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。PERMISSIONS:可选。您要检查的权限的英文逗号分隔列表,例如compute.instances.get,compute.instances.start。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。-
FULL_RESOURCE_NAME:可选。要分析其访问权限的资源的完整资源名称。如需查看完整的资源名称格式列表,请参阅资源名称格式。 PERMISSIONS:可选。您要检查的权限的英文逗号分隔列表,例如compute.instances.get,compute.instances.start。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。ACCESS_TIME:您要检查的时间。此时间必须是未来的时间。使用 RFC 3339 格式的时间戳,例如2099-02-01T00:00:00Z。
执行 gcloud asset analyze-iam-policy 命令:
Linux、macOS 或 Cloud Shell
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \ --identity=PRINCIPAL \ --full-resource-name=FULL_RESOURCE_NAME \ --permissions='PERMISSIONS' \ --access-time=ACCESS_TIME
Windows (PowerShell)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ` --identity=PRINCIPAL ` --full-resource-name=FULL_RESOURCE_NAME ` --permissions='PERMISSIONS' ` --access-time=ACCESS_TIME
Windows (cmd.exe)
gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^ --identity=PRINCIPAL ^ --full-resource-name=FULL_RESOURCE_NAME ^ --permissions='PERMISSIONS' ^ --access-time=ACCESS_TIME
您会收到包含分析结果的 YAML 响应。每项分析结果都会列出一组与查询相关的访问权限、身份和资源,然后列出相关的 IAM 角色绑定。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果为 CONDITIONAL。
在请求中添加访问时间后,政策分析器便可评估日期/时间条件。如果条件的评估结果为 false,则相应角色不会包含在响应中。如果条件的计算结果为 true,则条件计算结果会列为 TRUE。
...
---
ACLs:
- accesses:
- permission: compute.instances.get
- permission: compute.instances.start
conditionEvaluationValue: 'TRUE'
identities:
- name: user:my-user@example.com
resources:
- fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
binding:
condition:
expression: request.time.getHours("America/Los_Angeles") >= 5
title: No access before 5am PST
members:
- user: my-user@example.com
role: roles/compute.admin
---
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyze-iam-policy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
REST
如需确定哪些主账号在特定时间对资源拥有特定权限,请使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。
在使用任何请求数据之前,请先进行以下替换:
RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值projects、folders或organizations。RESOURCE_ID:您要将搜索范围限定到的Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如my-project。文件夹和组织 ID 是数字,例如123456789012。PERMISSION_1、PERMISSION_2...PERMISSION_N:可选。您要检查的权限,例如compute.instances.get。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。-
FULL_RESOURCE_NAME:可选。要分析其访问权限的资源的完整资源名称。如需查看完整的资源名称格式列表,请参阅资源名称格式。 PERMISSION_1、PERMISSION_2...PERMISSION_N:可选。您要检查的权限,例如compute.instances.get。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。ACCESS_TIME:您要检查的时间。此时间必须是未来的时间。使用 RFC 3339 格式的时间戳,例如2099-02-01T00:00:00Z。
HTTP 方法和网址:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy
请求 JSON 正文:
{
"analysisQuery": {
"identitySelector": {
"identity": "PRINCIPAL"
},
"resourceSelector": {
"fullResourceName": "FULL_RESOURCE_NAME"
},
"accessSelector": {
"permissions": [
"PERMISSION_1",
"PERMISSION_2",
"PERMISSION_N"
]
},
"conditionContext": {
"accessTime": "ACCESS_TIME"
}
}
}
如需发送您的请求,请展开以下选项之一:
您会收到包含分析结果的 JSON 响应。每个分析结果都描述了一个相关的 IAM 角色绑定,然后列出该绑定中的资源、访问权限和主账号。如果角色绑定是有条件的,分析结果还会包含条件评估结果。如果无法评估条件,结果会列为 CONDITIONAL。
在请求中添加访问时间后,政策分析器便可评估日期/时间条件。如果条件的评估结果为 false,则相应角色不会包含在响应中。如果条件的计算结果为 true,则分析响应中的条件评估值为 TRUE。
...
{
"attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project",
"iamBinding": {
"role": "roles/compute.admin",
"members": [
"user:my-user@example.com"
],
"condition": {
"expression": "request.time.getHours(\"America/Los_Angeles\") \u003e= 5",
"title": "No access before 5am PST"
}
},
"accessControlLists": [
{
"resources": [
{
"fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
}
],
"accesses": [
{
"permission": "compute.instances.get"
},
{
"permission": "compute.instances.start"
}
],
"conditionEvaluation": {
"evaluationValue": "TRUE"
}
}
],
"identityList": {
"identities": [
{
"name": "user:my-user@example.com"
}
]
},
"fullyExplored": true
},
...
如果请求在查询完成之前超时,您会收到 DEADLINE_EXCEEDED 错误。如需获得更多查询结果,请使用 analyzeIamPolicy 的长时间运行版本将结果写入 BigQuery 或 Cloud Storage。如需相关说明,请参阅将政策分析写入 BigQuery 或将政策分析写入 Cloud Storage。
启用选项
您可以启用以下选项,以接收更详细的查询结果。
控制台
| 选项 | 说明 |
|---|---|
| 列出与查询匹配的资源内的资源 | 如果您启用此选项,查询结果将列出查询结果中任何父资源(项目、文件夹和组织)的最多 1,000 个相关后代资源。 |
| 列出群组内的单个用户 |
如果您启用此选项,查询结果中的所有群组都会展开为单个成员。如果您有足够的群组权限,系统还会展开嵌套的群组。每个群组的扩展上限为 1,000 名成员。 只有当您未在查询中指定正文时,此选项才可用。 |
| 列出角色内的权限 |
如果您启用此选项,查询结果将列出每个角色中的所有权限以及角色本身。 只有当您未在查询中指定任何权限或角色时,此选项才可用。 |
gcloud
本部分介绍了使用 gcloud CLI 分析许可政策时可以添加的几个常见标志。如需查看完整的选项列表,请参阅可选标志。
| 标志 | 说明 |
|---|---|
--analyze-service-account-impersonation |
如果启用此选项,政策分析器会运行额外的分析查询,以确定哪些人可以模拟对指定资源具有指定访问权限的服务账号。政策分析器会针对查询结果中的每个服务账号运行一次查询。这些查询会分析哪些人对服务账号拥有以下任一权限:
这是一项开销非常大的操作,因为它会自动执行许多查询。我们强烈建议您使用 |
--expand-groups |
如果您启用此选项,查询结果中的所有群组都会展开为单个成员。如果您有足够的群组权限,系统还会展开嵌套的群组。每个群组的扩展上限为 1,000 名成员。 只有当您未在查询中指定正文时,此选项才会生效。 |
--expand-resources |
如果您启用此选项,查询结果将列出查询结果中任何父资源(项目、文件夹和组织)的最多 1,000 个相关后代资源。 |
--expand-roles |
如果您启用此选项,查询结果将列出每个角色中的所有权限以及角色本身。 只有当您未在查询中指定任何权限或角色时,此选项才可用。 |
--output-group-edges |
如果您启用此选项,查询结果会输出群组之间的相关成员关系。 |
--output-resource-edges |
如果您启用此选项,查询结果将输出资源之间相关的父级/子级关系。 |
REST
如需启用任何选项,请先向分析查询添加 options 字段。例如:
{ "analysisQuery": { "resourceSelector": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project" }, "accessSelector": { "permissions": [ "iam.roles.get", "iam.roles.list" ] }, "options": { OPTIONS } } }
将 OPTIONS 替换为您要启用的选项,格式为 "OPTION": true。下表介绍了可用的选项:
| 选项 | 说明 |
|---|---|
analyzeServiceAccountImpersonation |
如果启用此选项,政策分析器会运行额外的分析查询,以确定哪些人可以模拟对指定资源具有指定访问权限的服务账号。政策分析器会针对查询结果中的每个服务账号运行一次查询。这些查询会分析哪些人对服务账号拥有以下任一权限:
这是一项开销非常大的操作,因为它会自动执行许多查询。我们强烈建议您使用 |
expandGroups |
如果您启用此选项,查询结果中的所有群组都会展开为单个成员。如果您有足够的群组权限,系统还会展开嵌套的群组。每个群组的扩展上限为 1,000 名成员。 只有当您未在查询中指定正文时,此选项才会生效。 |
expandResources |
如果您启用此选项,查询结果将列出查询结果中任何父资源(项目、文件夹和组织)的最多 1,000 个相关后代资源。 |
expandRoles |
如果您启用此选项,查询结果将列出每个角色中的所有权限以及角色本身。 只有当您未在查询中指定任何权限或角色时,此选项才可用。 |
outputGroupEdges |
如果您启用此选项,查询结果会输出群组之间的相关成员关系。 |
outputResourceEdges |
如果您启用此选项,查询结果将输出资源之间相关的父级/子级关系。 |
后续步骤
- 了解如何使用
AnalyzeIamPolicyLongrunning写入 BigQuery 或写入 Cloud Storage。 - 了解如何使用 REST API 保存政策分析查询。
- 了解可用的访问权限问题排查工具,您可以使用这些工具来确定主账号不具备特定类型访问权限的原因。