搜索 IAM 政策

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

准备工作

搜索政策

控制台

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

  1. 转到 Cloud Console 中的 Asset Inventory 页面。
    转到“Asset Inventory”页面
  2. 要设置搜索范围,请打开菜单栏中的“项目”列表框,然后选择要查询的组织、文件夹或项目。
  3. 选择 IAM 政策标签页。
  4. 如需搜索政策,您可以使用预设查询或构建自己的查询。
    • 如下使用预设查询,请从过滤结果窗格上的查询预设中选择选项。如需过滤结果,请从过滤条件中选择选项。
    • 如需构建您自己的查询,请在过滤条件栏中输入查询文本。选择文本框,然后系统会显示可搜索字段的列表。政策搜索支持多个字段。详细了解查询语法

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

如需以 gcloud 命令行工具命令来查看查询,请选择查看查询

如需导出结果,请选择下载 CSV

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 \
  --asset-types=ASSET_TYPES,… \
  --order-by=ORDER_BY \
  --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 政策结构,请参阅了解政策

    示例:

    • 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 政策绑定。
    • roles:roles/compute.admin,查找指定 Compute Admin 角色的 IAM 政策绑定。
    • memberTypes:user,查找包含“user”主帐号类型的 IAM 政策绑定。
  • (可选)ASSET_TYPES:Identity and Access Management 政策所关联至的资产类型的列表。如果留空,它将搜索关联至所有可搜索的资产类型的 Identity and Access Management 政策。此外,还支持正则表达式。例如:

    • 关联至资产类型的 "compute.googleapis.com.*" 快照 IAM 政策以 "compute.googleapis.com" 开头。
    • 关联至资产类型的 ".*Instance" 快照 IAM 政策以 "Instance" 结尾。
    • 关联至资产类型的 ".*Instance.*" 快照 IAM 政策包含 "Instance"

    如需查看所有支持的正则表达式语法,请参阅 RE2。如果正则表达式与任何支持的资产类型均不匹配,则将返回 INVALID_ARGUMENT 错误。

  • (可选)ORDER_BY:指定结果排序顺序的以逗号分隔的字段列表。默认顺序是升序。在字段名称后添加 " DESC" 可指示降序顺序。多余空格会被忽略。示例:"assetType DESC, resource"。响应中只有单一原始字段是可排序的:

    • resource
    • assetType
    • project

    不支持所有其他字段,例如重复字段(例如 folders)和非原始字段(例如 policy)。

  • (可选)PAGE_SIZE:搜索结果分页的页面大小。最大值是 500。如果该值设为 0,将选择相应默认值。

以下是一个示例 gcloud 命令:

  • 查找您的 organizations/123456 中包含 mycompany.com 网域的所有 IAM 政策绑定:

    gcloud asset search-all-iam-policies \
      --scope=organizations/123456 \
      --query='policy:"domain:mycompany.com"'
    
  • 查找您的 organizations/123456myuser@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 方法,请执行以下操作:

  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. 使用以下命令为您的帐号生成身份验证令牌:

    TOKEN=$(gcloud auth application-default print-access-token)
    
  6. 您现在可以使用 curl 命令查询 IAM 政策。

    PAGE_SIZE=PAGE_SIZE
    PAGE_TOKEN="PAGE_TOKEN"
    SCOPE="SCOPE"
    QUERY="QUERY"
    ASSET_TYPES="ASSET_TYPES,…"
    ORDER_BY="ORDER_BY"
    curl -s -G \
        -H "Authorization: Bearer $TOKEN" \
        -d "page_size=$PAGE_SIZE" \
        -d "page_token=$PAGE_TOKEN" \
        -d "scope=$SCOPE" \
        -d "asset_types=$ASSET_TYPES,…" \
        -d "order_by=$ORDER_BY" \
        --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 政策结构,请参阅了解政策

    示例:

    • 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 政策绑定。
    • roles:roles/compute.admin,查找指定 Compute Admin 角色的 IAM 政策绑定。
    • memberTypes:user,查找包含“user”主帐号类型的 IAM 政策绑定。
  • (可选)ASSET_TYPES:Identity and Access Management 政策所关联至的资产类型的列表。如果留空,它将搜索关联至所有可搜索的资产类型的 Identity and Access Management 政策。此外,还支持正则表达式。例如:

    • 关联至资产类型的 "compute.googleapis.com.*" 快照 IAM 政策以 "compute.googleapis.com" 开头。
    • 关联至资产类型的 ".*Instance" 快照 IAM 政策以 "Instance" 结尾。
    • 关联至资产类型的 ".*Instance.*" 快照 IAM 政策包含 "Instance"

    如需查看所有支持的正则表达式语法,请参阅 RE2。如果正则表达式与任何支持的资产类型均不匹配,则将返回 INVALID_ARGUMENT 错误。

  • (可选)ORDER_BY:指定结果排序顺序的以逗号分隔的字段列表。默认顺序是升序。在字段名称后添加 " DESC" 可指示降序顺序。多余空格会被忽略。示例:"assetType DESC, resource"。响应中只有单一原始字段是可排序的:

    • resource
    • assetType
    • project

    不支持所有其他字段,例如重复字段(例如 folders)和非原始字段(例如 policy)。

  • (可选)PAGE_SIZE:搜索结果分页的页面大小。最大值是 2000。如果该值设为 0,将选择相应默认值。

  • (可选)PAGE_TOKEN:表示对此方法的上一次调用的下一批结果的令牌。page_token 必须与上一次调用的响应中 next_page_token 的值相同。

客户端库和 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 分配 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 Conditions

IAM 政策绑定可能包含 condition 对象,后者允许您为 Google Cloud 资源定义和实施基于特性的条件访问控制。如需了解详情,请参阅 IAM 条件概览

您可以使用以下语法将查询范围限制为与特定条件相关:

policy:condition_information
示例:按条件查询
  • 查找指定条件的所有 IAM 政策绑定,其标题/描述中应包含字词“myCondition”:

    policy:myCondition
    
  • 查找指定条件的所有 IAM 政策绑定,其表达式中应包含“request.time”特性:

    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 权限并指定用户 amy 的所有 IAM 政策绑定:

    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 资源上设置并将 Owner 角色分配给 gmail.com 用户的所有 IAM 政策绑定:

    resource:cloudresourcemanager policy:(roles/owner gmail.com)
    
  • 查找在 project 编号为 123 的资源上设置的所有 IAM 策略绑定:

    project:123
    
  • 查找在编号为 123folder 中包含的资源上设置的所有 IAM 策略绑定:

    folders:123
    
  • 查找在 organization 编号为 123 的资源上设置的所有 IAM 策略绑定:

    organization:123
    

按自由文本查询 IAM 政策

您也可以直接使用自由文本查询,而无需指定字段。只要有可搜索字段(例如政策绑定字段或资源字段)与查询匹配,响应就会返回政策。

示例:按自由文本查询

  • 查找您的 scope 中元数据字段(例如,政策绑定、资源字段)包含 Important 一词的所有 IAM 政策绑定:

    Important
    
  • 查找您的 scope 中元数据字段(例如,政策绑定、资源字段)包含任何词前缀的 import 的所有 IAM 政策绑定:

    import*