搜索资源

借助 Cloud Asset API,您可以使用自定义查询语言来查询项目、文件夹或组织的资源元数据。

准备工作

调用 SearchAllResources

gcloud

您可以使用 gcloud asset search-all-resources 命令调用 SearchAllResources。您必须运行 Cloud SDK 302.0.0 或更高版本。您可以使用 gcloud version 命令检查您的版本。

gcloud asset search-all-resources \
  --scope=SCOPE \
  --query=QUERY \
  --asset-types=ASSET_TYPES,… \
  --order-by=ORDER_BY \
  --page-size=PAGE_SIZE \

以下所有标志都是可选的:

  • (可选)SCOPE:范围可以是项目、文件夹或组织。只搜索此范围内的 Google Cloud 资源。调用者必须被授予所需范围的 cloudasset.assets.searchAllResources 权限。如果未指定,将使用已配置的项目属性。如需查找已配置的项目,请运行 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 中的所有资源。

    示例:

    • name:Important,查找名称包含“Important”一词的 Google Cloud 资源。
    • name=Important,查找名称正好为“Important”的 Google Cloud 资源。
    • displayName:Impor*,以查找显示名包含“Impor”作为任何词前缀的 Google Cloud 资源。
    • location:us-west*,用于查找位置包含两个字词且以“us”和“west”作为前缀的 Google Cloud 资源。
    • labels:prod,查找所含标签的键或值包含“prod”一词的 Google Cloud 资源。
    • labels.env:prod,查找所含标签的键为“env”且值包含“prod”的 Google Cloud 资源。
    • labels.env:*,查找所含标签的键为“env”的 Google Cloud 资源。
    • kmsKey:key,查找使用名称包含“key”这个词、由客户管理的加密密钥加密的 Google Cloud 资源。
    • state:ACTIVE,查找状态包含“ACTIVE”这个词的 Google Cloud 资源。
    • createTime<1609459200,查找在“2021-01-01 00:00:00 UTC”之前创建的 Google Cloud 资源。1609459200 是“2021-01-01 00:00:00 UTC”的纪元时间戳。
    • updateTime>1609459200,查找在“2021-01-01 00:00:00 UTC”后更新的 Google Cloud 资源。1609459200 是“2021-01-01 00:00:00 UTC”的纪元时间戳。
    • Important,查找任何可搜索字段中包含一词“Important”的 Google Cloud 资源。
    • Impor*,以查找包含以“Impr”作为任何可搜索字段中任何词前缀的 Google Cloud 资源。
    • Important location:(us-west1 OR global),查找任何可搜索字段中包含一词“Important”且还位于“us-west1”区域或“全局”位置的 Google Cloud 资源。
  • (可选)ASSET_TYPES:要搜索的资产类型列表。如果未指定或为空,它将搜索所有可搜索的资源类型。例如,"cloudresourcemanager.googleapis.com/Project,compute.googleapis.com/Instance" 会搜索项目和虚拟机实例资源。 此外,还支持正则表达式。例如,其资源类型以 "compute.googleapis.com" 开头的 "compute.googleapis.com.*" 快照资源。如需查看所有支持的正则表达式语法,请参阅 RE2。如果正则表达式与任何支持的资源类型均不匹配,则将返回 INVALID_ARGUMENT 错误。

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

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

以下是一个示例 gcloud 命令:

  • 查找“organizations/123456”中 name 包含 mycompany 一词的所有资源:

    gcloud asset search-all-resources \
      --scope='organizations/123456'
      --query='name:mycompany'
    

API

您可以使用项目的有效 OAuth 令牌调用 SearchAllResources。要从 Cloud Shell 或可使用 gcloud 命令的任何控制台调用 SearchAllResources 方法,请执行以下操作:

  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 命令查询资源。

    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:searchAllResources"
    

以下所有标志都是可选的:

  • SCOPE 为必填项。范围可以是项目、文件夹或组织。只搜索此范围内的 Google Cloud 资源。调用者必须被授予所需范围的 cloudasset.assets.searchAllResources 权限。

    允许使用的值包括:

    • projects/PROJECT_ID(例如,“projects/foo-bar”)
    • projects/PROJECT_NUMBER(例如,“projects/12345678”)
    • folders/FOLDER_NUMBER(例如,“folders/1234567”)
    • organizations/ORGANIZATION_NUMBER(例如,“organizations/123456”)
  • (可选)QUERY:查询语句。如需了解详情,请参阅如何构建查询。如果未指定或为空,它将搜索指定 scope 中的所有资源。

    示例:

    • name:Important,查找名称包含“Important”一词的 Google Cloud 资源。
    • name=Important,查找名称正好为“Important”的 Google Cloud 资源。
    • displayName:Impor*,以查找显示名包含“Impor”作为任何词前缀的 Google Cloud 资源。
    • location:us-west*,用于查找位置同时包含“us”和“west”为前缀的 Google Cloud 资源。
    • labels:prod,查找所含标签的键或值包含“prod”一词的 Google Cloud 资源。
    • labels.env:prod,查找所含标签的键为“env”且值包含“prod”的 Google Cloud 资源。
    • labels.env:*,查找所含标签的键为“env”的 Google Cloud 资源。
    • kmsKey:key,查找使用名称包含“key”这个词、由客户管理的加密密钥加密的 Google Cloud 资源。
    • state:ACTIVE,查找状态包含“ACTIVE”这个词的 Google Cloud 资源。
    • createTime<1609459200,查找在“2021-01-01 00:00:00 UTC”之前创建的 Google Cloud 资源。1609459200 是“2021-01-01 00:00:00 UTC”的纪元时间戳。
    • updateTime>1609459200,查找在“2021-01-01 00:00:00 UTC”后更新的 Google Cloud 资源。1609459200 是“2021-01-01 00:00:00 UTC”的纪元时间戳。
    • Important,查找任何可搜索字段中包含一词“Important”的 Google Cloud 资源。
    • Impor*,以查找包含以“Impr”作为任何可搜索字段中任何词前缀的 Google Cloud 资源。
    • Important location:(us-west1 OR global),查找任何可搜索字段中包含一词“Important”且还位于“us-west1”区域或“全局”位置的 Google Cloud 资源。
  • (可选)ASSET_TYPES:要搜索的资产类型列表。如果未指定或为空,它将搜索所有可搜索的资源类型。例如,"cloudresourcemanager.googleapis.com/Project,compute.googleapis.com/Instance" 会搜索项目和虚拟机实例资源。

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

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

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

