搜索资源的 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

包含特定 <ph type="x-smartling-placeholder"></ph> 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 控制台中的欢迎页面。

        <ph type="x-smartling-placeholder"></ph> 前往“欢迎”

      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 控制台。

        <ph type="x-smartling-placeholder"></ph> 前往 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。为此, 使用顶级文件夹的 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 控制台。

        <ph type="x-smartling-placeholder"></ph> 前往 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) 的列表,其中包含将这些实例绑定到用户 alex@example.com 的 IAM 允许政策。结果按资源 (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",
    "..."
  ],
  "orderBy": "ORDER_BY",
  "pageSize": "PAGE_SIZE",
  "pageToken": "PAGE_TOKEN"
}

请提供以下值:

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

    允许使用的值包括:

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

      如何查找 Google Cloud 项目编号

      Google Cloud 控制台

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

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

        <ph type="x-smartling-placeholder"></ph> 前往“欢迎”

      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

      您可以使用以下命令检索位于组织级层的 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。为此, 使用顶级文件夹的 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 控制台。

        <ph type="x-smartling-placeholder"></ph> 前往 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 错误。时间 未指定 assetTypes,则返回所有素材资源类型。
  • ORDER_BY:可选。指定结果排序顺序的以逗号分隔的字段列表。默认顺序是升序。 在字段名称后添加 DESC 可指示降序顺序。如需了解哪些字段可以排序,请参阅参考文档
  • PAGE_SIZE:可选。要返回的结果数(每个 页面。最大值是 500。如果该值设为 0 或负值,系统会选择相应的默认值。系统会返回 nextPageToken 以检索后续结果。

  • PAGE_TOKEN:可选。长请求响应会分开显示 多个页面。如果未指定 pageToken,则返回第一页。 后续页面可通过使用上一个响应的 nextPageToken 来调用,如下所示: pageToken 值。

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

命令示例

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

curl(Linux、macOS 或 Cloud Shell)

<ph type="x-smartling-placeholder">
curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "query": "policy:\"user:alex@example.com\"",
            "assetTypes": ["compute.googleapis.com/Instance"],
            "orderBy": "resource DESC"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

PowerShell (Windows)

<ph type="x-smartling-placeholder">
$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "query": "policy:\"user:alex@example.com\"",
  "assetTypes": ["compute.googleapis.com/Instance"],
  "orderBy": "resource DESC"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies" | Select-Object -Expand Content

示例响应

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

C#

如需了解如何安装和使用 Cloud Asset Inventory 的客户端库,请参阅 Cloud Asset Inventory 客户端库

如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证


using Google.Api.Gax;
using Google.Cloud.Asset.V1;
using System.Collections.Generic;
using System.Linq;

public class SearchAllIamPoliciesSample
{
    public SearchAllIamPoliciesResponse SearchAllIamPolicies(string scope, string query)
    {
        // Create the client.
        AssetServiceClient client = AssetServiceClient.Create();

        // Build the request.
        SearchAllIamPoliciesRequest request = new SearchAllIamPoliciesRequest
        {
            Scope = scope,
            Query = query,
        };

        // Call the API.
        PagedEnumerable<SearchAllIamPoliciesResponse, IamPolicySearchResult> response = client.SearchAllIamPolicies(request);

        // Return the first page.
        IEnumerable<SearchAllIamPoliciesResponse> byPages = response.AsRawResponses();
        return byPages.First();
    }
}

Go

如需了解如何安装和使用 Cloud Asset Inventory 的客户端库,请参阅 Cloud Asset Inventory 客户端库

如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证


// Sample search-all-iam-policies searches all IAM policies within the given scope.
package main

import (
	"context"
	"flag"
	"fmt"
	"log"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	"google.golang.org/api/iterator"
)

func main() {
	scope := flag.String("scope", "", "Scope of the search.")
	query := flag.String("query", "", "Query statement.")
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	req := &assetpb.SearchAllIamPoliciesRequest{
		Scope: *scope,
		Query: *query,
	}
	it := client.SearchAllIamPolicies(ctx, req)
	for {
		policy, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			log.Fatal(err)
		}
		fmt.Println(policy)
	}
}

Java

