このドキュメントでは、組織、フォルダ、またはプロジェクトから BigQuery テーブルにアセット スナップショットをエクスポートし、インベントリに対してデータ分析を実行する方法について説明します。BigQuery は、カスタム スクリプトを使用しなくてもデータを分析し、有用な分析情報を提供できる SQL のような操作性を備えています。
始める前に
Cloud Asset Inventory コマンドを実行するプロジェクトで Cloud Asset Inventory API を有効にします。
アカウントに Cloud Asset Inventory API を呼び出すための適切なロールがあることを確認します。呼び出しタイプごとの個々の権限については、権限をご覧ください。
まだ作成していない場合は、エクスポート先の BigQuery データセットを作成します。
制限事項
BigQuery テーブルデータをエクスポートする場合、すべてのフィールドが Cloud Asset Inventory でサポートされているわけではありません。
numBytes、numLongTermBytes、numPhysicalBytes、numRowsなど、頻繁に変更されるアセット フィールドは、null値とともにエクスポートされる場合があります。BigQuery クラスタ化テーブルへのエクスポートはサポートされていません。
パーティション分割テーブルにエクスポートする場合を除き、既存のテーブルへのエクスポート出力の追加はサポートされていません。宛先テーブルは空にするか、上書きする必要があります。これを上書きするには、gcloud CLI で
--output-bigquery-forceフラグを使用するか、REST API で"force": trueを使用します。Google Kubernetes Engine(GKE)リソースタイプは、
container.googleapis.com/Clusterとcontainer.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",