管理已保存的查询

本页面介绍如何创建、管理和运行已保存的政策分析器查询。您可以为一个资产创建最多 200 个已保存的查询。此限制不包括其子项已保存的查询。例如,如果您的组织下有 10 个项目,每个项目最多可以有 200 个已保存的查询,并且该组织最多可以有 200 个已保存的查询。

准备工作

  1. Enable the Cloud Asset API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

所需的角色

如需获得创建和管理已保存的查询所需的权限,请让您的管理员为您授予项目、文件夹或组织的 Cloud Asset Owner (roles/cloudasset.owner) IAM 角色,以便您将查询保存到相应位置。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建和管理已保存的查询所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

创建和管理已保存的查询需要以下权限:

  • cloudasset.savedqueries.create
  • cloudasset.savedqueries.delete
  • cloudasset.savedqueries.get
  • cloudasset.savedqueries.list
  • cloudasset.savedqueries.update

您也可以使用自定义角色或其他预定义角色来获取这些权限。

创建已保存的查询

gcloud

如需在父项目、文件夹或组织中创建已保存的 Policy Analyzer 查询,请使用 gcloud asset saved-queries create 命令。

在使用下面的命令数据之前,请先进行以下替换:

  • SCOPE_RESOURCE_TYPE_PLURAL:您要将搜索范围限定到的资源类型(复数形式)。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值 projectsfoldersorganizations
  • SCOPE_RESOURCE_ID:您要将搜索范围限定到的 Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • FULL_RESOURCE_NAME:可选。要分析其访问权限的资源的完整资源名称。如需查看完整的资源名称格式列表,请参阅资源名称格式
  • PRINCIPAL:可选。 您要分析其访问权限的主账号,格式为 PRINCIPAL_TYPE:ID,例如 user:my-user@example.com。如需查看主账号类型的完整列表,请参阅主账号标识符
  • PERMISSION_1PERMISSION_2... PERMISSION_N:可选。您要检查的权限,例如 compute.instances.get。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。
  • QUERY_ID:要用于已保存查询的 ID,在指定的父级资源(项目、文件夹或组织)中必须是唯一的。您可以在查询 ID 中使用字母、数字和连字符。
  • RESOURCE_TYPE:要为其保存查询的资源类型。 使用值 projectfolderorganization
  • RESOURCE_ID:您要为其保存查询的 Google Cloud 项目、文件夹或组织的 ID。项目 ID 可以是字母数字,也可以是数字。文件夹和组织 ID 是数字。
  • LABEL_KEYLABEL_VALUE:可选。 要附加到查询的键值对的逗号分隔列表,可用于搜索和列表操作。每个已保存的查询最多可包含 10 个标签。
  • DESCRIPTION:可选。描述查询的字符串。

将以下内容保存在名为 request.json 的文件中:

{
  "IamPolicyAnalysisQuery": {
    "scope": "SCOPE_RESOURCE_TYPE_PLURAL/SCOPE_RESOURCE_ID",
    "resourceSelector": {
      "fullResourceName": "FULL_RESOURCE_NAME"
    },
    "identitySelector": {
      "identity": "PRINCIPAL"
    },
    "accessSelector": {
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    }
  }
}

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud asset saved-queries create \
QUERY_ID \
--RESOURCE_TYPE=RESOURCE_ID \
--query-file-path=request.json \
--labels="LABEL_KEY=LABEL_VALUE" \
--description="DESCRIPTION"

Windows (PowerShell)

