借助 Cloud Asset API,您可以使用自定义查询语言来搜索项目、文件夹或组织中的 Identity and Access Management (IAM) 允许政策。
准备工作
为您的项目启用 Cloud Asset API。
确保调用者已获得一个包含
cloudasset.assets.searchAllIamPolicies
权限的角色。如需了解详情,请参阅访问权限控制主题。
搜索允许政策
控制台
如需搜索所有 IAM 允许政策,请完成以下步骤。
前往 Google Cloud 控制台中的 Asset Inventory 页面。
要设置搜索范围,请打开菜单栏中的“项目”列表框,然后选择要查询的组织、文件夹或项目。
选择 IAM 政策标签页。
如需搜索允许政策,您可以使用预设查询或自行构建查询。
如需使用预设查询,请在过滤结果窗格上的查询预设中选择选项。如需过滤结果,请从过滤条件中选择选项。
如需构建您自己的查询,请在过滤条件栏中输入查询文本。选择文本框,随即会显示可搜索字段的列表。政策搜索支持多个字段。详细了解查询语法。
结果表中会列出与查询匹配的允许政策。
如需以 Google Cloud CLI 命令的形式来查看查询,请选择查看查询。
如需导出结果,请选择下载 CSV。
gcloud
您可以使用 gcloud asset search-all-iam-policies
命令调用 SearchAllIamPolicies
。您必须运行 Google Cloud CLI 302.0.0 或更新版本。您可以使用 gcloud version
命令检查版本:
gcloud asset search-all-iam-policies \
--scope=SCOPE \
--query="QUERY" \
--asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
--order-by=ORDER_BY
请提供以下值:
SCOPE
:必填。范围可以是项目、文件夹或组织。搜索范围仅限于此范围内的 IAM 允许政策。必须向调用方授予包含所选范围的cloudasset.assets.searchAllIamPolicies
权限的角色。如果未指定,系统会使用已配置的项目属性。允许使用的值包括:
projects/PROJECT_ID
projects/PROJECT_NUMBER
如何查找 Google Cloud 项目编号
控制台
如需查找 Google Cloud 项目编号,请完成以下步骤:
-
前往 Google Cloud 控制台中的信息中心页面。
- 点击菜单栏中的切换器框。
- 从请选择:框中选择您的组织,然后搜索项目名称。
- 点击项目名称以切换到该项目。项目编号会显示在项目信息卡片中。
gcloud CLI
您可以使用以下命令检索 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
如何查找 Google Cloud 文件夹 ID
控制台
如需查找 Google Cloud 文件夹 ID,请完成以下步骤:
-
转到 Google Cloud 控制台。
- 点击菜单栏中的切换器框。
- 点击请选择:复选框,然后选择您的组织。
- 搜索您的文件夹名称。文件夹 ID 会显示在文件夹名称旁边。
gcloud CLI
您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹 ID:
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
其中,TOP_LEVEL_FOLDER_NAME 可以是完整的字符串匹配,也可以是部分字符串匹配。移除
--format
选项可查看有关所找到文件夹的更多信息。要获取其他文件夹中的文件夹的 ID,请列出子文件夹:
gcloud resource-manager folders list --folder=FOLDER_ID
-
organizations/ORGANIZATION_ID
如何查找 Google Cloud 组织 ID
控制台
如需查找 Google Cloud 组织 ID,请完成以下步骤:
-
转到 Google Cloud 控制台。
- 点击菜单栏中的切换器框。
- 点击请选择:复选框,然后选择您的组织。
- 点击全部标签页。组织 ID 显示在组织名称旁边。
gcloud CLI
您可以使用以下命令检索 Google Cloud 组织 ID:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
QUERY
:可选。查询语句。如需了解详情,请参阅查询语法。 如果未指定或为空,则会搜索指定scope
中的所有 IAM 允许政策。请注意,查询字符串会与每个允许政策绑定(包括其主账号、角色和 IAM 条件)进行比较。返回的允许政策仅包含与您的查询匹配的绑定。如需详细了解允许政策结构,请参阅了解政策。示例:
policy:amy@gmail.com
,用于查找指定用户“amy@gmail.com”的允许政策绑定。policy:roles/compute.admin
,用于查找指定 Compute Admin 角色的允许政策绑定。policy:comp*
,用于查找将“comp”作为绑定中任何单词的前缀的允许政策绑定。policy.role.permissions:storage.buckets.update
,用于查找指定包含“storage.buckets.update”权限的角色的允许政策绑定。请注意,如果调用方尚未获得包含所需角色的iam.roles.get
权限的角色,系统会从搜索结果中删除指定此角色的允许政策绑定。policy.role.permissions:upd*
,用于查找允许政策绑定,这些绑定指定包含“upd”作为绑定中任何单词前缀的角色的角色。请注意,如果调用方尚未获得包含所需角色的iam.roles.get
权限的角色,系统会从搜索结果中移除指定此角色的允许政策绑定。resource:organizations/123456
,用于查找在“organizations/123456”上设置的允许政策绑定。resource=//cloudresourcemanager.googleapis.com/projects/myproject
,用于查找在名为“myproject”的项目上设置的允许政策绑定。Important
,用于查找任何可搜索字段中包含“重要”一词的允许政策绑定(包含的权限除外)。resource:(instance1 OR instance2) policy:amy
,用于查找在资源“instance1”或“instance2”上设置的允许政策绑定,并指定用户“amy”。roles:roles/compute.admin
,用于查找指定 Compute Admin 角色的允许政策绑定。memberTypes:user
,用于查找包含“user”主帐号类型的允许政策绑定。
ASSET_TYPE
:可选。附加了 Identity and Access Management 允许政策的资源类型列表。如果为空,则搜索附加到所有可搜索资产类型的 Identity and Access Management 允许政策。支持正则表达式。如果正则表达式与任何受支持的资源类型都不匹配,系统会返回INVALID_ARGUMENT
错误。ORDER_BY
:可选。以英文逗号分隔的字段列表,用于指定结果的排序顺序。默认顺序是升序。在字段名称后添加DESC
可指示降序顺序。多余空格会被忽略。示例:"assetType DESC, resource"
。响应中只有单一原始字段是可排序的:resource
assetType
project
重复字段(如
folders
)和非基元字段(如policy
)等其他字段不受支持。
以下是一个示例 gcloud
命令:
在
organizations/123456
中查找包含mycompany.com
网域的所有 IAM 允许政策绑定:gcloud asset search-all-iam-policies \ --scope=organizations/123456 \ --query="policy:\"domain:mycompany.com\""
在
myuser@mycompany.com
已被授予 Owner (roles/owner
) 基本角色的organizations/123456
中查找所有 IAM 允许政策绑定:gcloud asset search-all-iam-policies \ --scope=organizations/123456 \ --query="policy:(roles/owner myuser@mycompany.com)"
在
organizations/123456
中查找在projects/12345678
上设置的所有 IAM 允许政策绑定:gcloud asset search-all-iam-policies \ --scope=organizations/123456 \ --query="resource:projects/12345678"
REST
您可以使用项目的有效 OAuth 令牌调用 SearchAllIamPolicies
。要从 Cloud Shell 或可使用 gcloud
命令的任何控制台调用 SearchAllIamPolicies
方法,请执行以下操作:
如果您尚未配置项目的 OAuth 同意屏幕,则需要执行此操作。OAuth 同意屏幕需要电子邮件地址和产品名称。
转到项目的 OAuth 同意屏幕。
输入您要显示的应用名称。
在支持电子邮件地址下,选择要显示为公开联系人的电子邮件地址。这必须是您的电子邮件地址或您拥有的某个 Google 群组。
根据需要添加任何可选详细信息。
点击保存。
为您的项目创建 OAuth 令牌。如需了解详情,请参阅设置 OAuth 2.0。
转到“创建 OAuth 客户端 ID”页面。
选择桌面应用作为应用类型。
点击创建。
下载
client_secret.json
文件。转到“凭据”页面。
在新客户端 ID 的右侧,点击
下载 JSON。将文件安全地存储在只有您的应用可以访问的位置。
通过以下命令使用 JSON 文件登录。
gcloud auth application-default login --client-id-file=YOUR_JSON_FILE
此命令会提示您打开链接。确保该页面显示了您在 OAuth 同意屏幕中设置的应用名称。
您现在可以使用
curl
命令查询 IAM 允许政策。curl -X POST \ -H "X-HTTP-Method-Override: GET" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "assetTypes": [ "ASSET_TYPE_1", "ASSET_TYPE_2", "..." ], "orderBy": "ORDER_BY", "pageSize": PAGE_SIZE, "query": "QUERY" }' \ https://cloudasset.googleapis.com/v1/SCOPE:searchAllIamPolicies
请提供以下详细信息:
ASSET_TYPE
:可选。附加了 Identity and Access Management 允许政策的资源类型列表。如果为空,它将搜索附加到所有可搜索资产类型的 Identity and Access Management 允许政策。支持正则表达式。如果正则表达式与任何受支持的资源类型都不匹配,则会返回INVALID_ARGUMENT
错误。ORDER_BY
:可选。以英文逗号分隔的字段列表,用于指定结果的排序顺序。默认顺序为升序。在字段名称后面添加DESC
以指示降序。多余空格会被忽略。示例:"assetType DESC, resource"
。响应中只有单一原始字段是可排序的:resource
assetType
project
所有其他字段(如重复字段(如
folders
)和非基元字段(如policy
))均不受支持。PAGE_SIZE
:可选。每页返回的结果数。最大值是 2000。如果值设为0
或负值,将选择相应的默认值。系统会返回nextPageToken
以检索后续结果。QUERY
:可选。查询语句。如需了解详情,请参阅查询语法。如果未指定或为空,则会在指定的scope
中搜索所有 IAM 允许政策。请注意,查询字符串会与每个允许政策绑定(包括其主账号、角色和 IAM 条件)进行比较。返回的允许政策仅包含与您的查询匹配的绑定。如需详细了解允许政策的结构,请参阅了解允许政策。示例:
policy:amy@gmail.com
,用于查找指定用户“amy@gmail.com”的允许政策绑定。policy:roles/compute.admin
,用于查找指定 Compute Admin 角色的允许政策绑定。policy:comp*
,用于查找将“comp”作为绑定中任何单词的前缀的允许政策绑定。policy.role.permissions:storage.buckets.update
,用于查找指定包含“storage.buckets.update”权限的角色的允许政策绑定。请注意,如果调用方未被授予包含所需角色的iam.roles.get
权限的角色,则指定此角色的允许政策绑定会从搜索结果中移除。policy.role.permissions:upd*
,用于查找允许政策绑定,这些绑定指定包含“upd”作为角色权限中任何字词的前缀的角色。请注意,如果调用方尚未获得包含所需角色的iam.roles.get
权限的角色,系统会从搜索结果中删除指定此角色的允许政策绑定。resource:organizations/123456
,用于查找在“organizations/123456”上设置的允许政策绑定。resource=//cloudresourcemanager.googleapis.com/projects/myproject
,用于查找在名为“myproject”的项目上设置的允许政策绑定。Important
,用于查找任何可搜索字段中包含“重要”一词的允许政策绑定(包含的权限除外)。resource:(instance1 OR instance2) policy:amy
,用于查找在资源“instance1”或“instance2”上设置的允许政策绑定,并指定用户“amy”。roles:roles/compute.admin
,用于查找指定 Compute Admin 角色的允许政策绑定。memberTypes:user
,用于查找包含“user”主帐号类型的允许政策绑定。
SCOPE
:范围可以是项目、文件夹或组织。搜索范围仅限于此范围内的 IAM 允许政策。必须向调用方授予包含所选范围的cloudasset.assets.searchAllIamPolicies
权限的角色。如果未指定,系统会使用已配置的项目属性。允许使用的值包括:
projects/PROJECT_ID
projects/PROJECT_NUMBER
如何查找 Google Cloud 项目编号
控制台
如需查找 Google Cloud 项目编号,请完成以下步骤:
-
前往 Google Cloud 控制台中的信息中心页面。
- 点击菜单栏中的切换器框。
- 从请选择:框中选择您的组织,然后搜索项目名称。
- 点击项目名称以切换到该项目。项目编号会显示在项目信息卡片中。
gcloud CLI
您可以使用以下命令检索 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
如何查找 Google Cloud 文件夹 ID
控制台
如需查找 Google Cloud 文件夹 ID,请完成以下步骤:
-
转到 Google Cloud 控制台。
- 点击菜单栏中的切换器框。
- 点击请选择:复选框,然后选择您的组织。
- 搜索您的文件夹名称。文件夹 ID 会显示在文件夹名称旁边。
gcloud CLI
您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹 ID:
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
其中,TOP_LEVEL_FOLDER_NAME 可以是完整的字符串匹配,也可以是部分字符串匹配。移除
--format
选项可查看有关所找到文件夹的更多信息。要获取其他文件夹中的文件夹的 ID,请列出子文件夹:
gcloud resource-manager folders list --folder=FOLDER_ID
-
organizations/ORGANIZATION_ID
如何查找 Google Cloud 组织 ID
控制台
如需查找 Google Cloud 组织 ID,请完成以下步骤:
-
转到 Google Cloud 控制台。
- 点击菜单栏中的切换器框。
- 点击请选择:复选框,然后选择您的组织。
- 点击全部标签页。组织 ID 显示在组织名称旁边。
gcloud CLI
您可以使用以下命令检索 Google Cloud 组织 ID:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
客户端库和 API 参考文档
如何构建查询
如需详细了解查询语言,请参阅查询语法。
如需详细了解各种实际用例的示例查询,请参阅搜索 IAM 允许政策示例。
通过绑定信息查询 IAM 允许政策
如需搜索 IAM 允许政策,查询表达式采用以下格式:
policy:QUERY
您还可以仅使用以下格式搜索主账号类型或角色:
完全匹配:
memberTypes=QUERY
roles=QUERY
部分匹配:
memberTypes:QUERY
roles:QUERY
主账号
IAM 允许政策绑定支持五种类型的主帐号:
Google 账号,例如
user:user@gmail.com
Google 群组,例如
group:devs@googlegroups.com
Cloud Identity 和 G Suite 网域,例如
domain:google.com
服务账号,例如
serviceAccount:my-other-app@appspot.gserviceaccount.com
特殊标识符,例如
allUsers
和allAuthenticatedUsers
您可以使用以下语法将查询限制为允许与特定用户相关的政策:
policy:"user:amy@mycompany.com"
请注意,user:amy@mycompany.com
必须带有双引号,因为它包含特殊字符 :
。如果查询值足够独特,或者您想要搜索电子邮件地址,而不管主账号类型为何,则可以省略查询字符串中的 user:
或 group:
前缀。例如,以下查询可能仅匹配某位用户:
policy:amy@mycompany.com
您还可以使用以下语法将查询限制为与特定主账号类型相关的政策:
policy:user
memberTypes:user
memberTypes=user
policy:user
可能与其他主账号类型匹配。例如:group:test-user@mycompany.com
。使用 memberTypes
将搜索范围限制为特定的主账号类型。
示例:按主账号查询
查找指定用户
Amy
的所有 IAM 允许政策绑定:policy:amy
查找指定网域
mydomain.com
的所有 IAM 允许政策绑定:policy:mydomain.com
查找指定用户
Amy
和John
的所有 IAM 允许政策绑定:policy:(amy john)
查找指定用户
Amy
或John
的所有 IAM 允许政策绑定:policy:(amy OR john)
在组织中查找包含
amy@mycompany.com
的所有 IAM 允许政策绑定:policy:amy@mycompany.com
在组织中查找包含
mycompany.com
网域的所有 IAM 允许政策绑定:policy:"domain:mycompany.com"
查找将角色分配给
mycompany.gserviceaccount.com
服务帐号的所有 IAM 允许政策绑定:policy:"serviceAccount:mycompany.gserviceaccount.com"
查找将角色分配给
admins
组的所有 IAM 允许政策绑定:policy:"group:admins"
查找将角色分配给所有用户的所有 IAM 允许政策绑定:
memberTypes:allUsers
查找将角色分配给所有经过身份验证的用户的所有 IAM 允许政策绑定:
memberTypes:allAuthenticatedUsers
查找将角色分配给
amy@mycompany.com
或mycompany.com
网域的所有 IAM 允许政策绑定:policy:(amy@mycompany.com OR "domain:mycompany.com")
角色
IAM 允许政策绑定支持不同类型的角色。所有 IAM 角色名称都以 roles/
前缀开头。
基本角色:在引入 IAM 之前已存在三个角色:Owner (
roles/owner
)、Editor (roles/editor
) 和 Viewer (roles/viewer
)。预定义角色:IAM 提供额外的预定义角色,这些角色授予对不同资源的精细访问权限。查看所有预定义角色。
自定义角色:用户定义的 IAM 角色,包含一组经过挑选的权限。
您可以使用以下语法将查询限制为允许与特定角色相关的政策:
policy:roles/role-name
roles:roles/role-name
roles=roles/role-name
请注意,如果查询值足够独特,您可以将查询字符串中的 roles/
前缀省略。例如,以下查询可能仅与角色 roles/cloudasset.owner
匹配:
policy:cloudasset.owner
roles:cloudasset.owner
policy:cloudasset.owner
可能匹配其他角色。例如,向主帐号 user:cloudasset.owner@mycompany.com
授予角色时。使用 roles
将搜索限制为角色。
示例:按角色查询
查找指定
owner
角色的所有 IAM 允许政策绑定。policy:roles/owner roles:roles/owner roles=roles/owner
查找将所有者角色分配给
amy@mycompany.com
的所有 IAM 允许政策绑定:policy:(roles/owner amy@mycompany.com)
查找将
compute.admin
角色分配给电子邮件地址包含john
一词的主账号的所有 IAM 允许政策绑定:policy:(roles/compute.admin john)
查找向前缀为“swe”或“sde”的用户授予
viewer
角色的所有 IAM 允许政策绑定。policy:(roles/viewer (swe* OR sde*))
IAM Conditions
IAM 允许政策绑定可能包含 condition
对象,可让您为 Google Cloud 资源定义和强制执行基于属性的条件访问权限控制。如需了解详情,请参阅 IAM Conditions 概览。
您可以使用以下语法将查询限制为允许与特定条件相关的政策:
policy:condition_information
示例:按条件查询
查找指定条件(其标题/说明中包含字词“myCondition”)的所有 IAM 允许政策绑定:
policy:myCondition
查找指定条件(其表达式包含“request.time”属性)的所有 IAM 允许政策绑定:
policy:"request.time"
按包含的权限查询 IAM 允许政策
允许政策中的角色可以包含权限列表。如需了解详情,请参阅 IAM 权限参考文档。您可以将查询限制为允许使用包含特定权限的政策。查询表达式采用以下格式:
- 完全匹配:
policy.role.permissions=QUERY
- 部分匹配:
policy.role.permissions:QUERY
示例:按权限查询
查找包含
compute.instances.create
权限的所有 IAM 允许政策绑定:policy.role.permissions:compute.instances.create policy.role.permissions=compute.instances.create
查找包含
compute.instances
相关权限的所有 IAM 允许政策绑定:policy.role.permissions:compute.instances
查找包含权限
cloudasset.assets.export...
(例如cloudasset.assets.exportAssets
和cloudasset.assets.exportIamPolicyAnalysis
)的所有 IAM 允许政策绑定:policy.role.permissions:cloudasset.assets.export*
查找授予某人更改 IAM 允许政策权限的所有 IAM 允许政策绑定:
policy.role.permissions:setIamPolicy
查找具有同时包含
compute.instances.create
和compute.disks.create
权限的角色的所有 IAM 允许政策绑定:policy.role.permissions:(compute.instances.create compute.disks.create)
查找包含
compute.instances.create
权限的所有 IAM 允许政策绑定并指定用户amy
:policy.role.permissions:compute.instances.create policy:amy policy.role.permissions=compute.instances.create policy:amy
按关联资源查询 IAM 允许政策
执行搜索时,您可以指定完整资源名称,以仅搜索针对资源直接设置的允许政策。您还可以指定项目、文件夹或组织,以仅搜索针对位于给定项目/文件夹/组织下的资源设置的允许政策。查询表达式采用以下格式:
完全匹配:
resource=QUERY
project=QUERY
folders=QUERY
organization=QUERY
部分匹配:
resource:QUERY
project:QUERY
folders:QUERY
organization:QUERY
示例:按关联资源查询
查找针对完整资源名称完全匹配
//cloudresourcemanager.googleapis.com/projects/myproject
的资源直接设置的所有 IAM 允许政策绑定:resource=//cloudresourcemanager.googleapis.com/projects/myproject
查找在完整资源名称包含
myproject
一词的资源上直接设置的所有 IAM 允许政策绑定:resource:myproject
查找针对完整资源名称包含带有给定前缀
myproj
的字词的资源直接设置的所有 IAM 允许政策绑定:resource:myproj*
查找在给定服务类型的资源上直接设置的所有 IAM 允许政策绑定:
resource:cloudresourcemanager
查找在
myproject
或myfolder
上设置的所有 IAM 允许政策绑定:resource:(myproject OR myfolder)
查找在
cloudresourcemanager
资源上设置的所有 IAM 允许政策绑定,并将所有者角色分配给gmail.com
用户:resource:cloudresourcemanager policy:(roles/owner gmail.com)
查找针对
project
编号为123
的资源设置的所有 IAM 允许政策绑定:project:123
查找对
folder
中包含的资源(编号为123
)设置的所有 IAM 允许政策绑定:folders:123
查找针对
organization
编号为123
的资源设置的所有 IAM 允许政策绑定:organization:123
按自由文本查询 IAM 允许政策
您也可以在不指定字段的情况下使用自由文本查询。只要存在与查询匹配的可搜索字段(例如允许政策绑定字段或资源字段),响应就会返回允许政策。
示例:按自由文本查询
在
scope
中查找其元数据字段(例如,允许政策绑定或资源字段)包含Important
的所有 IAM 允许政策绑定:Important
在
scope
中查找其元数据字段(例如允许政策绑定或资源字段)包含import
作为任意字词的前缀的所有 IAM 允许政策绑定:import*