搜索 IAM 允许政策

借助 Cloud Asset API,您可以使用自定义查询语言来搜索项目、文件夹或组织中的 Identity and Access Management (IAM) 允许政策。

准备工作

搜索允许政策

控制台

如需搜索所有 IAM 允许政策,请完成以下步骤。

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

    前往“Asset Inventory”

  2. 要设置搜索范围,请打开菜单栏中的“项目”列表框,然后选择要查询的组织、文件夹或项目。

  3. 选择 IAM 政策标签页。

  4. 如需搜索允许政策,您可以使用预设查询或自行构建查询。

    • 如需使用预设查询,请在过滤结果窗格上的查询预设中选择选项。如需过滤结果,请从过滤条件中选择选项。

    • 如需构建您自己的查询,请在过滤条件栏中输入查询文本。选择文本框,随即会显示可搜索字段的列表。政策搜索支持多个字段。详细了解查询语法

结果表中会列出与查询匹配的允许政策。

如需以 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 项目编号,请完成以下步骤:

      1. 前往 Google Cloud 控制台中的信息中心页面。

        前往信息中心

      2. 点击菜单栏中的切换器框。
      3. 请选择:框中选择您的组织,然后搜索项目名称。
      4. 点击项目名称以切换到该项目。项目编号会显示在项目信息卡片中。

      gcloud CLI

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

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      如何查找 Google Cloud 文件夹 ID

      控制台

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

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器框。
      3. 点击请选择:复选框,然后选择您的组织。
      4. 搜索您的文件夹名称。文件夹 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,请完成以下步骤:

      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:可选。查询语句。如需了解详情,请参阅查询语法。 如果未指定或为空,则会搜索指定 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 方法,请执行以下操作:

  1. 如果您尚未配置项目的 OAuth 同意屏幕,则需要执行此操作。OAuth 同意屏幕需要电子邮件地址和产品名称。

    1. 转到项目的 OAuth 同意屏幕。

      配置同意屏幕

    2. 输入您要显示的应用名称

    3. 支持电子邮件地址下,选择要显示为公开联系人的电子邮件地址。这必须是您的电子邮件地址或您拥有的某个 Google 群组。

    4. 根据需要添加任何可选详细信息。

    5. 点击保存。

  2. 为您的项目创建 OAuth 令牌。如需了解详情,请参阅设置 OAuth 2.0

    1. 转到“创建 OAuth 客户端 ID”页面。

      创建 OAuth 客户端

    2. 选择桌面应用作为应用类型

    3. 点击创建

  3. 下载 client_secret.json 文件。

    1. 转到“凭据”页面

    2. 在新客户端 ID 的右侧,点击 下载 JSON

    3. 将文件安全地存储在只有您的应用可以访问的位置。

  4. 通过以下命令使用 JSON 文件登录。

    gcloud auth application-default login --client-id-file=YOUR_JSON_FILE
    

    此命令会提示您打开链接。确保该页面显示了您在 OAuth 同意屏幕中设置的应用名称

  5. 您现在可以使用 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 项目编号,请完成以下步骤:

        1. 前往 Google Cloud 控制台中的信息中心页面。

          前往信息中心

        2. 点击菜单栏中的切换器框。
        3. 请选择:框中选择您的组织,然后搜索项目名称。
        4. 点击项目名称以切换到该项目。项目编号会显示在项目信息卡片中。

        gcloud CLI

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

        gcloud projects describe PROJECT_ID --format="value(projectNumber)"

      • folders/FOLDER_ID

        如何查找 Google Cloud 文件夹 ID

        控制台

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

        1. 转到 Google Cloud 控制台。

          前往 Google Cloud 控制台

        2. 点击菜单栏中的切换器框。
        3. 点击请选择:复选框,然后选择您的组织。
        4. 搜索您的文件夹名称。文件夹 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,请完成以下步骤:

        1. 转到 Google Cloud 控制台。

          前往 Google Cloud 控制台

        2. 点击菜单栏中的切换器框。
        3. 点击请选择:复选框,然后选择您的组织。
        4. 点击全部标签页。组织 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 允许政策绑定支持五种类型的主帐号

  1. Google 账号,例如 user:user@gmail.com

  2. Google 群组,例如 group:devs@googlegroups.com

  3. Cloud Identity 和 G Suite 网域,例如 domain:google.com

  4. 服务账号,例如 serviceAccount:my-other-app@appspot.gserviceaccount.com

  5. 特殊标识符,例如 allUsersallAuthenticatedUsers

您可以使用以下语法将查询限制为允许与特定用户相关的政策:

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
    
  • 查找指定用户 AmyJohn 的所有 IAM 允许政策绑定:

    policy:(amy john)
    
  • 查找指定用户 AmyJohn 的所有 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.commycompany.com 网域的所有 IAM 允许政策绑定:

    policy:(amy@mycompany.com OR "domain:mycompany.com")
    

角色

IAM 允许政策绑定支持不同类型的角色。所有 IAM 角色名称都以 roles/ 前缀开头。

  1. 基本角色:在引入 IAM 之前已存在三个角色:Owner (roles/owner)、Editor (roles/editor) 和 Viewer (roles/viewer)。

  2. 预定义角色:IAM 提供额外的预定义角色,这些角色授予对不同资源的精细访问权限。查看所有预定义角色

  3. 自定义角色:用户定义的 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.exportAssetscloudasset.assets.exportIamPolicyAnalysis)的所有 IAM 允许政策绑定:

    policy.role.permissions:cloudasset.assets.export*
    
  • 查找授予某人更改 IAM 允许政策权限的所有 IAM 允许政策绑定:

    policy.role.permissions:setIamPolicy
    
  • 查找具有同时包含 compute.instances.createcompute.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
    
  • 查找在 myprojectmyfolder 上设置的所有 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*