如需了解如何安装和使用 Cloud Asset Inventory 的客户端库,请参阅 Cloud Asset Inventory 客户端库

如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.InvalidArgumentException;
import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.AssetServiceClient.SearchAllIamPoliciesPagedResponse;
import com.google.cloud.asset.v1.SearchAllIamPoliciesRequest;
import java.io.IOException;

public class SearchAllIamPoliciesExample {

  // Searches for all the iam policies within the given scope.
  public static void searchAllIamPolicies(String scope, String query) {
    // TODO(developer): Replace these variables before running the sample.
    int pageSize = 0;
    String pageToken = "";

    SearchAllIamPoliciesRequest request =
        SearchAllIamPoliciesRequest.newBuilder()
            .setScope(scope)
            .setQuery(query)
            .setPageSize(pageSize)
            .setPageToken(pageToken)
            .build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      SearchAllIamPoliciesPagedResponse response = client.searchAllIamPolicies(request);
      System.out.println("Search completed successfully:\n" + response.getPage().getValues());
    } catch (IOException e) {
      System.out.println(String.format("Failed to create client:%n%s", e.toString()));
    } catch (InvalidArgumentException e) {
      System.out.println(String.format("Invalid request:%n%s", e.toString()));
    } catch (ApiException e) {
      System.out.println(String.format("Error during SearchAllIamPolicies:%n%s", e.toString()));
    }
  }
}

Node.js

如需了解如何安装和使用 Cloud Asset Inventory 的客户端库,请参阅 Cloud Asset Inventory 客户端库

如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const scope = '';
// const query = '';
// const pageSize = 0;
// const pageToken = '';

const util = require('util');
const {AssetServiceClient} = require('@google-cloud/asset');

const client = new AssetServiceClient();
const projectId = await client.getProjectId();

async function searchAllIamPolicies() {
  const request = {
    scope: `projects/${projectId}`,
    query: query,
    pageSize: pageSize,
    pageToken: pageToken,
  };
  const options = {
    autoPaginate: false,
  };

  // Handle the operation using the promise pattern.
  const result = await client.searchAllIamPolicies(request, options);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));
}

PHP

如需了解如何安装和使用 Cloud Asset Inventory 的客户端库,请参阅 Cloud Asset Inventory 客户端库

如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

use Google\Cloud\Asset\V1\Client\AssetServiceClient;
use Google\Cloud\Asset\V1\SearchAllIamPoliciesRequest;

/**
 * @param string $scope      Scope of the search
 * @param string $query      (Optional) Query statement
 * @param int    $pageSize   (Optional) Size of each result page
 * @param string $pageToken  (Optional) Token produced by the preceding call
 */
function search_all_iam_policies(
    string $scope,
    string $query = '',
    int $pageSize = 0,
    string $pageToken = ''
) {
    // Instantiate a client.
    $asset = new AssetServiceClient();

    // Run request
    $request = (new SearchAllIamPoliciesRequest())
        ->setScope($scope)
        ->setQuery($query)
        ->setPageSize($pageSize)
        ->setPageToken($pageToken);
    $response = $asset->searchAllIamPolicies($request);

    // Print the resources that the policies are set on
    foreach ($response->getPage() as $policy) {
        print($policy->getResource() . PHP_EOL);
    }
}

Python

如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库

如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

from google.cloud import asset_v1

# TODO scope = 'Scope of the search'
# TODO query = 'Query statement'
# TODO page_size = Size of each result page

client = asset_v1.AssetServiceClient()
response = client.search_all_iam_policies(
    request={"scope": scope, "query": query, "page_size": page_size}
)
for policy in response:
    print(policy)
    break

Ruby

如需了解如何安装和使用 Cloud Asset Inventory 的客户端库,请参阅 Cloud Asset Inventory 客户端库

如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

require "google/cloud/asset"

# scope = 'SCOPE_OF_THE_QUERY'
# query = 'QUERY_STATEMENT'
# page_size = 'SIZE_OF_EACH_RESULT_PAGE'
# page_token = 'TOKEN_PRODUCED_BY_THE_PRECEDING_CALL'
asset_service = Google::Cloud::Asset.asset_service