客户端库和 API 参考文档

如何构建查询

如需详细了解查询语言,请参阅查询语法

如需详细了解各种实际用例的查询示例,请参阅搜索资源示例

按资源元数据字段查询 Google Cloud 资源

如需搜索资源元数据,查询表达式需采用以下格式:

  • 文本完全匹配: FIELD=QUERY
  • 文本部分匹配: FIELD:QUERY
  • 数值匹配:比较运算符(=>>=<<=FIELDcomparison operatorQUERY

可搜索的资源元数据 FIELD 可以是:

  • name:资源的完整资源名称。注意:并非所有资产类型都可搜索。请参阅可搜索类型列表。
  • displayName:界面中的显示名
  • description:一个或多个段落的资源文本说明
  • location:资源的位置。位置可以是“global”、地区级(例如“us-east1”)或区域级(例如“us-west1-b”)。
  • labels:与此资源关联的标签。标签可以匹配标签键和/或标签值。请参阅为 GCP 资源添加标签和分组

  • labels.[key]:由与此资源关联的标签键标识的标签值。例如:“labels.env:prod”。标签键中只能使用连字符 (-)、下划线 (_)、小写字符和数字。键必须以小写字符开头。允许使用国际字符。请参阅标签要求

  • networkTags:与此资源关联的网络标记。请参阅为 GCP 资源添加标签和分组

  • kmsKey:用于加密此资源的客户管理的加密密钥。请参阅 CryptoKeyCryptoKeyVersion

  • state:此资源的状态文本值。不同的资源类型具有不同的状态定义,映射自不同资源类型的不同字段。示例:如果资源是 Compute Engine 提供的实例,则其状态将包含 PROVISIONING、STAGING、RUNNING、STOPPING、SUSPENDING、SUSPENDED、REPAIRING 和 TERMINATED。请参阅 API 参考文档中的 status 定义。 如果资源是 Cloud Resource Manager 提供的项目,则其状态将包含 LIFECYCLE_STATE_UNSPECIFIED、ACTIVE、DELETE_REQUESTED 和 DELETE_IN_PROGRESS。请参阅 API 参考文档中的 lifecycleState 定义。

  • createTime:此资源的创建时间戳,表示此资源的创建时间。粒度是秒。

  • updateTime:此资源的上次更新时间戳,即上次修改或删除此资源的时间。粒度是秒。

示例:按特定字段查询

  • scope 中查找 name 包含 Important 一词的所有资源:

    name:Important
    
  • scope 中查找 displayName 包含前缀为 prod 的字词的所有资源:

    displayName:prod*
    
  • scope 中查找 location 包含 us 一词的所有资源:

    location:us
    
  • scope 中查找 location 恰好等于 us 的所有资源:

    location=us
    
  • scope 中查找 label 的键或值包含 prod 一词的所有资源:

    labels:prod
    
  • scope 中查找 label 的键为 env 且值包含 prod 一词的所有资源:

    labels.env:prod
    
  • scope 中查找 label 的键为 env 且值恰好等于 prod 的所有资源:

    labels.env=prod
    
  • scope 中查找 label 的键为 env 的所有资源:

    labels.env:*
    
  • scope 中查找其中一个 networkTags 包含 internal 一词的所有资源:

    networkTags:internal
    
  • scope 中查找其中一个 networkTags 恰好等于 internal 的所有资源:

    networkTags=internal
    
  • 在使用客户管理的加密密钥加密并且此客户的名称中包含 key 一词的 scope 中,查找所有资源

    kmsKey:key
    
  • scope 中查找 state 包含 ACTIVE 一词的所有资源:

    state:ACTIVE
    
  • 查找 scope 中在“2021-01-01 00:00:00 UTC”(1609459200 是“2021-01-01 00:00:00 UTC”以秒为单位的纪元时间戳)之前创建的所有资源:

    createTime<1609459200
    
  • 查找 scope 中在“2021-01-01 00:00:00 UTC”(1609459200 是“2021-01-01 00:00:00 UTC”以秒为单位的纪元时间戳)后更新的所有资源:

    updateTime>1609459200
    
  • scope 中找到 name 包含字词 Importantdescription 包含前缀 import 的所有资源:

    name:Important description:import*
    
  • scope 中找到 name 包含字词 Importantdescription 包含前缀 import 的所有资源:

    name:Important OR description:import*
    

通过自由文本查询 Google Cloud 资源

您也可以直接使用自由文本查询,而无需指定字段。然后,只要资源元数据中的某个字段与查询匹配,它就会返回资源。

示例:按自由文本查询

  • scope 中查找元数据字段(例如 namedisplayNamedescription)包含 Important 一词的所有资源:

    Important
    
  • 查找您的 scope 中元数据字段(例如 namedisplayNamedescription)包含前缀为 import 的字词:

    import*
    
  • 查找您的 scope 中元数据字段(例如 namedisplayNamedescription)包含 Important 一词,并且还包含前缀为 prod 的字词:

    Important prod*