gcloud asset saved-queries create `
QUERY_ID `
--RESOURCE_TYPE=RESOURCE_ID `
--query-file-path=request.json `
--labels="LABEL_KEY=LABEL_VALUE" `
--description="DESCRIPTION"

Windows (cmd.exe)

gcloud asset saved-queries create ^
QUERY_ID ^
--RESOURCE_TYPE=RESOURCE_ID ^
--query-file-path=request.json ^
--labels="LABEL_KEY=LABEL_VALUE" ^
--description="DESCRIPTION"

响应包含已保存的查询。例如,它可能如下所示:

content:
  iamPolicyAnalysisQuery:
    resourceSelector:
      fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
    identitySelector:
      identity: user:my-user@example.com
    scope: projects/scope-project
createTime: '2022-04-18T22:47:25.640783Z'
description: A query checking what permissions my-user@example.com has on my-project
labels:
  user: my-user
lastUpdateTime: '2022-04-18T22:47:25.640783Z'
name: projects/12345678901/savedQueries/my-query

REST

如需在父项目、文件夹或组织中创建已保存的政策分析器查询,请使用 Cloud Asset Inventory API 的 savedQueries.create 方法。

在使用任何请求数据之前,请先进行以下替换:

  • RESOURCE_TYPE:要为其保存查询的资源类型。 使用值 projectsfoldersorganizations
  • RESOURCE_ID:您要为其保存查询的 Google Cloud 项目、文件夹或组织的 ID。项目 ID 可以是字母数字,也可以是数字。文件夹和组织 ID 是数字。
  • QUERY_ID:要用于已保存查询的 ID,在指定的父级资源(项目、文件夹或组织)中必须是唯一的。您可以在查询 ID 中使用字母、数字和连字符。
  • SCOPE_RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值 projectsfoldersorganizations
  • SCOPE_RESOURCE_ID:您要将搜索范围限定到的 Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • FULL_RESOURCE_NAME:可选。要分析其访问权限的资源的完整资源名称。如需查看完整的资源名称格式列表,请参阅资源名称格式
  • PRINCIPAL:可选。 您要分析其访问权限的主账号,格式为 PRINCIPAL_TYPE:ID,例如 user:my-user@example.com。如需查看主账号类型的完整列表,请参阅主账号标识符
  • PERMISSION_1PERMISSION_2... PERMISSION_N:可选。您要检查的权限,例如 compute.instances.get。如果您列出了多项权限,政策分析器将检查是否具有所列的任何权限。
  • LABEL_KEYLABEL_VALUE:可选。 要附加到查询的键值对,可用于搜索和列表操作。每个已保存的查询最多可包含 10 个标签。
  • DESCRIPTION:可选。描述查询的字符串。

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/savedQueries?savedQueryId=QUERY_ID

请求 JSON 正文:

{
  "content": {
    "iamPolicyAnalysisQuery": {
      "scope": "SCOPE_RESOURCE_TYPE/SCOPE_RESOURCE_ID",
      "resourceSelector": {
        "fullResourceName": "FULL_RESOURCE_NAME"
      },
      "identitySelector": {
        "identity": "PRINCIPAL"
      },
      "accessSelector": {
        "permissions": [
          "PERMISSION_1",
          "PERMISSION_2",
          "PERMISSION_N"
        ]
      }
    }
  },
  "labels": {
    "LABEL_KEY": "LABEL_VALUE"
  },
  "description": "DESCRIPTION"
}

如需发送您的请求,请展开以下选项之一:

响应包含已保存的查询。例如,它可能如下所示:

{
  "name": "projects/12345678901/savedQueries/my-query",
  "description": "A query checking what permissions my-user@example.com has on my-project",
  "createTime": "2022-04-18T22:47:25.640783Z",
  "lastUpdateTime": "2022-04-18T22:47:25.640783Z",
  "labels": {
    "user": "my-user"
  },
  "content": {
    "iamPolicyAnalysisQuery": {
      "scope": "projects/scope-project",
      "resourceSelector": {
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
      },
      "identitySelector": {
        "identity": "user:my-user@example.com"
      }
    }
  }
}

运行已保存的查询

gcloud

如需运行已保存的分析查询,请使用 gcloud asset analyze-iam-policy 命令。

在使用下面的命令数据之前,请先进行以下替换:

  • SCOPE_RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值 projectfolderorganization
  • SCOPE_RESOURCE_ID:您要将搜索范围限定到的 Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • RESOURCE_TYPE_PLURAL:保存查询的资源类型。 使用值 projectsfoldersorganizations
  • RESOURCE_NUM_ID:保存查询的 Google Cloud 项目、文件夹或组织的数字 ID。您无法使用字母数字项目 ID 来标识项目,必须使用项目编号。
  • QUERY_ID:您要使用的已保存查询的 ID。

执行 gcloud asset analyze-iam-policy 命令:

Linux、macOS 或 Cloud Shell

gcloud asset analyze-iam-policy \
--SCOPE_RESOURCE_TYPE=SCOPE_RESOURCE_ID \
--saved-analysis-query=RESOURCE_TYPE_PLURAL/RESOURCE_NUM_ID/savedQueries/QUERY_ID

Windows (PowerShell)

gcloud asset analyze-iam-policy `
--SCOPE_RESOURCE_TYPE=SCOPE_RESOURCE_ID `
--saved-analysis-query=RESOURCE_TYPE_PLURAL/RESOURCE_NUM_ID/savedQueries/QUERY_ID

Windows (cmd.exe)

gcloud asset analyze-iam-policy ^
--SCOPE_RESOURCE_TYPE=SCOPE_RESOURCE_ID ^
--saved-analysis-query=RESOURCE_TYPE_PLURAL/RESOURCE_NUM_ID/savedQueries/QUERY_ID

响应包含在指定资源上运行已保存查询的结果。如需查看查询结果示例,请参阅分析 IAM 政策

REST

如需运行已保存的分析查询,请使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。

在使用任何请求数据之前,请先进行以下替换:

  • SCOPE_RESOURCE_TYPE:您要将搜索范围限定到的资源类型。系统只会分析附加到此资源及其后代的 IAM 允许政策。使用值 projectsfoldersorganizations
  • SCOPE_RESOURCE_ID:您要将搜索范围限定到的 Google Cloud 项目、文件夹或组织的 ID。系统只会分析附加到此资源及其后代的 IAM 允许政策。项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectsfoldersorganizations
  • RESOURCE_NUM_ID:保存查询的 Google Cloud 项目、文件夹或组织的数字 ID。您无法使用字母数字项目 ID 来标识项目,必须使用项目编号。
  • QUERY_ID:您要使用的已保存查询的 ID。

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/SCOPE_RESOURCE_TYPE/SCOPE_RESOURCE_ID:analyzeIamPolicy

请求 JSON 正文:

{
  "savedAnalysisQuery": "RESOURCE_TYPE/RESOURCE_NUM_ID/savedQueries/QUERY_ID"
}

如需发送您的请求,请展开以下选项之一:

响应包含在指定资源上运行已保存查询的结果。如需查看查询结果示例,请参阅分析 IAM 政策

获取已保存的查询

gcloud

如需获取已保存的政策分析器查询,请使用 gcloud asset saved-queries get 命令。

在使用下面的命令数据之前,请先进行以下替换:

  • QUERY_ID:您要获取的已保存查询的 ID。
  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectfolderorganization
  • RESOURCE_ID:保存查询的 Google Cloud 项目、文件夹或组织的 ID。项目 ID 可以是字母数字或数字。文件夹和组织 ID 是数字。

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud asset saved-queries describe QUERY_ID --RESOURCE_TYPE=RESOURCE_NUM_ID

Windows (PowerShell)

gcloud asset saved-queries describe QUERY_ID --RESOURCE_TYPE=RESOURCE_NUM_ID

Windows (cmd.exe)

gcloud asset saved-queries describe QUERY_ID --RESOURCE_TYPE=RESOURCE_NUM_ID

响应包含已保存的查询。例如,它可能如下所示:

content:
  iamPolicyAnalysisQuery:
    resourceSelector:
      fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
    identitySelector:
      identity: user:my-user@example.com
    scope: projects/scope-project
createTime: 2022-04-18T22:47:25.640783Z
description: A query checking what permissions my-user@example.com has on my-project
labels:
  user: my-user
lastUpdateTime: 2022-04-18T22:47:25.640783Z
name: projects/12345678901/savedQueries/my-query

REST

如需获取已保存的政策分析器查询,请使用 Cloud Asset Inventory API 的 savedQueries.get 方法。

在使用任何请求数据之前,请先进行以下替换:

  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectsfoldersorganizations
  • RESOURCE_NUM_ID:保存查询的 Google Cloud 项目、文件夹或组织的数字 ID。您无法使用字母数字项目 ID 来标识项目,必须使用项目编号。
  • QUERY_ID:您要获取的已保存查询的 ID。

HTTP 方法和网址:

GET https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_NUM_ID/savedQueries/QUERY_ID

如需发送您的请求,请展开以下选项之一:

响应包含已保存的查询。例如,它可能如下所示:

{
  "name": "projects/12345678901/savedQueries/my-query",
  "description": "A query checking what permissions my-user@example.com has on my-project",
  "createTime": "2022-04-18T22:47:25.640783Z",
  "lastUpdateTime": "2022-04-18T22:47:25.640783Z",
  "labels": {
    "user": "my-user"
  },
  "content": {
    "iamPolicyAnalysisQuery": {
      "scope": "projects/scope-project",
      "resourceSelector": {
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
      },
      "identitySelector": {
        "identity": "user:my-user@example.com"
      }
    }
  }
}

列出已保存的查询

gcloud

如需列出项目、文件夹或组织中的所有已保存的政策分析器查询,请使用 gcloud asset saved-queries list 命令。

在使用下面的命令数据之前,请先进行以下替换:

  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectfolderorganization
  • RESOURCE_ID:您要为其列出已保存查询的 Google Cloud 项目、文件夹或组织的 ID。项目 ID 可以是字母数字,也可以是数字。文件夹和组织 ID 是数字。

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud asset saved-queries list --RESOURCE_TYPE=RESOURCE_ID

Windows (PowerShell)

gcloud asset saved-queries list --RESOURCE_TYPE=RESOURCE_ID

Windows (cmd.exe)

gcloud asset saved-queries list --RESOURCE_TYPE=RESOURCE_ID

响应包含项目、文件夹或组织的所有已保存的政策分析器查询。 例如,它可能如下所示:

savedQueries:
- content:
    iamPolicyAnalysisQuery:
      resourceSelector:
        fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
      identitySelector:
        identity: user:my-user@example.com
      scope: projects/scope-project
  createTime: '2022-04-15T21:17:33.777212Z'
  description: A query checking what permissions my-user@example.com has on my-project
  labels:
    missing-info: permissions
  lastUpdateTime: '2022-04-15T21:17:33.777212Z'
  name: projects/12345678901/savedQueries/query-1
- content:
    iamPolicyAnalysisQuery:
      accessSelector:
        permissions:
        - iam.roles.get
        - iam.roles.list
      identitySelector:
        identity: user:my-user@example.com
      scope: projects/scope-project
  createTime: '2022-04-18T22:47:25.640783Z'
  description: A query checking what resources my-user@example.com has permission to view roles on
  labels:
    missing-info: resource
  lastUpdateTime: '2022-04-18T22:47:25.640783Z'
  name: projects/12345678901/savedQueries/query-2

REST

如需列出项目、文件夹或组织中的所有已保存的政策分析器查询,请使用 Cloud Asset Inventory API 的 savedQueries.list 方法。

在使用任何请求数据之前,请先进行以下替换:

  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectsfoldersorganizations
  • RESOURCE_ID:您要为其列出已保存查询的 Google Cloud 项目、文件夹或组织的 ID。项目 ID 可以是字母数字,也可以是数字。文件夹和组织 ID 是数字。

HTTP 方法和网址:

GET https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/savedQueries

如需发送您的请求,请展开以下选项之一:

响应包含项目、文件夹或组织的所有已保存的政策分析器查询。 例如,它可能如下所示:

{
  "savedQueries": [
    {
      "name": "projects/12345678901/savedQueries/query-1",
      "description": "A query checking what permissions my-user@example.com has on my-project",
      "createTime": "2022-04-15T21:17:33.777212Z",
      "lastUpdateTime": "2022-04-15T21:17:33.777212Z",
      "labels": {
        "missing-info": "permission"
      },
      "content": {
        "iamPolicyAnalysisQuery": {
          "scope": "projects/scope-project",
          "resourceSelector": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
          },
          "identitySelector": {
            "identity": "user:my-user@example.com"
          }
        }
      }
    },
    {
      "name": "projects/12345678901/savedQueries/query-2",
      "description": "A query checking what resources my-user@example.com has permission to view roles on",
      "createTime": "2022-04-18T22:47:25.640783Z",
      "lastUpdateTime": "2022-04-18T22:47:25.640783Z",
      "labels": {
        "missing-info": "resource"
      },
      "content": {
        "iamPolicyAnalysisQuery": {
          "scope": "projects/scope-project",
          "accessSelector": {
            "permissions": [
              "iam.roles.get",
              "iam.roles.list"
            ]
          },
          "identitySelector": {
            "identity": "user:my-user@example.com"
          }
        }
      }
    }
  ]
}

更新已保存的查询

gcloud

如需更新已保存的政策分析器查询,请使用 gcloud asset saved-queries update 命令。

在使用下面的命令数据之前,请先进行以下替换:

  • UPDATED_QUERY:可选。您要保存的更新后的政策分析器查询。如需了解如何设置查询格式,请参阅创建已保存的查询
  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectfolderorganization
  • QUERY_ID:要修改的已保存查询的 ID。
  • RESOURCE_ID:保存查询的 Google Cloud 项目、文件夹或组织的 ID。项目 ID 可以是字母数字或数字。文件夹和组织 ID 是数字。
  • UPDATED_LABELS:可选。要附加到已保存查询的更新标签。您还可以使用 --remove-labels="KEY_1,KEY_2" 标志移除标签,或使用 --clear-labels 标志清除所有标签。
  • UPDATED_DESCRIPTION:可选。已保存查询的更新说明。

将以下内容保存在名为 request.json 的文件中:

{
  "IamPolicyAnalysisQuery": {
    UPDATED_QUERY
  }
}

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud asset saved-queries update \
QUERY_ID \
--RESOURCE_TYPE=RESOURCE_ID \
--query-file-path=request.json \
--update-labels="UPDATED_LABELS" \
--description="DESCRIPTION"

Windows (PowerShell)

gcloud asset saved-queries update `
QUERY_ID `
--RESOURCE_TYPE=RESOURCE_ID `
--query-file-path=request.json `
--update-labels="UPDATED_LABELS" `
--description="DESCRIPTION"

