プロジェクト、フォルダ、組織内のアセットをクエリするには、BigQuery SQL 互換の言語を使用します。
始める前に
Cloud Asset Inventory コマンドを実行するプロジェクトで Cloud Asset Inventory API を有効にします。
アカウントに Cloud Asset Inventory API を呼び出すための適切なロールがあることを確認します。通話タイプごとの個々の権限については、権限をご覧ください。
制限事項
アセットタイプ名の
.
と/
が_
に置き換えられました。たとえば、compute.googleapis.com/Instance
はcompute_googleapis_com_Instance
になります。リクエストは
SELECT
クエリである必要があります。以前の BigQuery SQL はサポートされていません。
10 MB または 1,000 行を超えるクエリ結果は、常にページ分けされます。
クエリ可能なテーブル
次のテーブルにクエリを実行できます。
RESOURCE
コンテンツ タイプの場合、データセット内のテーブル名は、アセットタイプが存在することを前提として、アセットタイプ名に対応しています。たとえば、compute_googleapis_com_Instance
テーブルには Compute Engine インスタンスのメタデータが含まれています。RESOURCE
以外のコンテンツ タイプの場合、データセット内のテーブル名は RPC/REST コンテンツ タイプ名に対応しています。例:ACCESS_POLICY
リソースタイプ間でリソース標準メタデータをクエリするには、テーブル名
STANDARD_METADATA
を使用します。これには、各リソースタイプに固有のresource.DATA
を除くすべてのフィールドが含まれます。
アセットのメタデータをクエリする
Console
プロジェクト、フォルダ、組織のアセット メタデータをクエリするには、次の手順を実行します。
-
Google Cloud コンソールの Security Command Center の [アセット] ページに移動します。
- クエリするプロジェクト、フォルダ、または組織に変更します。
- [アセットクエリ] タブをクリックします。
-
アセットのメタデータをクエリするには、サンプルクエリを使用するか、独自のクエリを作成します。
- サンプルを使用するには、[クエリ ライブラリ] タブでエントリをクリックして、クエリをプレビューします。**適用** をクリックしてそのサンプルを [クエリを編集] ボックスにコピーし、クエリを編集するか、[実行] をクリックして実行します。
- 独自のクエリを作成するには、[クエリを編集] ボックスにクエリテキストを直接入力し、[実行] をクリックして実行します。独自のクエリを簡単に作成するには、[テーブルを選択] ペインでテーブルをクリックして、スキーマとコンテンツをプレビューします。クエリの作成方法については、 クエリ構文をご覧ください。
クエリに一致するアセット メタデータが [クエリ結果] タブに表示されます。
-
省略可: クエリ結果セットを CSV 形式でダウンロードするには、[エクスポート] をクリックします。
CSV ファイルの最大サイズは 2 MB です。ファイルサイズがこの制限を超え、ダウンロード リクエストが失敗した場合は、結果全体をエクスポートする手順を示すメッセージが表示されます。
gcloud
gcloud asset query \ --SCOPE \ --statement="SQL_SELECT_QUERY" \ --timeout="TIMEOUTs"
次の値を指定します。
-
SCOPE
: 次のいずれかの値を使用できます。-
project=PROJECT_ID
。ここで、PROJECT_ID
はクエリするアセットを含むプロジェクトの ID です。 -
folder=FOLDER_ID
。ここで、FOLDER_ID
はクエリするアセットを含むフォルダの ID です。Google Cloud フォルダの ID を確認する方法
Google Cloud コンソール
Google Cloud フォルダの ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- フォルダ名を検索します。フォルダ ID がフォルダ名の横に表示されます。
gcloud CLI
組織レベルの Google Cloud フォルダの ID を取得するには、次のコマンドを使用します。
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
ここで、TOP_LEVEL_FOLDER_NAME はフォルダ名の部分一致または完全一致です。
--format
フラグを削除すると、検出されたフォルダに関する詳細情報が表示されます。上記のコマンドは、フォルダ内のサブフォルダの ID を返しません。これを行うには、最上位フォルダの ID を使用して次のコマンドを実行します。
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
。ここで、ORGANIZATION_ID
はクエリするアセットを含む組織の ID です。Google Cloud 組織の ID を確認する方法
Google Cloud コンソール
Google Cloud 組織の ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- [すべて] タブをクリックします。組織 ID が組織名の横に表示されます。
gcloud CLI
Google Cloud 組織の ID を取得するには、次のコマンドを使用します。
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
SQL_SELECT_QUERY
: SQLSELECT
クエリ。 -
TIMEOUT
: 省略可。 クライアントがクエリの完了を待機してから続行するまでの最大時間(秒)。タイムアウトを使用してクエリを非同期で実行し、ジョブリファレンスを使用して後で結果を取得します。
すべてのオプションについては、gcloud CLI リファレンスをご覧ください。
例
次のコマンドを実行して、my-project
プロジェクトの最初の 2 つの Compute Engine インスタンスの名前とアセットタイプを取得します。
gcloud asset query \ --project=my-project \ --statement=" SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2"
完了したジョブのレスポンス
次のサンプルは、前の例のクエリに対するレスポンスを示しています。レスポンスにはジョブ参照が含まれ、ジョブが完了したかどうか(done: true
)が示されます。ジョブが完了している場合は、queryResult
オブジェクトに適切なデータが入力され、その後に結果が一覧表示されます。
done: true jobReference: 0000000000000000000000000000000000000000000000000000000000000000 queryResult: nextPageToken: '' totalRows: '2' name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1 assetType: compute.googleapis.com/Instance name: //compute.googleapis.com/projects/my-project/zones/us-central1-c/instances/instance-2 assetType: compute.googleapis.com/Instance
未完了のジョブのレスポンス
リクエストでタイムアウトを設定すると、クエリは非同期で実行され、ジョブが未完了であることを示すレスポンス(done: false
)が送信されます。このようなレスポンスには、ジョブ参照と未入力の queryResult
オブジェクトが含まれます。
done: false jobReference: 0000000000000000000000000000000000000000000000000000000000000000 queryResult: nextPageToken: '' totalRows: '0'
jobReference
値を使用すると、ジョブが完了してデータが利用可能になった後で、クエリ結果を後で取得できます。
REST
HTTP メソッドと URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets
JSON 本文のリクエスト:
{ "statement": "SQL_SELECT_QUERY", "timeout": "TIMEOUTs", "pageSize": "PAGE_SIZE", "pageToken": "PAGE_TOKEN" }
次の値を指定します。
-
SCOPE_PATH
: 次のいずれかの値を使用できます。使用できる値は次のとおりです。
-
projects/PROJECT_ID
。ここで、PROJECT_ID
はクエリするアセットを含むプロジェクトの ID です。 -
projects/PROJECT_NUMBER
。ここで、PROJECT_NUMBER
はクエリするアセットを含むプロジェクトの数です。Google Cloud プロジェクト番号を確認する方法
Google Cloud コンソール
Google Cloud プロジェクト番号を確認するには、次の手順を行います。
-
Google Cloud コンソールの [ようこそ] ページに移動します。
- メニューバーの切り替えボックスをクリックします。
-
リストボックスから組織を選択し、プロジェクト名を検索します。プロジェクト名、プロジェクト番号、プロジェクト ID は [ようこそ] 見出しの近くに表示されます。
最大 4,000 個のリソースが表示されます。目的のプロジェクトが表示されない場合は、[リソースの管理] ページに移動し、そのプロジェクトの名前を使用してリストをフィルタします。
gcloud CLI
Google Cloud プロジェクト番号を取得するには、次のコマンドを使用します。
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
。ここで、FOLDER_ID
はクエリするアセットを含むフォルダの ID です。Google Cloud フォルダの ID を確認する方法
Google Cloud コンソール
Google Cloud フォルダの ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- フォルダ名を検索します。フォルダ ID がフォルダ名の横に表示されます。
gcloud CLI
組織レベルの Google Cloud フォルダの ID を取得するには、次のコマンドを使用します。
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
ここで、TOP_LEVEL_FOLDER_NAME はフォルダ名の部分一致または完全一致です。
--format
フラグを削除すると、検出されたフォルダに関する詳細情報が表示されます。上記のコマンドは、フォルダ内のサブフォルダの ID を返しません。これを行うには、最上位フォルダの ID を使用して次のコマンドを実行します。
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
。ここで、ORGANIZATION_ID
はクエリするアセットを含む組織の ID です。Google Cloud 組織の ID を確認する方法
Google Cloud コンソール
Google Cloud 組織の ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- [すべて] タブをクリックします。組織 ID が組織名の横に表示されます。
gcloud CLI
Google Cloud 組織の ID を取得するには、次のコマンドを使用します。
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
SQL_SELECT_QUERY
: SQLSELECT
クエリ。 -
TIMEOUT
: 省略可。 クライアントがクエリの完了を待機してから続行するまでの最大時間(秒)。タイムアウトを使用してクエリを非同期で実行し、ジョブリファレンスを使用して後で結果を取得します。 -
PAGE_SIZE
: 省略可。 ページごとに返す結果の数を指定します。最大値は 500 です。値が0
または負の値に設定されている場合は、適切なデフォルト値が選択されます。後続の結果を取得するために、nextPageToken
が返されます。 -
PAGE_TOKEN
: 省略可。 長いリクエスト レスポンスは複数のページに分割されます。pageToken
が指定されていない場合は、最初のページが返されます。後続のページを呼び出すには、前のレスポンスのnextPageToken
をpageToken
値として使用します。
すべてのオプションについては、REST リファレンスをご覧ください。
コマンドの例
次のいずれかのコマンドを実行して、my-project
プロジェクト内の最初の 2 つの Compute Engine インスタンスの名前とアセットタイプを取得します。
curl(Linux、macOS、Cloud Shell)
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "statement": " SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2" }' \ https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets
PowerShell(Windows)
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } $body = @" { "statement": " SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2" } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content
完了したジョブのレスポンス
次のサンプルは、前の例のクエリに対するレスポンスを示しています。レスポンスにはジョブ参照が含まれ、ジョブが完了したかどうか("done": true
)が示されます。ジョブが完了している場合は、queryResult
オブジェクトに適切なデータが入力されます。
クエリ結果は、rows
(アセット メタデータを含む配列)と schema
(rows
配列内の各アセットのスキーマを記述するオブジェクト)に分割されます。これは、大規模なレスポンスでフィールド名と型の重複を最小限に抑えるために行われます。
同様に、rows
配列では、fields
と value
の代わりに f
と v
を使用して、レスポンスをできるだけ小さくしています。
{ "jobReference": "0000000000000000000000000000000000000000000000000000000000000000", "done": true, "queryResult": { "rows": [ { "f": [ { "v": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1" }, { "v": "compute.googleapis.com/Instance" } ] }, { "f": [ { "v": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-2" }, { "v": "compute.googleapis.com/Instance" } ] } ], "schema": { "fields": [ { "field": "name", "type": "STRING", "mode": "NULLABLE", "fields": [] }, { "field": "assetType", "type": "STRING", "mode": "NULLABLE", "fields": [] } ] }, "nextPageToken": "", "totalRows": "1" } }
未完了のジョブのレスポンス
リクエストでタイムアウトを設定すると、クエリは非同期で実行され、ジョブが未完了であることを示すレスポンス("done": false
)が送信されます。このようなレスポンスには、ジョブ参照と未入力の queryResult
オブジェクトが含まれます。
{ "jobReference": "0000000000000000000000000000000000000000000000000000000000000000", "done": false, "queryResult": { "rows": [], "schema": { "fields": [] }, "nextPageToken": "", "totalRows": "0" } }
jobReference
値を使用すると、ジョブが完了してデータが利用可能になった後で、クエリ結果を後で取得できます。
クエリ結果を後で取得する
完了に時間がかかったリクエストを後で取得するには、次のいずれかのリクエストを行います。
gcloud
gcloud asset query \ --SCOPE \ --job-reference="JOB_REFERENCE"
次の値を指定します。
-
SCOPE
: 次のいずれかの値を使用できます。-
project=PROJECT_ID
。ここで、PROJECT_ID
はクエリするアセットを含むプロジェクトの ID です。 -
folder=FOLDER_ID
。ここで、FOLDER_ID
はクエリするアセットを含むフォルダの ID です。Google Cloud フォルダの ID を確認する方法
Google Cloud コンソール
Google Cloud フォルダの ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- フォルダ名を検索します。フォルダ ID がフォルダ名の横に表示されます。
gcloud CLI
組織レベルの Google Cloud フォルダの ID を取得するには、次のコマンドを使用します。
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
ここで、TOP_LEVEL_FOLDER_NAME はフォルダ名の部分一致または完全一致です。
--format
フラグを削除すると、検出されたフォルダに関する詳細情報が表示されます。上記のコマンドは、フォルダ内のサブフォルダの ID を返しません。これを行うには、最上位フォルダの ID を使用して次のコマンドを実行します。
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
。ここで、ORGANIZATION_ID
はクエリするアセットを含む組織の ID です。Google Cloud 組織の ID を確認する方法
Google Cloud コンソール
Google Cloud 組織の ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- [すべて] タブをクリックします。組織 ID が組織名の横に表示されます。
gcloud CLI
Google Cloud 組織の ID を取得するには、次のコマンドを使用します。
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
JOB_REFERENCE
: 前のレスポンスで返されたジョブ参照値。
例
次のコマンドを実行して、my-project
プロジェクトで以前に実行したクエリの結果を取得します。
gcloud asset query \ --project=my-project \ --job-reference="0000000000000000000000000000000000000000000000000000000000000000"
REST
HTTP メソッドと URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets
JSON 本文のリクエスト:
{ "jobReference": "JOB_REFERENCE", "pageToken": "PAGE_TOKEN" }
次の値を指定します。
-
SCOPE_PATH
: 次のいずれかの値を使用できます。使用できる値は次のとおりです。
-
projects/PROJECT_ID
。ここで、PROJECT_ID
はクエリするアセットを含むプロジェクトの ID です。 -
projects/PROJECT_NUMBER
。ここで、PROJECT_NUMBER
はクエリするアセットを含むプロジェクトの数です。Google Cloud プロジェクト番号を確認する方法
Google Cloud コンソール
Google Cloud プロジェクト番号を確認するには、次の手順を行います。
-
Google Cloud コンソールの [ようこそ] ページに移動します。
- メニューバーの切り替えボックスをクリックします。
-
リストボックスから組織を選択し、プロジェクト名を検索します。プロジェクト名、プロジェクト番号、プロジェクト ID は [ようこそ] 見出しの近くに表示されます。
最大 4,000 個のリソースが表示されます。目的のプロジェクトが表示されない場合は、[リソースの管理] ページに移動し、そのプロジェクトの名前を使用してリストをフィルタします。
gcloud CLI
Google Cloud プロジェクト番号を取得するには、次のコマンドを使用します。
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
。ここで、FOLDER_ID
はクエリするアセットを含むフォルダの ID です。Google Cloud フォルダの ID を確認する方法
Google Cloud コンソール
Google Cloud フォルダの ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- フォルダ名を検索します。フォルダ ID がフォルダ名の横に表示されます。
gcloud CLI
組織レベルの Google Cloud フォルダの ID を取得するには、次のコマンドを使用します。
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
ここで、TOP_LEVEL_FOLDER_NAME はフォルダ名の部分一致または完全一致です。
--format
フラグを削除すると、検出されたフォルダに関する詳細情報が表示されます。上記のコマンドは、フォルダ内のサブフォルダの ID を返しません。これを行うには、最上位フォルダの ID を使用して次のコマンドを実行します。
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
。ここで、ORGANIZATION_ID
はクエリするアセットを含む組織の ID です。Google Cloud 組織の ID を確認する方法
Google Cloud コンソール
Google Cloud 組織の ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- [すべて] タブをクリックします。組織 ID が組織名の横に表示されます。
gcloud CLI
Google Cloud 組織の ID を取得するには、次のコマンドを使用します。
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
JOB_REFERENCE
: 前のレスポンスで返されたジョブ参照値。 -
PAGE_TOKEN
: 省略可。 長いリクエスト レスポンスは複数のページに分割されます。pageToken
が指定されていない場合、最初のページが返されます。後続のページを呼び出すには、前のレスポンスのnextPageToken
をpageToken
値として使用します。
コマンドの例
以前に実行したクエリの結果を取得するには、次のいずれかのコマンドを実行します。
curl(Linux、macOS、Cloud Shell)
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "jobReference": "0000000000000000000000000000000000000000000000000000000000000000" }' \ https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets
PowerShell(Windows)
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } $body = @" { "jobReference": "0000000000000000000000000000000000000000000000000000000000000000" } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content
クエリ結果を BigQuery にエクスポートする
クエリ結果は、Query Assets API レスポンスとして返されます。結果を独自の BigQuery テーブルにエクスポートするには、リクエストで BigQuery の宛先を指定します。まだ作成していない場合は、リクエストを行う前に BigQuery データセットを作成する必要があります。
gcloud
gcloud asset query \ --SCOPE \ --billing-project=BILLING_PROJECT_ID \ --statement="SQL_SELECT_QUERY" \ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \ --write-disposition="WRITE_METHOD"
次の値を指定します。
-
SCOPE
: 次のいずれかの値を使用できます。-
project=PROJECT_ID
。ここで、PROJECT_ID
は、SQL クエリでエクスポートするアセット メタデータを含むプロジェクトの ID です。 -
folder=FOLDER_ID
。ここで、FOLDER_ID
は、SQL クエリでエクスポートするアセット メタデータを含むフォルダの ID です。Google Cloud フォルダの ID を確認する方法
Google Cloud コンソール
Google Cloud フォルダの ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- フォルダ名を検索します。フォルダ ID がフォルダ名の横に表示されます。
gcloud CLI
組織レベルの Google Cloud フォルダの ID を取得するには、次のコマンドを使用します。
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
ここで、TOP_LEVEL_FOLDER_NAME はフォルダ名の部分一致または完全一致です。
--format
フラグを削除すると、検出されたフォルダに関する詳細情報が表示されます。上記のコマンドは、フォルダ内のサブフォルダの ID を返しません。これを行うには、最上位フォルダの ID を使用して次のコマンドを実行します。
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
。ここで、ORGANIZATION_ID
は、SQL クエリでエクスポートするアセット メタデータを含む組織の ID です。Google Cloud 組織の ID を確認する方法
Google Cloud コンソール
Google Cloud 組織の ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- [すべて] タブをクリックします。組織 ID が組織名の横に表示されます。
gcloud CLI
Google Cloud 組織の ID を取得するには、次のコマンドを使用します。
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
SQL_SELECT_QUERY
: SQLSELECT
クエリ。 -
BIGQUERY_PROJECT_ID
: エクスポート先の BigQuery テーブルが存在するプロジェクトの ID。 DATASET_ID
: BigQuery データセットの ID。-
TABLE_NAME
: メタデータのエクスポート先の BigQuery テーブル。存在しない場合は作成されます。 -
WRITE_METHOD
: BigQuery の宛先テーブルまたはパーティションがすでに存在する場合の動作を指定します。次の値を使用できます。-
write-empty
: デフォルト。既存のテーブルにデータが含まれている場合、ジョブ結果で重複エラーが返されます。 write-append
: テーブルまたは最新のパーティションにデータを追加します。-
write-truncate
: テーブル全体またはすべてのパーティション データを上書きします。
-
例
次のコマンドを実行して、my-project
プロジェクトの最初の 2 つの Compute Engine インスタンスの名前とアセットタイプを取得し、結果を my-project
プロジェクトの my-table
BigQuery テーブルにエクスポートします。テーブルがすでに存在する場合は、テーブル全体が上書きされます。
gcloud asset query \ --project=my-project \ --statement=" SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2" \ --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \ --write-disposition="write-truncate"
REST
HTTP メソッドと URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets
ヘッダー:
X-Goog-User-Project: BILLING_PROJECT_ID
JSON 本文のリクエスト:
{ "statement": "SQL_SELECT_QUERY", "outputConfig": { "bigqueryDestination": { "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID", "table": "TABLE_NAME", "writeDisposition": "WRITE_METHOD" } }, "pageSize": "PAGE_SIZE" }
次の値を指定します。
-
SCOPE_PATH
: 次のいずれかの値を使用できます。使用できる値は次のとおりです。
-
projects/PROJECT_ID
。ここで、PROJECT_ID
は、SQL クエリでエクスポートするアセット メタデータを含むプロジェクトの ID です。 -
projects/PROJECT_NUMBER
。ここで、PROJECT_NUMBER
は、SQL クエリでエクスポートするアセット メタデータを含むプロジェクトの数です。Google Cloud プロジェクト番号を確認する方法
Google Cloud コンソール
Google Cloud プロジェクト番号を確認するには、次の手順を行います。
-
Google Cloud コンソールの [ようこそ] ページに移動します。
- メニューバーの切り替えボックスをクリックします。
-
リストボックスから組織を選択し、プロジェクト名を検索します。プロジェクト名、プロジェクト番号、プロジェクト ID は [ようこそ] 見出しの近くに表示されます。
最大 4,000 個のリソースが表示されます。目的のプロジェクトが表示されない場合は、[リソースの管理] ページに移動し、そのプロジェクトの名前を使用してリストをフィルタします。
gcloud CLI
Google Cloud プロジェクト番号を取得するには、次のコマンドを使用します。
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
。ここで、FOLDER_ID
は、SQL クエリでエクスポートするアセット メタデータを含むフォルダの ID です。Google Cloud フォルダの ID を確認する方法
Google Cloud コンソール
Google Cloud フォルダの ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- フォルダ名を検索します。フォルダ ID がフォルダ名の横に表示されます。
gcloud CLI
組織レベルの Google Cloud フォルダの ID を取得するには、次のコマンドを使用します。
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
ここで、TOP_LEVEL_FOLDER_NAME はフォルダ名の部分一致または完全一致です。
--format
フラグを削除すると、検出されたフォルダに関する詳細情報が表示されます。上記のコマンドは、フォルダ内のサブフォルダの ID を返しません。これを行うには、最上位フォルダの ID を使用して次のコマンドを実行します。
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
。ここで、ORGANIZATION_ID
は、SQL クエリでエクスポートするアセット メタデータを含む組織の ID です。Google Cloud 組織の ID を確認する方法
Google Cloud コンソール
Google Cloud 組織の ID を確認する手順は次のとおりです。
-
Google Cloud Console に移動します。
- メニューバーの切り替えボックスをクリックします。
- リストボックスから組織を選択します。
- [すべて] タブをクリックします。組織 ID が組織名の横に表示されます。
gcloud CLI
Google Cloud 組織の ID を取得するには、次のコマンドを使用します。
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: デフォルトの Cloud Asset Inventory サービス エージェントが存在する、BigQuery のデータセットとテーブルを管理する権限を持つプロジェクト ID。 課金プロジェクトの設定の詳細 -
SQL_SELECT_QUERY
: SQLSELECT
クエリ。 -
BIGQUERY_PROJECT_ID
: エクスポート先の BigQuery テーブルが存在するプロジェクトの ID。 DATASET_ID
: BigQuery データセットの ID。-
TABLE_NAME
: メタデータのエクスポート先の BigQuery テーブル。存在しない場合は作成されます。 -
WRITE_METHOD
: BigQuery の宛先テーブルまたはパーティションがすでに存在する場合の動作を指定します。次の値を使用できます。-
WRITE_EMPTY
: デフォルト。既存のテーブルにデータが含まれている場合、ジョブ結果で重複エラーが返されます。 WRITE_APPEND
: テーブルまたは最新のパーティションにデータを追加します。-
WRITE_TRUNCATE
: テーブル全体またはすべてのパーティション データを上書きします。
-
-
PAGE_SIZE
: 省略可。 ページごとに返す結果の数を指定します。最大値は 500 です。値が0
または負の値に設定されている場合は、適切なデフォルト値が選択されます。後続の結果を取得するために、nextPageToken
が返されます。
コマンドの例
次のいずれかのコマンドを実行して、my-project
プロジェクトの最初の 2 つの Compute Engine インスタンスの名前とアセットタイプを取得し、結果を my-project
プロジェクトの my-table
BigQuery テーブルにエクスポートします。テーブルがすでに存在する場合は、テーブル全体を上書きします。
curl(Linux、macOS、Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "statement": " SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "writeDisposition": "WRITE_TRUNCATE" } } }' \ https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets
PowerShell(Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "statement": " SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "writeDisposition": "WRITE_TRUNCATE" } } } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content
その他の SQL クエリの例
次のコードサンプルは、アセットの検索に使用できる特定の SQL クエリを示しています。独自のクエリを作成する場合に役立ちます。
特定のリージョンの Compute Engine VM インスタンス
また、name
と作成日時も返します。
SELECT
name,
resource.DATA.creationTimestamp
FROM
compute_googleapis_com_Instance
WHERE
resource.location LIKE '%asia%'
各プロジェクトに含まれる BigQuery データセットの数
SELECT
ancestor AS project,
COUNT(*)
FROM
bigquery_googleapis_com_Dataset
CROSS JOIN
UNNEST (ancestors) AS ancestor
WHERE
ancestor LIKE '%project%'
GROUP BY
ancestor
ORDER BY
2 DESC
各リージョンにある Compute Engine VM インスタンスの数
SELECT
resource.location,
COUNT(*)
FROM
compute_googleapis_com_Instance
GROUP BY
resource.location
リージョン内のすべてのリソースの名前と assetType
SELECT
name,
assetType
FROM
STANDARD_METADATA
WHERE
resource.location LIKE '%asia%'
一般公開されている Cloud Storage バケット
また、name
を返します。
SELECT
name
FROM
IAM_POLICY
CROSS JOIN
UNNEST(iamPolicy.bindings) AS binding
WHERE
('allUsers' IN UNNEST(binding.members)
OR 'allAuthenticatedUsers' IN UNNEST(binding.members))
AND assetType = 'storage.googleapis.com/Bucket'
VM インスタンスが接続されていないサブネットワーク
SELECT
subnetwork_table.name
FROM
compute_googleapis_com_Subnetwork AS subnetwork_table
LEFT JOIN (
SELECT
interface.subnetwork AS subnetwork
FROM
compute_googleapis_com_Instance
CROSS JOIN
UNNEST(resource.DATA.networkInterfaces) AS interface) AS instance_table
ON
SUBSTR(subnetwork_table.name, 25) = SUBSTR(instance_table.subnetwork,38)
WHERE
instance_table.subnetwork IS NULL
AND NOT subnetwork_table.name LIKE '%default%'