response = asset_service.search_all_iam_policies(
  scope:      scope,
  query:      query,
  page_size:  page_size,
  page_token: page_token
)
# Do things with the response
response.page.each do |policy|
  puts policy
end

其他搜索示例

以下代码示例显示了同时针对这两个国家/地区 gcloud 和 REST 帮助您构建自己的搜索。

采用 IAM 允许政策的资源

以下示例展示了如何搜索包含以下内容的所有资源: my-project 项目中的 IAM 允许政策。

gcloud

gcloud asset search-all-iam-policies \
    --scope=projects/my-project \
    --flatten="policy.bindings[].members[]" \
    --format="table(resource, policy.bindings.role, policy.bindings.members)"

REST

HTTP 方法和网址:

GET https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

命令示例

curl(Linux、macOS 或 Cloud Shell)

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

PowerShell (Windows)

<ph type="x-smartling-placeholder">
$cred = gcloud auth print-access-token

$headers = @{ 
  "Authorization" = "Bearer $cred"
}


Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies" | Select-Object -Expand Content

采用 IAM 允许政策的命名资源

以下示例展示了如何在以下位置搜索所有带有 example 的资源: 具有 IAM 允许政策的名称。

gcloud

gcloud asset search-all-iam-policies \
    --scope=projects/my-project \
    --query="resource:example"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

请求 JSON 正文:

{
  "pageSize": 1,
  "query": "resource:example"
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "pageSize": 1,
            "query": "resource:example"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "pageSize": 1,
  "query": "resource:example"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies" | Select-Object -Expand Content

项目、文件夹和组织的 IAM 允许政策

以下示例展示了如何搜索 ID 为 my-organization-id 的组织中的所有项目和文件夹的所有 IAM 许可政策。

如何查找 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))"

gcloud

gcloud asset search-all-iam-policies \
    --scope=organizations/my-organization-id \
    --asset-types=cloudresourcemanager.*

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

请求 JSON 正文:

{
  "assetTypes": "cloudresourcemanager.*",
  "pageSize": 1,
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetTypes": "cloudresourcemanager.*",
            "pageSize": 1,
          }' \
     https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetTypes": "cloudresourcemanager.*",
  "pageSize": 1,
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies" | Select-Object -Expand Content

项目的所有者

以下示例展示了如何搜索项目 my-project 中具有 Owner 角色 (roles/owner) 的主账号。

此请求仅返回已被授予 项目。不包括通过如下方式继承 Owner 角色的主账号: 政策继承

gcloud

gcloud asset search-all-iam-policies \
    --scope=projects/my-project \
    --query="roles:roles/owner" \
    --asset-types=cloudresourcemanager.* \
    --flatten="policy.bindings[].members[]" \
    --format="table(policy.bindings.members)"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

请求 JSON 正文:

{
  "assetTypes": "cloudresourcemanager.*",
  "pageSize": 1,
  "query": "roles:roles/owner"
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

<ph type="x-smartling-placeholder">
curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetTypes": "cloudresourcemanager.*",
            "pageSize": 1,
            "query": "roles:roles/owner"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetTypes": "cloudresourcemanager.*",
  "pageSize": 1,
  "query": "roles:roles/owner"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies" | Select-Object -Expand Content

主账号具有所有者角色的项目

以下示例展示了如何搜索alex@example.com 在以下位置拥有 Owner 角色 (roles/owner): ID 为 my-organization-id 的组织。

此请求仅返回已向 alex@example.com 授予 Owner 角色的项目。不包括“alex@example.com”拥有的项目 继承了 Owner 角色。

如何查找 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))"

gcloud

gcloud asset search-all-iam-policies \
    --scope=organizations/my-organization-id \
    --query="policy:(roles/owner alex@example.com)" \
    --asset-types=cloudresourcemanager.googleapis.com/Project \
    --format="table(resource)"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

请求 JSON 正文:

{
  "assetTypes": "cloudresourcemanager.googleapis.com/Project",
  "pageSize": 1,
  "query": "policy:(roles/owner alex@example.com)"
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

<ph type="x-smartling-placeholder">
curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetTypes": "cloudresourcemanager.googleapis.com/Project",
            "pageSize": 1,
            "query": "policy:(roles/owner alex@example.com)"
          }' \
     https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

