Cloud Asset Inventory と BigQuery を使用して組織の VM Manager のステータスを表示する

Cloud Asset Inventory から BigQuery に VM Manager データをエクスポートすると、高度なクエリを実行して、VM Manager が有効になっているかどうかを確認したり、OS Config エージェントのバージョンを表示したり、組織内のすべてのプロジェクトでオペレーティング システムの詳細を調べたりできます。

このドキュメントでは、VM Manager、Cloud Asset Inventory、BigQuery を使用して、組織全体の Compute Engine インスタンスの VM Manager の有効化とオペレーティング システムのステータス レポートを表示する方法について説明します。

始める前に

  • VM Manager を設定する
  • Cloud Asset Inventory API を有効にします。
  • エクスポートされたデータを保存する BigQuery データセットを作成します。
  • 組織全体で VM Manager のステータス レポートを表示するために必要な権限があることを確認します。
  • まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールします。インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して 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

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

VM Manager データを BigQuery にエクスポートする

OS インベントリとリソースデータを BigQuery にエクスポートするには、次の操作を行います。

  1. 組織 ID を確認します。

    gcloud projects get-ancestors PROJECT_ID
    

    PROJECT_ID は、プロジェクトのプロジェクト ID に置き換えます。

  2. VM Manager によって 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 Manager ステータス レポートを生成する

インベントリ データをエクスポートしたら、BigQuery で SQL クエリを実行して、VM Manager のステータス レポートを生成できます。このレポートには、次の情報が表示されます。

  • 各 VM インスタンスで VM Manager 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. [実行] をクリックします。

データのクエリの詳細については、クエリの実行をご覧ください。

レポートを生成したら、データポータルを使用してカスタム ダッシュボードを作成できます。詳細については、データポータルでデータを分析するをご覧ください。

次のステップ