Windows (cmd.exe)

gcloud asset saved-queries update ^
QUERY_ID ^
--RESOURCE_TYPE=RESOURCE_ID ^
--query-file-path=request.json ^
--update-labels="UPDATED_LABELS" ^
--description="DESCRIPTION"

响应中包含更新后的查询。

REST

如需更新已保存的政策分析器查询,请使用 Cloud Asset Inventory API 的 savedQueries.patch 方法。

在使用任何请求数据之前,请先进行以下替换:

  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectsfoldersorganizations
  • RESOURCE_NUM_ID:保存查询的 Google Cloud 项目、文件夹或组织的数字 ID。您无法使用字母数字项目 ID 来标识项目,必须使用项目编号。
  • QUERY_ID:要修改的已保存查询的 ID。
  • UPDATED_FIELDS:要更新的字段的英文逗号分隔列表。例如,如果您要更新内容、标签和说明字段,则应使用值 content,labels,description
  • UPDATED_QUERY:可选。您要保存的更新后的政策分析器查询。如需了解如何设置查询格式,请参阅创建已保存的查询
  • UPDATED_LABELS:可选。要附加到已保存查询的更新后的标签。
  • UPDATED_DESCRIPTION:可选。已保存查询的更新说明。

HTTP 方法和网址:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_NUM_ID/savedQueries/QUERY_ID?update_mask=UPDATED_FIELDS

