快速入门:使用 Cloud Asset Inventory 导出资产元数据

使用 Cloud Asset Inventory 导出资产元数据

本快速入门介绍了如何使用 Cloud Asset Inventory 和 Google Cloud CLI gcloud asset 命令导出某个时间点的资产元数据。

开始前须知

您必须先启用 Cloud Asset Inventory API、Google Cloud CLI 并分配权限,然后才能开始使用 Cloud Asset Inventory。Google Cloud CLI 可与 Cloud Asset Inventory 和其他 Google Cloud 服务进行交互。详细了解 gcloud CLI

启用 Cloud Asset Inventory API 和 Google Cloud CLI

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 启用所需的 API。

    启用 API

  4. 安装初始化 Google Cloud CLI。
  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 启用所需的 API。

    启用 API

  7. 安装初始化 Google Cloud CLI。

配置权限

如需调用 Cloud Asset Inventory API,必须先配置权限

搜索资产

  1. 如需搜索资源元数据,请运行以下 gcloud asset search-all-resources 命令。

     gcloud asset search-all-resources \
        --scope SCOPE \
        --query QUERY \
        --asset-types ASSET_TYPES,… \
        --order-by ORDER_BY \
        --read-mask READ_MASK
    

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

    • (可选)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,用于查找名称中包含“重要邮件”的 Google Cloud 资源。
      • name=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 资源。
      • NOT state:ACTIVE,用于查找状态不包含“ACTIVE”的 Google Cloud 资源。
      • createTime<1609459200createTime<2021-01-01createTime<"2021-01-01T00:00:00",用于查找在 2021-01-01 00:00:00 UTC 之前创建的 Google Cloud 资源。1609459200 是秒的周期时间戳(2021-01-01 00:00:00)
      • updateTime>1609459200updateTime>2021-01-01updateTime>"2021-01-01T00:00:00",用于查找在 2021-01-01 00:00:00 UTC 之后更新的 Google Cloud 资源。1609459200 是以秒为单位的 2021-01-01 00:00:00 UTC 的周期时间戳。
      • project:12345,用于查找编号为 12345 的 Google Cloud 项目的 Google Cloud 资源。项目 ID 不受支持。
      • folders:(123 or 456),用于查找编号为 123 或 456 的 Google Cloud 文件夹的子项的 Google Cloud 资源。
      • organization:123,用于查找编号为 123 的 Google Cloud 组织的后代 Google Cloud 资源。
      • parentFullResourceName:ImportantName,用于查找父资源名称中包含 ImportantName 的 Google Cloud 资源。
      • parentAssetType:Project,用于查找父资源包含 Project 的 Google Cloud 资源。
      • Important,用于查找在任何可搜索字段中包含“重要信息”的 Google Cloud 资源。
      • 使用 Impor* 查找任何可搜索字段中包含“Impor”作为前缀的 Google Cloud 资源。
      • Important location:(us-west1 OR global),用于查找在任何可搜索字段中以单词形式出现“重要邮件”且也位于“us-west1”区域或“全球”位置的 Google Cloud 资源。
    • (可选)ASSET_TYPES:此请求搜索的资产类型列表。如果为空,它将搜索所有可搜索的资源类型。 也支持正则表达式。例如:

      • "compute.googleapis.com.*",截取资产类型以 "compute.googleapis.com" 开头的资源。
      • ".*Instance",截取资产类型以 "Instance" 结尾的资源。
      • ".*Instance.*",截取资产类型包含 "Instance" 的资源。

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

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

      • name
      • assetType
      • project
      • displayName
      • description
      • location
      • kmsKey
      • createTime
      • updateTime
      • state
      • parentFullResourceName
      • parentAssetType

      其他所有字段,如重复字段(例如networkTags)、映射字段(例如labels)和结构体字段(例如additionalAttributes)。

    • (可选)READ_MASK:以英文逗号分隔的字段列表,指定要在结果中返回的字段。如果未指定,则会返回除 versionedResources 以外的所有字段。如果仅指定了 "*",则返回所有字段。示例:"name,location""name,versionedResources""*"

    如需详细了解如何搜索资源,请参阅搜索资源

  2. 如需搜索 IAM 政策,请运行以下 gcloud asset search-all-iam-policies 命令。

     gcloud asset search-all-iam-policies \
        --scope SCOPE \
        --query QUERY \
        --asset-types ASSET_TYPES,… \
        --order-by ORDER_BY
    

    地点:

    • (可选)SCOPE:范围可以是项目、文件夹或组织。搜索仅限于此范围内的 Identity and Access Management (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 政策结构,请参阅 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”权限的角色的 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,用于查找在任何可搜索字段中包含“重要邮件”的 IAM 政策绑定(包含的权限除外)。
      • resource:(instance1 OR instance2) policy:amy,用于查找在资源 instance1 或 instance2 上设置的 IAM 政策绑定,同时指定用户“amy”
      • roles:roles/compute.admin:用于查找指定 Compute Admin 角色的 IAM 政策绑定。
      • memberTypes: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)不受支持。

    如需详细了解如何搜索 IAM 政策,请参阅搜索 IAM 政策

将资产快照导出到 Cloud Storage

如需将给定时间戳的所有资产元数据导出到 Cloud Storage 文件,请完成以下步骤。

  1. 如果您的项目还没有可用于存储导出数据的 Cloud Storage 存储分区,请创建新存储分区

  2. 如需导出项目中的资产元数据,请运行以下命令。此命令将导出的快照存储在 Cloud Storage 存储分区 (gs://YOUR_BUCKET/NEW_FILE) 中。

    gcloud asset export \
       --content-type CONTENT_TYPE \
       --project PROJECT_ID \
       --snapshot-time SNAPSHOT_TIME \
       --output-path "gs://YOUR_BUCKET/NEW_FILE"
    

    地点:

    • (可选)CONTENT_TYPE:要导出的资产的内容类型。如果未指定内容类型,则仅返回素材资源名称。示例类型包括 resource(导出资源元数据)和 iam-policy(导出指定资源的每个子资产的 IAM 政策),等等。其他选项包括 org-policyaccess-policyos-inventory。如需了解详情,请参阅 gcloud asset export 可选标志部分
    • PROJECT_ID:要导出其元数据的项目的 ID。此项目可以是已启用 Cloud Asset Inventory API 且是从中导出导出的项目,也可以是其他项目。
    • (可选)SNAPSHOT_TIME:该值必须是您要截取资源快照的当前时间或过去的时间。默认情况下,系统会在当前时间截取快照。请参阅 gcloud topic datetimes 了解时间格式,例如: --snapshot-time 2021-05-25T10:49:41Z 注意:如果您指定的是快照时间,则不能超过 35 天。
  3. 如需导出组织或文件夹的资源,您可以使用以下任一标志代替 --project 标志:

    • --organization=ORGANIZATION_ID
    • --folder=FOLDER_ID
  4. (可选)如需检查导出状态,请运行以下命令。 运行导出命令后,它会显示在 gcloud CLI 中。

    gcloud asset operations describe projects/PROJECT_ID/operations/ExportAssets/CONTENT_TYPE/OPERATION_NUMBER
    

查看素材资源快照

如需在将资产数据导出到 Cloud Storage 后查看,请完成以下步骤。

  1. 转到“Cloud Storage 浏览器”页面
    打开“Cloud Storage 浏览器”页面

  2. 打开您导出元数据的文件。

导出文件会列出资产及其资源名称

后续步骤