使用 Cloud Asset Inventory 和 BigQuery 查看组织的虚拟机管理器状态

通过将虚拟机管理器数据从 Cloud Asset Inventory 导出到 BigQuery,您可以运行高级查询来检查虚拟机管理器是否已启用、查看 OS Config 代理版本,以及检查组织中所有项目的操作系统详细信息。

本文档介绍了如何使用虚拟机管理器、Cloud Asset Inventory 和 BigQuery 查看组织中 Compute Engine 实例的虚拟机管理器启用情况和操作系统状态报告。

准备工作

  • 设置虚拟机管理器
  • 启用 Cloud Asset Inventory API
  • 创建一个 BigQuery 数据集来存储导出的数据。
  • 验证您是否拥有在整个组织中查看虚拟机管理器状态报告所需的权限
  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  • 设置默认区域和可用区

所需的角色

如需获得导出资源数据并在 BigQuery 中运行查询所需的权限,请让管理员为您授予项目、文件夹或组织的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色可提供在 BigQuery 中导出资源数据和运行查询所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需导出资源数据并在 BigQuery 中运行查询,您需要具备以下权限:

  • cloudasset.assets.exportOSInventories
  • cloudasset.assets.exportResource
  • bigquery.datasets.get
  • bigquery.tables.create
  • bigquery.tables.update
  • bigquery.tables.get
  • bigquery.jobs.create

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

将虚拟机管理器数据导出到 BigQuery

如需将操作系统清单和资源数据导出到 BigQuery,请执行以下操作:

  1. 确定您的组织 ID:

    gcloud projects get-ancestors PROJECT_ID
    

    PROJECT_ID 替换为项目的项目 ID。

  2. 导出虚拟机管理器从虚拟机实例收集的操作系统清单数据:

    gcloud asset export \
        --content-type=os-inventory \
        --organization=ORGANIZATION_ID \
        --per-asset-type \
        --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/os"
    

    替换以下内容:

    • ORGANIZATION_ID:您的组织 ID
    • BQ_PROJECT_ID:BigQuery 数据集所在的项目 ID。
    • DATASET_ID:BigQuery 数据集的名称。
  3. 将资源元数据导出到 BigQuery 表:

    gcloud asset export \
        --content-type=resource \
        --organization=ORGANIZATION_ID \
        --per-asset-type \
        --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/res"
    

    替换以下内容:

    • ORGANIZATION_ID:您的组织 ID。
    • BQ_PROJECT_ID:BigQuery 数据集所在的项目 ID。
    • DATASET_ID:BigQuery 数据集的 ID。

如需了解如何导出操作系统库存快照,请参阅导出资产快照

为组织生成虚拟机管理器状态报告

导出资产清单数据后,您可以在 BigQuery 中运行 SQL 查询,以生成虚拟机管理器状态报告。此报告提供以下信息:

  • 是否针对每个虚拟机实例报告虚拟机管理器操作系统清点数据 (vmm_data)。
  • 每个实例报告的操作系统长名称 (os_info_reported_by_vmm) 和 osconfig 代理版本 (osconfig_agent_version)。
  • osconfig.googleapis.com API 服务是否已在层次结构中的各个项目中启用 (osconfig_enabled_in_project)。

如需生成报告,请执行以下步骤:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,粘贴以下 SQL 脚本:

    SELECT
      vms.project,
      vms.zone,
      vms.instance_name,
      vms.instance_status,
      vms.vmm_data,
      vms.instance_creation_time,
      vms.vmm_info_update_time,
      --  vms.gce_image,
      vms.os_info_reported_by_vmm,
      vms.service_account,
      service.resource.data.state AS osconfig_enabled_in_project,
      vms.osconfig_agent_version
      --  "INFO N/A" as enable_osconfig_metadata_set_in_project,
      --  "INFO N/A" as enable_osconfig_metadata_set_in_instance,
    FROM
    (
      SELECT
        SPLIT(name, '/')[OFFSET(8)] AS instance_name,
        SPLIT(name, '/')[OFFSET(4)] AS project,
        SPLIT(name, '/')[OFFSET(6)] AS zone,
        instances.ancestors,
        instances.resource.data.creationTimestamp AS instance_creation_time,
        instances.resource.data.serviceAccounts[SAFE_OFFSET(0)].email AS service_account,
        CASE WHEN inventory.os_inventory IS NOT NULL THEN TRUE ELSE FALSE END AS vmm_data,
        /*  SPLIT(resource.data.disks[OFFSET(0)].licenses[OFFSET(0)], '/')[OFFSET(9)] as gce_image, */
        inventory.os_inventory.os_info.long_name AS os_info_reported_by_vmm,
        inventory.os_inventory.update_time AS vmm_info_update_time,
        instances.resource.data.status AS instance_status,
        inventory.os_inventory.os_info.osconfig_agent_version
      FROM
        DATASET_ID.res_compute_googleapis_com_Instance AS instances
        LEFT JOIN DATASET_ID.os_compute_googleapis_com_Instance AS inventory
      USING (name)
      --  WHERE instances.resource.data.status = "RUNNING"
    ) AS vms
    LEFT JOIN DATASET_ID.res_serviceusage_googleapis_com_Service AS service
      ON vms.ancestors[OFFSET(0)] = service.resource.data.parent
    WHERE service.resource.data.name = "osconfig.googleapis.com"
    

    DATASET_ID 替换为您的 BigQuery 数据集的名称。

  3. 点击运行

如需详细了解如何查询数据,请参阅运行查询

生成报告后,您可以使用数据洞察创建自定义信息中心。如需了解详情,请参阅使用数据洞察分析数据

后续步骤