借助 Cloud Asset API,您可以使用自定义查询语言来搜索项目、文件夹或组织内的 Identity and Access Management (IAM) 政策。
准备工作
- 为您的项目启用 Cloud Asset API
- 向发出请求的用户帐号或服务帐号授予
cloudasset.assets.searchAllIamPolicies
权限。Roles
中列出的基本角色和预定义角色中包含此权限。
调用 SearchAllIamPolicies
gcloud
您可以使用 gcloud asset search-all-iam-policies
命令调用 SearchAllIamPolicies
。您必须运行 Cloud SDK 302.0.0 或更高版本。您可以使用 gcloud version
命令检查您的版本。
gcloud asset search-all-iam-policies \ --scope=SCOPE \ --query=QUERY \ --page-size=PAGE_SIZE
其中:
(可选)SCOPE:范围可以是项目、文件夹或组织。搜索范围仅限于此范围内的 IAM 政策。调用者必须被授予所需范围的
cloudasset.assets.searchAllIamPolicies
权限。如果未指定,将使用已配置的项目属性。如需查找已配置的项目,请运行gcloud config get-value project
。如需更改此设置,请运行gcloud config set project PROJECT_ID
。允许使用的值包括:
projects/PROJECT_ID
(例如,“projects/foo-bar
”)projects/PROJECT_NUMBER
(例如,“projects/12345678
”)folders/FOLDER_NUMBER
(例如,“folders/1234567
”)organizations/ORGANIZATION_NUMBER
(例如,“organizations/123456
”)
(可选)QUERY:查询语句。如需了解详情,请参阅如何构建查询。如果未指定或为空,它将搜索指定
scope
中的所有 IAM 政策。请注意,查询字符串会与每个 IAM 政策绑定进行比较,包括其成员、角色和 IAM 条件。返回的 IAM 政策将仅包含与查询匹配的绑定。如需详细了解 IAM 政策结构,请参阅 IAM 政策文档。示例:
policy:amy@gmail.com
,查找指定用户“amy@gmail.com”的 IAM 政策绑定。policy:roles/compute.admin
,查找指定 Compute Admin 角色的 IAM 政策绑定。policy:comp*
,以查找包含“comp”作为绑定中任何字词的前缀的 IAM 政策绑定。policy.role.permissions:storage.buckets.update
,查找指定包含“storage.buckets.update”权限的角色的 Cloud IAM 政策绑定。请注意,如果调用者对角色包含的权限没有iam.roles.get
访问权限,则指定此角色的政策绑定会从搜索结果中删除。policy.role.permissions:upd*
以查找 IAM,政策绑定将包含“upd”的角色用作绑定中的任何字词的前缀。请注意,如果调用者对角色包含的权限没有iam.roles.get
访问权限,则指定此角色的政策绑定会从搜索结果中删除。resource:organizations/123456
,查找设置在“organizations/123456”上的 IAM 政策绑定。resource=//cloudresourcemanager.googleapis.com/projects/myproject
,查找在名为“myproject”的项目上设置的 IAM 政策绑定。Important
,查找任何可搜索字段(包含的权限除外)中包含“Important”一词的 IAM 政策绑定。resource:(instance1 OR instance2) policy:amy
,查找设置在资源“instance1”或“instance2”上并指定用户“amy”的 IAM 政策绑定。
(可选)PAGE_SIZE:搜索结果分页的页面大小。最大值是 500。如果该值设为
0
,将选择相应默认值。
查找您的
organizations/123456
中包含mycompany.com
网域的所有 IAM 政策绑定:gcloud asset search-all-iam-policies \ --scope='organizations/123456' \ --query='policy:"domain:mycompany.com"'
查找您的
organizations/123456
中向myuser@mycompany.com
授予 Owner (roles/owner
) 基本角色的 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'
API
您可以使用项目的有效 OAuth 令牌调用 SearchAllIamPolicies
。要从 Cloud Shell 或可使用 gcloud
命令的任何控制台调用 SearchAllIamPolicies
方法,请执行以下操作:
如果您尚未配置项目的 OAuth 同意屏幕,则需要进行配置。您将需要在 OAuth 同意屏幕上输入电子邮件地址和产品名称。
- 转到项目的 OAuth 同意屏幕。
配置同意屏幕 - 输入您要显示的应用名称。
- 在支持电子邮件地址下,选择要显示为公开联系人的电子邮件地址。这必须是您的电子邮件地址或您拥有的 Google 群组。
- 根据需要添加任何可选详细信息。
- 点击保存。
- 转到项目的 OAuth 同意屏幕。
为您的项目创建 OAuth 令牌。如需了解详情,请参阅设置 OAuth 2.0。
- 转到“创建 OAuth 客户端 ID”页面。
创建 OAuth 客户端 - 选择桌面应用作为应用类型。
- 点击创建。
- 转到“创建 OAuth 客户端 ID”页面。
下载
client_secret.json
文件。- 转到“凭据”页面。
- 在新的客户端 ID 的右侧,点击下载 JSON。
- 将文件安全地存储在只有您的应用可以访问的位置。
通过以下命令使用 JSON 文件登录。
gcloud auth application-default login --client-id-file=YOUR_JSON_FILE
请注意,此命令将提示您打开链接。确保该页面显示您在 OAuth 同意屏幕中设置的应用名称。
使用以下命令为您的帐号生成身份验证令牌:
TOKEN=$(gcloud auth application-default print-access-token)
您现在可以使用
curl
命令查询 IAM 政策。PAGE_SIZE=PAGE_SIZE PAGE_TOKEN="PAGE_TOKEN" SCOPE="SCOPE" QUERY="QUERY" curl -s -G \ -H "Authorization: Bearer $TOKEN" \ -d "page_size=$PAGE_SIZE" \ -d "page_token=$PAGE_TOKEN" \ --data-urlencode "query=$QUERY" \ "https://cloudasset.googleapis.com/v1/$SCOPE:searchAllIamPolicies"
(可选)SCOPE:范围可以是项目、文件夹或组织。搜索范围仅限于此范围内的 IAM 政策。调用者必须被授予所需范围的
cloudasset.assets.searchAllIamPolicies
权限。允许使用的值包括:
projects/PROJECT_ID
(例如,“projects/foo-bar
”)projects/PROJECT_NUMBER
(例如,“projects/12345678
”)folders/FOLDER_NUMBER
(例如,“folders/1234567
”)organizations/ORGANIZATION_NUMBER
(例如,“organizations/123456
”)
(可选)QUERY:查询语句。如需了解详情,请参阅如何构建查询。如果未指定或为空,它将搜索指定
scope
中的所有 IAM 政策。请注意,查询字符串会与每个 IAM 政策绑定进行比较,包括其成员、角色和 IAM 条件。返回的 IAM 政策将仅包含与查询匹配的绑定。如需详细了解 IAM 政策结构,请参阅 IAM 政策文档。示例:
policy:amy@gmail.com
,查找指定用户“amy@gmail.com”的 IAM 政策绑定。policy:roles/compute.admin
,查找指定 Compute Admin 角色的 IAM 政策绑定。policy:comp*
,以查找包含“comp”作为绑定中任何字词的前缀的 IAM 政策绑定。policy.role.permissions:storage.buckets.update
,查找指定包含“storage.buckets.update”权限的角色的 Cloud IAM 政策绑定。请注意,如果调用者对角色包含的权限没有iam.roles.get
访问权限,则指定此角色的政策绑定会从搜索结果中删除。policy.role.permissions:upd*
以查找 IAM,政策绑定将包含“upd”的角色用作角色权限中的任何字词的前缀。请注意,如果调用者对角色包含的权限没有iam.roles.get
访问权限,则指定此角色的政策绑定会从搜索结果中删除。resource:organizations/123456
,查找设置在“organizations/123456”上的 IAM 政策绑定。resource=//cloudresourcemanager.googleapis.com/projects/myproject
,查找在名为“myproject”的项目上设置的 IAM 政策绑定。Important
,查找任何可搜索字段(包含的权限除外)中包含“Important”一词的 IAM 政策绑定。resource:(instance1 OR instance2) policy:amy
,查找设置在资源“instance1”或“instance2”上并指定用户“amy”的 IAM 政策绑定。
(可选)PAGE_SIZE:搜索结果分页的页面大小。最大值是 2000。如果该值设为
0
,将选择相应默认值。(可选)PAGE_TOKEN:表示对此方法的上一次调用的下一批结果的令牌。
page_token
必须与上一次调用的响应中next_page_token
的值相同。
客户端库和 API 参考文档
如何构建查询
如需详细了解查询语言,请参阅查询语法。
如需详细了解各种实际用例的示例查询,请参阅搜索 IAM 政策示例。
按绑定信息查询 IAM 政策
要搜索 IAM 政策,查询表达式将采用以下格式:
policy: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
示例:按成员查询
查找指定用户
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 政策绑定:
policy:allUsers
查找为所有经过身份验证的用户分配角色的所有 IAM 政策绑定:
policy: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/cloudasset.owner
:
policy:cloudasset.owner
示例:按角色查询
查找指定
owner
角色的所有 IAM 政策绑定。policy:roles/owner
查找向
amy@mycompany.com
分配 Owner 角色的所有 IAM 政策绑定:policy:(roles/owner amy@mycompany.com)
查找将
compute.admin
角色分配给电子邮件地址包含john
的成员的所有 IAM 政策绑定:policy:(roles/compute.admin john)
查找将
viewer
角色授予前缀为“swe”或“sde”的用户的所有 IAM 政策绑定。policy:(roles/viewer (swe* OR sde*))
按包含的权限查询 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
权限并指定用户amy
的所有 IAM 政策绑定。policy.role.permissions:compute.instances.create policy:amy policy.role.permissions=compute.instances.create policy:amy
按资源名称查询 IAM 政策
执行搜索时,您可以指定完整资源名称,以便仅搜索直接在该资源上设置的政策。查询表达式采用以下格式:
- 完全匹配:
resource=QUERY
- 部分匹配:
resource: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
资源上设置并将 Owner 角色分配给gmail.com
用户的所有 IAM 政策绑定:resource:cloudresourcemanager policy:(roles/owner gmail.com)
按自由文本查询 IAM 政策
您也可以直接使用自由文本查询,而无需指定字段。然后,只要有可搜索字段(例如政策绑定字段、资源名称)与查询匹配,它就会返回政策。
示例:按自由文本查询
查找您的
scope
中元数据字段(例如,政策绑定、资源名称)包含Important
一词的所有 IAM 政策绑定:Important
查找您的
scope
中元数据字段(例如,政策绑定、资源名称)包含任何词前缀的import
的所有 IAM 政策绑定:import*