管理已保存的查询

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

准备工作

  1. 启用 Cloud Asset API。

    启用 API

所需的角色

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

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

所需权限

如需创建和管理已保存的查询,您需要拥有以下权限:

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

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

创建已保存的查询

gcloud

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

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

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

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

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

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

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

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

  • RESOURCE_TYPE:用于保存查询的资源类型。使用值 projectfolderorganization
  • RESOURCE_ID:您要列出其已保存查询的 Google Cloud 项目、文件夹或组织的 ID。项目 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

响应包含为项目、文件夹或组织保存的所有 Policy Analyzer 查询。例如,可能如下所示:

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

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

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

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

HTTP 方法和网址:

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

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

响应包含为项目、文件夹或组织保存的所有 Policy Analyzer 查询。例如,可能如下所示:

{
  "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 和组织 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 会返回一个空响应。