アセット メタデータを BigQuery にエクスポートする

このドキュメントでは、組織、フォルダ、またはプロジェクトから BigQuery テーブルにアセット スナップショットをエクスポートし、インベントリに対してデータ分析を実行する方法について説明します。BigQuery は、カスタム スクリプトを使用しなくてもデータを分析し、有用な分析情報を提供できる SQL のような操作性を備えています。

始める前に

  1. Cloud Asset Inventory コマンドを実行するプロジェクトで Cloud Asset Inventory API を有効にします。

    Cloud Asset Inventory API を有効にする

  2. アカウントに Cloud Asset Inventory API を呼び出すための適切なロールがあることを確認します。呼び出しタイプごとの個々の権限については、権限をご覧ください。

  3. まだ作成していない場合は、エクスポート先の BigQuery データセットを作成します。

制限事項

  • BigQuery テーブルデータをエクスポートする場合、すべてのフィールドが Cloud Asset Inventory でサポートされているわけではありません。

  • numBytesnumLongTermBytesnumPhysicalBytesnumRows など、頻繁に変更されるアセット フィールドは、null 値とともにエクスポートされる場合があります。

  • BigQuery クラスタ化テーブルへのエクスポートはサポートされていません。

  • パーティション分割テーブルにエクスポートする場合を除き、既存のテーブルへのエクスポート出力の追加はサポートされていません。宛先テーブルは空にするか、上書きする必要があります。これを上書きするには、gcloud CLI で --output-bigquery-force フラグを使用するか、REST API で "force": true を使用します。

  • Google Kubernetes Engine(GKE)リソースタイプは、container.googleapis.com/Clustercontainer.googleapis.com/NodePool を除き、リソースタイプごとに別々のテーブルにエクスポートする場合はサポートされません。

  • Cloud Asset Inventory は、同じ宛先への前回のリクエストが開始されてからの経過時間が 15 分未満であり、まだ実行されている場合にエクスポート リクエストを拒否します。ただし、エクスポートの完了に 15 分以上かかった場合は、完了としてマークされ、同じ宛先への新しいエクスポート リクエストが許可されます。

  • ACCESS_POLICY コンテンツ タイプは、組織レベルでのみエクスポートできます。

  • エクスポート先のテーブルがすでに存在し、エクスポート中の場合は、400 エラーが返されます。

大文字と小文字の区別

フィールド名では、リクエストされたコンテンツ タイプとエクスポート設定に応じて、異なるケーシング規則が使用されます。

  • アセットをアセットタイプごとにテーブルにエクスポートする場合、RESOURCE コンテンツ タイプでは、単語間にスペースがなく、最初の単語の後の各単語の最初の文字が大文字になります。例: assetType

  • 他のすべてのコンテンツ タイプでは、フィールド名は小文字で、スペースはアンダースコアに置き換えられます。例: asset_type

エクスポートに使用される BigQuery スキーマ

すべての BigQuery テーブルは、列名、データ型、その他の情報を記述するスキーマによって定義されます。エクスポートにコンテンツ タイプを設定すると、テーブルのスキーマが決まります。

  • リソースまたは未指定: コンテンツ タイプを RESOURCE に設定するか、指定せずに、per-asset-type フラグを false に設定するか、指定しない場合、次のスキーマを含む BigQuery テーブルを作成します。

    リソース スキーマ

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "version",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "discovery_document_uri",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "discovery_name",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "resource_url",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "parent",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "data",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "location",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "resource",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]

    resource.data 列は、JSON 文字列として表されるリソース メタデータです。

    コンテンツ タイプを RESOURCE に設定するか、設定せずに、per-asset-type フラグを true に設定する場合、アセットタイプごとに個別のテーブルを作成します。各テーブルのスキーマには、そのアセットタイプの Resource.data フィールドのネストされたフィールド(BigQuery でサポートされる最大 15 のネストレベルまで)にマッピングされた RECORD 型の列が含まれます。テーブルの例については、 Google Cloud コンソールの export-assets-examples をご覧ください。

  • IAM ポリシー: コンテンツ タイプをREST API で IAM_POLICY または gcloud CLI で iam-policy に設定した場合、次のスキーマを含む BigQuery テーブルを作成します。

    IAM ポリシーのスキーマ

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",