请求 JSON 正文:

{
  "content": {
    "iamPolicyAnalysisQuery": {
      UPDATED_QUERY
  },
  "labels": {
    UPDATED_LABELS
  },
  "description": "UPDATED_DESCRIPTION"
}

如需发送您的请求,请展开以下选项之一:

响应中包含更新后的查询。

删除已保存的查询

gcloud

如需删除已保存的政策分析器查询,请使用 gcloud asset saved-queries delete 命令。

在使用下面的命令数据之前,请先进行以下替换:

  • QUERY_ID:要删除的已保存查询的 ID。
  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectfolderorganization
  • RESOURCE_NUM_ID:保存查询的 Google Cloud 项目、文件夹或组织的数字 ID。您无法使用字母数字项目 ID 来标识项目,必须使用项目编号。

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud asset saved-queries delete \
QUERY_ID \
--RESOURCE_TYPE=RESOURCE_NUM_ID

Windows (PowerShell)

gcloud asset saved-queries delete `
QUERY_ID `
--RESOURCE_TYPE=RESOURCE_NUM_ID

Windows (cmd.exe)

gcloud asset saved-queries delete ^
QUERY_ID ^
--RESOURCE_TYPE=RESOURCE_NUM_ID

REST

如需删除已保存的政策分析器查询,请使用 Cloud Asset Inventory API 的 savedQueries.delete 方法。

在使用任何请求数据之前,请先进行以下替换:

  • RESOURCE_TYPE:保存查询的资源类型。 使用值 projectsfoldersorganizations
  • RESOURCE_NUM_ID:保存查询的 Google Cloud 项目、文件夹或组织的数字 ID。您无法使用字母数字项目 ID 来标识项目,必须使用项目编号。
  • QUERY_ID:要删除的已保存查询的 ID。

HTTP 方法和网址:

DELETE https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_NUM_ID/savedQueries/QUERY_ID

如需发送您的请求,请展开以下选项之一:

如果成功删除查询,API 会返回一个空响应。