使用 Cloud Asset Inventory 和 BigQuery 查看貴機構的 VM 管理員狀態

將 VM 管理員資料從 Cloud Asset Inventory 匯出至 BigQuery 後,您就能執行進階查詢,檢查 VM 管理員是否已啟用、查看 OS Config 代理程式版本,以及檢查機構中所有專案的作業系統詳細資料。

本文說明如何使用 VM 管理員、Cloud Asset Inventory 和 BigQuery,查看整個機構中 Compute Engine 執行個體的 VM 管理員啟用狀態和作業系統狀態報表。

事前準備

  • 設定 VM 管理員
  • 啟用 Cloud Asset Inventory API
  • 建立 BigQuery 資料集來儲存匯出的資料。
  • 確認您具備必要權限,可查看整個機構的 VM 管理員狀態報告。
  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 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 中執行查詢所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要匯出資源資料並在 BigQuery 中執行查詢,您必須具備下列權限:

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

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

將 VM 管理員資料匯出至 BigQuery

如要將 OS 項目清單和資源資料匯出至 BigQuery,請按照下列步驟操作:

  1. 找出機構 ID:

    gcloud projects get-ancestors PROJECT_ID
    

    PROJECT_ID 替換為專案的專案 ID。

  2. 從 VM 執行個體匯出 VM 管理員收集的 OS 庫存資料:

    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。

如要瞭解如何匯出 OS 清單快照,請參閱「匯出資產快照」。

為貴機構產生 VM 管理員狀態報告

匯出項目清單資料後,您可以在 BigQuery 中執行 SQL 查詢,產生 VM 管理員狀態報告。這份報表提供下列資訊:

  • 每個 VM 執行個體是否正在回報 VM 管理員 OS 庫存資料 (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. 按一下「執行」

如要進一步瞭解如何查詢資料,請參閱「執行查詢」。

產生報表後,您可以使用數據分析建立自訂資訊主頁。詳情請參閱「使用數據分析分析資料」一文。

後續步驟