搜索资源上的 IAM 允许政策

您可以搜索项目、文件夹或组织中资源的 IAM 允许政策,并使用查询过滤返回的结果。

准备工作

  1. 在您运行 Cloud Asset Inventory 命令的项目中启用 Cloud Asset Inventory API。

    启用 Cloud Asset Inventory API

  2. 确保您的账号拥有调用 Cloud Asset Inventory API 的正确角色。如需了解每种通话类型的各项权限,请参阅权限

构建查询

在构建查询之前,最好先从指定查询的搜索请求开始。使用完整响应中的字段和值,通过搜索查询语法创建查询,并对其进行优化,直到返回所需的结果。

如需详细了解可在查询中使用的字段,请参阅 IamPolicySearchResult 参考文档

在构建查询时,请注意以下限制:

  • policy 字段是一个嵌套对象,因此只能与 : 运算符搭配使用。

  • 并非所有资产类型都可搜索。请参阅资源类型,确认搜索 API 中是否没有某项服务。

您还可以使用以下其他字段将结果限制为特定主账号类型、权限或角色:

字段 说明
memberTypes

包含以下 IAM 主账号类型之一:

  • user
  • group
  • domain
  • serviceAccount
  • allUsers
  • allAuthenticatedUsers
示例
memberTypes=user
policy.role.permissions

包含特定的 IAM 权限

示例
policy.role.permissions=storage.buckets.create
roles

包含特定 IAM 角色

示例
roles=roles/storage.objectAdmin

搜索 IAM 允许政策

在构建查询之前,最好先从指定查询的搜索请求开始。使用完整响应中的字段和值,通过搜索查询语法创建查询,并对其进行优化,直到返回所需的结果。

控制台

如需搜索 IAM 允许政策元数据,请完成以下步骤。

  1. 前往 Google Cloud 控制台中的 Asset Inventory 页面。

    前往“Asset Inventory”

  2. 切换到要搜索的项目、文件夹或组织。
  3. 点击 IAM 政策标签页。
  4. 如需搜索允许政策,请在过滤条件字段中输入查询。如需了解如何编写搜索查询,请参阅 搜索查询语法

    为方便您构建查询,您可以点击过滤条件字段,以显示可供搜索的字段并将其添加到查询中。

执行搜索后,与查询匹配的允许政策会列在结果表中。双击查询即可修改,或者使用过滤结果窗格应用快速查询预设,或按特定条件限制搜索结果。

如需以 Google Cloud CLI 命令的形式来查看查询,请点击查看查询

如需导出结果,请点击下载 CSV

gcloud

gcloud asset search-all-iam-policies \
    --scope=SCOPE_PATH \
    --query="QUERY" \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --order-by="ORDER_BY"

请提供以下值:

  • SCOPE_PATH:请使用以下某个值:

    允许使用的值包括:

    • projects/PROJECT_ID,其中 PROJECT_ID 是具有您要搜索的 IAM 允许政策的资产所在项目的 ID。
    • projects/PROJECT_NUMBER,其中 PROJECT_NUMBER 是具有您要搜索的 IAM 允许政策的项目的编号。

      如何查找 Google Cloud 项目编号

      Google Cloud 控制台

      如需查找 Google Cloud 项目编号,请完成以下步骤:

      1. 前往 Google Cloud 控制台中的欢迎页面。

        前往“欢迎”页面

      2. 点击菜单栏中的切换器列表框。
      3. 从列表框中选择您的组织,然后搜索您的项目名称。 项目名称、项目编号和项目 ID 会显示在欢迎标头附近。

        最多可显示 4,000 个资源。如果您没有看到要查找的项目,请前往管理资源页面,然后使用该项目的名称过滤列表。

      gcloud CLI

      您可以使用以下命令检索 Google Cloud 项目编号:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID,其中 FOLDER_ID 是包含您要搜索的具有 IAM 允许政策的资产的文件夹的 ID。

      如何查找 Google Cloud 文件夹的 ID

      Google Cloud 控制台

      如需查找 Google Cloud 文件夹的 ID,请完成以下步骤:

      1. 前往 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器列表框。
      3. 从列表框中选择您的组织。
      4. 搜索文件夹名称。文件夹 ID 会显示在文件夹名称旁边。

      gcloud CLI

      您可以使用以下命令检索组织级层文件夹的 ID: Google Cloud

      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。为此,请使用顶级文件夹的 ID 运行以下命令:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID,其中 ORGANIZATION_ID 是具有您要搜索的 IAM 允许政策的资产所属组织的 ID。

      如何查找 Google Cloud 组织的 ID

      Google Cloud 控制台

      如需查找 Google Cloud 组织的 ID,请完成以下步骤:

      1. 前往 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器列表框。
      3. 从列表框中选择您的组织。
      4. 点击全部标签页。组织 ID 显示在组织名称旁边。

      gcloud CLI

      您可以使用以下命令检索 Google Cloud 组织的 ID:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • QUERY:可选。查询表达式。如果未指定或为空,则在指定范围内搜索所有资源。如需了解如何编写搜索查询,请参阅搜索查询语法
  • ASSET_TYPE_#:可选。以英文逗号分隔的 可搜索资产类型列表。 支持 RE2 兼容的正则表达式。如果正则表达式与任何支持的资源类型均不匹配,则会返回 INVALID_ARGUMENT 错误。如果未指定 --asset-types,则返回所有资源类型。
  • ORDER_BY:可选。指定结果排序顺序的以逗号分隔的字段列表。默认顺序是升序。 在字段名称后添加 DESC 可指示降序顺序。如需了解哪些字段可用于排序,请参阅 参考文档

您可以使用 --format--flatten 标志来设置 gcloud CLI 输出的格式。

如需了解所有选项,请参阅 gcloud CLI 参考文档

示例

运行以下命令,以获取 my-project 项目中所有 Compute Engine 实例 (compute.googleapis.com/Instance) 的列表,这些实例通过 IAM 允许政策与用户 alex@example.com 绑定。结果按资源 (resource DESC) 降序排列。

gcloud asset search-all-iam-policies \
    --scope=projects/my-project \
    --query="policy:\"user:alex@example.com\"" \
    --asset-types=compute.googleapis.com/Instance \
    --order-by="resource DESC"

示例响应

---
assetType: compute.googleapis.com/Instance
folders:
- folders/0000000000000
organization: organizations/0000000000000
policy:
  bindings:
  - members:
    - user:alex@example.com
    role: roles/compute.viewer
  - members:
    - user:alex@example.com
    role: roles/editor
  - members:
    - user:alex@example.com
    role: roles/owner
project: projects/0000000000000
resource: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/debian

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:searchAllIamPolicies

请求 JSON 正文:

{
  "query": "QUERY",
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],