PowerShell (Windows)

<ph type="x-smartling-placeholder">
$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetTypes": "cloudresourcemanager.googleapis.com/Project",
  "pageSize": 1,
  "query": "policy:(roles/owner alex@example.com)"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies" | Select-Object -Expand Content

主账号在项目中拥有的角色

以下示例展示了如何搜索 alex@example.com 拥有的角色 my-project 项目。

此请求仅返回 alex@example.com 在 项目。但不包括 alex@example.com 继承的角色 政策继承

gcloud

gcloud asset search-all-iam-policies \
    --scope=projects/my-project \
    --query="policy:alex@example.com" \
    --asset-types=cloudresourcemanager.googleapis.com/Project \
    --flatten="policy.bindings[]" \
    --format="table(policy.bindings.role)"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

请求 JSON 正文:

{
  "assetTypes": "cloudresourcemanager.googleapis.com/Project",
  "pageSize": 1,
  "query": "policy:alex@example.com"
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

<ph type="x-smartling-placeholder">
curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetTypes": "cloudresourcemanager.googleapis.com/Project",
            "pageSize": 1,
            "query": "policy:alex@example.com"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetTypes": "cloudresourcemanager.googleapis.com/Project",
  "pageSize": 1,
  "query": "policy:alex@example.com"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies" | Select-Object -Expand Content

主账号对项目的权限

以下示例展示了如何搜索 alex@example.commy-project 项目拥有的权限。

此请求仅返回 alex@example.com 对项目拥有的权限。但不包括alex@example.com继承的权限 通过政策继承实现。

gcloud

gcloud asset search-all-iam-policies \
    --scope=projects/my-project \
    --query="policy:alex@example.com policy.role.permissions:\"\"" \
    --asset-types=cloudresourcemanager.* \
    --format="default(explanation.matchedPermissions)"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

请求 JSON 正文:

{
  "assetTypes": "cloudresourcemanager.*",
  "pageSize": 1,
  "query": "policy:alex@example.com  policy.role.permissions:\"\""
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetTypes": "cloudresourcemanager.*",
            "pageSize": 1,
            "query": "policy:alex@example.com  policy.role.permissions:\"\""
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetTypes": "cloudresourcemanager.*",
  "pageSize": 1,
  "query": "policy:alex@example.com  policy.role.permissions:\"\""
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies" | Select-Object -Expand Content

可以访问 Cloud Storage 存储桶的主体

以下示例展示了如何搜索可以访问 my-project 项目中的 Cloud Storage 存储桶的主体。

gcloud

gcloud asset search-all-iam-policies \
    --scope=projects/my-project \
    --query="policy.role.permissions:storage.buckets" \
    --asset-types=cloudresourcemanager.* \
    --flatten="policy.bindings[].members[]" \
    --format="table(policy.bindings.members)"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

请求 JSON 正文:

{
  "assetTypes": "cloudresourcemanager.*",
  "pageSize": 1,
  "query": "policy.role.permissions:storage.buckets"
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

<ph type="x-smartling-placeholder">
curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetTypes": "cloudresourcemanager.*",
            "pageSize": 1,
            "query": "policy.role.permissions:storage.buckets"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies

PowerShell (Windows)

<ph type="x-smartling-placeholder">
$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetTypes": "cloudresourcemanager.*",
  "pageSize": 1,
  "query": "policy.role.permissions:storage.buckets"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:searchAllIamPolicies" | Select-Object -Expand Content

具有所有者角色的服务账号

以下示例展示了如何使用 Owner 角色 (roles/owner) 拥有 my-organization-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))"

gcloud

此示例使用 `grep` 命令,该命令可在 Cloud Shell 及类似 Unix 的环境中使用 操作系统

gcloud asset search-all-iam-policies \
    --scope=organizations/my-organization-id \
    --query="policy:(roles/owner serviceAccount)" \
    --flatten="policy.bindings[].members[]" \
    --format="table(resource.segment(3):label=RESOURCE_TYPE, resource.basename():label=RESOURCE, policy.bindings.members)" |
    grep serviceAccount

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

请求 JSON 正文:

{
  "pageSize": 1,
  "query": "policy:(roles/owner serviceAccount)"
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "pageSize": 1,
            "query": "policy:(roles/owner serviceAccount)"
          }' \
     https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

PowerShell (Windows)

<ph type="x-smartling-placeholder">
$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "pageSize": 1,
  "query": "policy:(roles/owner serviceAccount)"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies" | Select-Object -Expand Content

具有已授予网域的角色的资源

以下示例展示了如何在 ID 为 my-organization-id 的组织中搜索已向 example.com 网域授予角色的资源。

如何查找 Google Cloud 组织的 ID

Google Cloud 控制台

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

  1. 转到 Google Cloud 控制台。

    <ph type="x-smartling-placeholder"></ph> 前往 Google Cloud 控制台

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

gcloud CLI

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

gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

gcloud

gcloud asset search-all-iam-policies \
    --scope=organizations/my-organization-id \
    --query="policy:\"domain:example.com\"" \
    --flatten="policy.bindings[]" \
    --format="table(resource, policy.bindings.role)"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

请求 JSON 正文:

{
  "pageSize": 1,
  "query": "policy:\"domain:DOMAIN_NAME\""
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

<ph type="x-smartling-placeholder">
curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "pageSize": 1,
            "query": "policy:\"domain:DOMAIN_NAME\""
          }' \
     https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "pageSize": 1,
  "query": "policy:\"domain:DOMAIN_NAME\""
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies" | Select-Object -Expand Content

向所有用户授予角色的资源

以下示例展示了如何搜索已授予 公众(在 ID 为 my-organization-id 的组织中)。

如何查找 Google Cloud 组织的 ID

Google Cloud 控制台

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

  1. 转到 Google Cloud 控制台。

    <ph type="x-smartling-placeholder"></ph> 前往 Google Cloud 控制台

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

gcloud CLI

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

gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

gcloud

gcloud asset search-all-iam-policies \
    --scope=organizations/my-organization-id \
    --query="memberTypes:(allUsers OR allAuthenticatedUsers)" \
    --format="table(resource)"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

请求 JSON 正文:

{
  "pageSize": 1,
  "query": "memberTypes:(allUsers OR allAuthenticatedUsers)"
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "pageSize": 1,
            "query": "memberTypes:(allUsers OR allAuthenticatedUsers)"
          }' \
     https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

PowerShell (Windows)

<ph type="x-smartling-placeholder">
$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "pageSize": 1,
  "query": "memberTypes:(allUsers OR allAuthenticatedUsers)"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies" | Select-Object -Expand Content

可以更改组织中的 IAM 允许政策的主账号

以下示例展示了如何搜索可以更改 ID 为 my-organization-id 的组织中的 IAM 允许政策的主账号。

如何查找 Google Cloud 组织的 ID

Google Cloud 控制台

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

  1. 转到 Google Cloud 控制台。

    <ph type="x-smartling-placeholder"></ph> 前往 Google Cloud 控制台

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

gcloud CLI

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

gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

gcloud

gcloud asset search-all-iam-policies \
    --scope=organizations/my-organization-id \
    --query="policy.role.permissions:(resourcemanager.organizations.setIamPolicy OR resourcemanager.folders.setIamPolicy OR resourcemanager.projects.setIamPolicy)" \
    --format="json(resource, policy.bindings, explanation.matchedPermissions)"

REST

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

请求 JSON 正文:

{
  "pageSize": 1,
  "query": "policy.role.permissions:(resourcemanager.organizations.setIamPolicy OR resourcemanager.folders.setIamPolicy OR resourcemanager.projects.setIamPolicy)"
}

命令示例

curl(Linux、macOS 或 Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "pageSize": 1,
            "query": "policy.role.permissions:(resourcemanager.organizations.setIamPolicy OR resourcemanager.folders.setIamPolicy OR resourcemanager.projects.setIamPolicy)"
          }' \
     https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "pageSize": 1,
  "query": "policy.role.permissions:(resourcemanager.organizations.setIamPolicy OR resourcemanager.folders.setIamPolicy OR resourcemanager.projects.setIamPolicy)"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/organizations/my-organization-id:searchAllIamPolicies" | Select-Object -Expand Content