アセットの一覧表示

Google Cloud プロジェクト、フォルダ、組織のアセットを一覧表示できます。

始める前に

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

    Cloud Asset Inventory API を有効にする

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

制限事項

  • BigQuery テーブルデータを一覧表示する場合、すべてのフィールドがサポートされているわけではありません。

  • BigQuery メタデータ内の頻繁に変更されるアセット フィールド(numBytesnumLongTermBytesnumPhysicalBytesnumRows など)には、null 値が割り当てられます。

アセットを一覧表示する

gcloud

gcloud asset list \
    --SCOPE \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --snapshot-time="SNAPSHOT_TIME"

次の値を指定します。

  • SCOPE: 次のいずれかの値を使用できます。

    • project=PROJECT_ID。ここで、PROJECT_ID は取得するアセットを含むプロジェクトの ID です。
    • folder=FOLDER_ID。ここで、FOLDER_ID は取得するアセットを含むフォルダの ID です。

      Google Cloud フォルダの ID を確認する方法

      Google Cloud コンソール

      Google Cloud フォルダの ID を確認する手順は次のとおりです。

      1. Google Cloud Console に移動します。

        Google Cloud コンソールに移動

      2. メニューバーの切り替えボックスをクリックします。
      3. リストボックスから組織を選択します。
      4. フォルダ名を検索します。フォルダ 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 を確認する手順は次のとおりです。

      1. Google Cloud Console に移動します。

        Google Cloud コンソールに移動

      2. メニューバーの切り替えボックスをクリックします。
      3. リストボックスから組織を選択します。
      4. [すべて] タブをクリックします。組織 ID が組織名の横に表示されます。

      gcloud CLI

      Google Cloud 組織の ID を取得するには、次のコマンドを使用します。

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_TYPE_#: 省略可。 検索可能なアセットタイプのカンマ区切りのリスト。RE2 互換の正規表現がサポートされています。正規表現が、サポートされているアセットタイプと一致しない場合は、INVALID_ARGUMENT エラーが返されます。--asset-types が指定されていない場合、すべてのアセットタイプが返されます。
  • CONTENT_TYPE: 省略可。 取得するメタデータのコンテンツ タイプ--content-type が指定されていない場合、アセット名、アセットの最終更新日、アセットが属するプロジェクト、フォルダ、組織などの基本情報のみが返されます。
  • RELATIONSHIP_TYPE_#: 省略可。 Security Command Center のプレミアム ティアと エンタープライズ ティアのサブスクライバーのみご利用いただけます。取得するアセット関係タイプのカンマ区切りのリスト。これを機能させるには、CONTENT_TYPERELATIONSHIP に設定する必要があります。
  • SNAPSHOT_TIME: 省略可。 アセットのスナップショットを撮る時刻(gcloud topic datetime 形式)。この値は過去 35 日以内にする必要があります。--snapshot-time が指定されていない場合、現在の時刻にスナップショットが作成されます。

すべてのオプションについては、gcloud CLI リファレンスをご覧ください。

次のコマンドは、my-project プロジェクトの 2024 年 1 月 30 日(2024-01-30)の Compute Engine インスタンスの resource メタデータ スナップショットを取得します。

このコマンドを実行する前に、スナップショット時間を過去 35 日以内に変更し、プロジェクト名を変更してください。

gcloud asset list \
    --project=my-project \
    --asset-types=compute.googleapis.com/Instance \
    --content-type=resource \
    --snapshot-time="2024-01-30"

レスポンスの例

---
ancestors:
- projects/000000000000
- folders/000000000000
- organizations/000000000000
assetType: compute.googleapis.com/Instance
name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-name
resource:
  data:
    ASSET_METADATA
updateTime: '2024-01-30T00:00:00.000000Z'

REST

HTTP メソッドと URL:

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH/assets

JSON 本文のリクエスト:

{
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "relationshipTypes": [
    "RELATIONSHIP_TYPE_1",
    "RELATIONSHIP_TYPE_2",
    "..."
  ],
  "readTime": "SNAPSHOT_TIME",
  "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 プロジェクト番号を確認するには、次の手順を行います。

      1. Google Cloud コンソールの [ようこそ] ページに移動します。

        [ようこそ] に移動

      2. メニューバーの切り替えボックスをクリックします。
      3. リストボックスから組織を選択し、プロジェクト名を検索します。プロジェクト名、プロジェクト番号、プロジェクト 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 を確認する手順は次のとおりです。

      1. Google Cloud Console に移動します。

        Google Cloud コンソールに移動

      2. メニューバーの切り替えボックスをクリックします。
      3. リストボックスから組織を選択します。
      4. フォルダ名を検索します。フォルダ 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 を確認する手順は次のとおりです。

      1. Google Cloud Console に移動します。

        Google Cloud コンソールに移動

      2. メニューバーの切り替えボックスをクリックします。
      3. リストボックスから組織を選択します。
      4. [すべて] タブをクリックします。組織 ID が組織名の横に表示されます。

      gcloud CLI

      Google Cloud 組織の ID を取得するには、次のコマンドを使用します。

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_TYPE_#: 省略可。 検索可能なアセットタイプの配列。RE2 互換の正規表現がサポートされています。正規表現が、サポートされているアセットタイプと一致しない場合は、INVALID_ARGUMENT エラーが返されます。assetTypes が指定されていない場合、すべてのアセットタイプが返されます。
  • CONTENT_TYPE: 省略可。 取得するメタデータのコンテンツ タイプcontentType が指定されていない場合、アセット名、アセットの最終更新日、アセットが属するプロジェクト、フォルダ、組織などの基本情報のみが返されます。
  • RELATIONSHIP_TYPE_#: 省略可。 Security Command Center のプレミアム ティアと エンタープライズ ティアのサブスクライバーのみご利用いただけます。取得するアセット関係タイプのカンマ区切りのリスト。これを機能させるには、CONTENT_TYPERELATIONSHIP に設定する必要があります。
  • SNAPSHOT_TIME: 省略可。 アセットのスナップショットを作成する時刻を RFC 3339 形式で表したもの。この値は過去 35 日以内にする必要があります。readTime が指定されていない場合、現在の時刻にスナップショットが撮影されます。
  • PAGE_SIZE: 省略可。 ページごとに返す結果の数を指定します。最大値は 500 です。値が 0 または負の値に設定されている場合は、適切なデフォルト値が選択されます。後続の結果を取得するために、nextPageToken が返されます。

  • PAGE_TOKEN: 省略可。 長いリクエスト レスポンスは複数のページに分割されます。pageToken が指定されていない場合、最初のページが返されます。後続のページを呼び出すには、前のレスポンスの nextPageTokenpageToken 値として使用します。

すべてのオプションについては、REST リファレンスをご覧ください。

コマンドの例

次のコマンドは、my-project プロジェクトの 2024 年 1 月 30 日(2024-01-30T00:00:00Z)の Compute Engine インスタンスの resource メタデータ スナップショットを取得します。

これらのコマンドを実行する前に、スナップショット時間を過去 35 日以内に変更し、プロジェクト名を変更してください。

curl(Linux、macOS、Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetTypes": ["compute.googleapis.com/Instance"],
            "contentType": "RESOURCE",
            "readTime": "2024-01-30T00:00:00Z"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project/assets

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetTypes": ["compute.googleapis.com/Instance"],
  "contentType": "RESOURCE",
  "readTime": "2024-01-30T00:00:00Z"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project/assets" | Select-Object -Expand Content

レスポンスの例

{
  "readTime": "2024-01-30T00:00:00Z",
  "assets": [
    {
      "name": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-name",
      "assetType": "compute.googleapis.com/Instance",
      "resource": {
        "version": "v1",
        "discoveryDocumentUri": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest",
        "discoveryName": "Instance",
        "parent": "//cloudresourcemanager.googleapis.com/projects/000000000000",
        "data": {
          ASSET_METADATA
        },
        "location": "us-central1-a"
      },
      "ancestors": [
        "projects/000000000000",
        "folders/000000000000",
        "organizations/000000000000"
      ],
    "updateTime": "2024-01-30T00:00:00.000000Z"
    }
  ]
}

C#

Cloud Asset Inventory 用のクライアント ライブラリをインストールして使用する方法については、Cloud Asset Inventory クライアント ライブラリをご覧ください。

Cloud Asset Inventory への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。


using Google.Api.Gax;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.Asset.V1;

public class ListAssetsSample
{
    public  PagedEnumerable<ListAssetsResponse, Asset> ListAssets(string projectId)
    {
        // Create the client.
        AssetServiceClient client = AssetServiceClient.Create();

        // Build the request.
        ListAssetsRequest request = new ListAssetsRequest
        {
            ParentAsResourceName = ProjectName.FromProject(projectId),
            ContentType = ContentType.Resource,
        };

        // Call the API.
         PagedEnumerable<ListAssetsResponse, Asset> response = client.ListAssets(request);

        // Return the result.
        return response;
    }
}

Go

Cloud Asset Inventory 用のクライアント ライブラリをインストールして使用する方法については、Cloud Asset Inventory クライアント ライブラリをご覧ください。

Cloud Asset Inventory への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。


// Sample list-assets list assets.
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"google.golang.org/api/iterator"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
)

func main() {
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatal(err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	assetType := "storage.googleapis.com/Bucket"
	req := &assetpb.ListAssetsRequest{
		Parent:      fmt.Sprintf("projects/%s", projectID),
		AssetTypes:  []string{assetType},
		ContentType: assetpb.ContentType_RESOURCE,
	}

	// Call ListAssets API to get an asset iterator.
	it := client.ListAssets(ctx, req)

	// Traverse and print the first 10 listed assets in response.
	for i := 0; i < 10; i++ {
		response, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			log.Fatal(err)
		}
		fmt.Println(response)
	}
}

Java

Cloud Asset Inventory 用のクライアント ライブラリをインストールして使用する方法については、Cloud Asset Inventory クライアント ライブラリをご覧ください。

Cloud Asset Inventory への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

// Imports the Google Cloud client library

public class ListAssetsExample {

  public static void listAssets() throws IOException, IllegalArgumentException {
    // The project id of the asset parent to list.
    String projectId = "YOUR_PROJECT_ID";
    // The asset types to list. E.g.,
    // ["storage.googleapis.com/Bucket", "bigquery.googleapis.com/Table"].
    // See full list of supported asset types at
    // https://cloud.google.com/asset-inventory/docs/supported-asset-types.
    String[] assetTypes = {"YOUR_ASSET_TYPES_TO_LIST"};
    // The asset content type to list. E.g., ContentType.CONTENT_TYPE_UNSPECIFIED.
    // See full list of content types at
    // https://cloud.google.com/asset-inventory/docs/reference/rpc/google.cloud.asset.v1#contenttype
    ContentType contentType = ContentType.CONTENT_TYPE_UNSPECIFIED;
    listAssets(projectId, assetTypes, contentType);
  }

  public static void listAssets(String projectId, String[] assetTypes, ContentType contentType)
      throws IOException, IllegalArgumentException {
    try (AssetServiceClient client = AssetServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);

      // Build initial ListAssetsRequest without setting page token.
      ListAssetsRequest request =
          ListAssetsRequest.newBuilder()
              .setParent(parent.toString())
              .addAllAssetTypes(Arrays.asList(assetTypes))
              .setContentType(contentType)
              .build();

      // Repeatedly call ListAssets until page token is empty.
      ListAssetsPagedResponse response = client.listAssets(request);
      System.out.println(response);
      while (!response.getNextPageToken().isEmpty()) {
        request = request.toBuilder().setPageToken(response.getNextPageToken()).build();
        response = client.listAssets(request);
        System.out.println(response);
      }
    }
  }
}

Node.js

Cloud Asset Inventory 用のクライアント ライブラリをインストールして使用する方法については、Cloud Asset Inventory クライアント ライブラリをご覧ください。

Cloud Asset Inventory への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const assetTypes = 'storage.googleapis.com/Bucket,bigquery.googleapis.com/Table';
// const contentType = 'RESOURCE';

const util = require('util');
const {v1} = require('@google-cloud/asset');
const client = new v1.AssetServiceClient();

const projectId = await client.getProjectId();
const projectResource = `projects/${projectId}`;
// TODO(developer): Choose types of assets to list, such as 'storage.googleapis.com/Bucket':
//   const assetTypes = 'storage.googleapis.com/Bucket,bigquery.googleapis.com/Table';
// Or simply use empty string to list all types of assets:
//   const assetTypes = '';
const assetTypesList = assetTypes ? assetTypes.split(',') : [];

async function listAssets() {
  const request = {
    parent: projectResource,
    assetTypes: assetTypesList,
    contentType: contentType,
    // (Optional) Add readTime parameter to list assets at the given time instead of current time:
    //   readTime: { seconds: 1593988758 },
  };

  // Call cloud.assets.v1.ListAssets API.
  const result = await client.listAssets(request);
  // Handle the response.
  console.log(util.inspect(result, {depth: null}));
}
listAssets();

PHP

Cloud Asset Inventory 用のクライアント ライブラリをインストールして使用する方法については、Cloud Asset Inventory クライアント ライブラリをご覧ください。

Cloud Asset Inventory への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

use Google\Cloud\Asset\V1\Client\AssetServiceClient;
use Google\Cloud\Asset\V1\ListAssetsRequest;

/**
 * @param string   $projectId  Tthe project Id for list assets.
 * @param string[] $assetTypes (Optional) Asset types to list for.
 * @param int      $pageSize   (Optional) Size of one result page.
 */
function list_assets(
    string $projectId,
    array $assetTypes = [],
    int $pageSize = null
): void {
    // Instantiate a client.
    $client = new AssetServiceClient();

    // Run request
    $request = (new ListAssetsRequest())
        ->setParent("projects/$projectId")
        ->setAssetTypes($assetTypes)
        ->setPageSize($pageSize);
    $response = $client->listAssets($request);

    // Print the asset names in the result
    foreach ($response->getPage() as $asset) {
        print($asset->getName() . PHP_EOL);
    }
}

Python

Cloud Asset Inventory 用のクライアント ライブラリをインストールして使用する方法については、Cloud Asset Inventory クライアント ライブラリをご覧ください。

Cloud Asset Inventory への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

from google.cloud import asset_v1

# TODO project_id = 'Your Google Cloud Project ID'
# TODO asset_types = 'Your asset type list, e.g.,
# ["storage.googleapis.com/Bucket","bigquery.googleapis.com/Table"]'
# TODO page_size = 'Num of assets in one page, which must be between 1 and
# 1000 (both inclusively)'
# TODO content_type ="Content type to list"

project_resource = f"projects/{project_id}"
client = asset_v1.AssetServiceClient()

# Call ListAssets v1 to list assets.
response = client.list_assets(
    request={
        "parent": project_resource,
        "read_time": None,
        "asset_types": asset_types,
        "content_type": content_type,
        "page_size": page_size,
    }
)

for asset in response:
    print(asset)

Ruby

Cloud Asset Inventory 用のクライアント ライブラリをインストールして使用する方法については、Cloud Asset Inventory クライアント ライブラリをご覧ください。

Cloud Asset Inventory への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

require "google/cloud/asset"

asset_service = Google::Cloud::Asset.asset_service
# project_id = 'YOUR_PROJECT_ID'
formatted_parent = asset_service.project_path project: project_id

content_type = :RESOURCE
response = asset_service.list_assets(
  parent:           formatted_parent,
  content_type:     content_type
)

# Do things with the result
response.page.each do |resource|
  puts resource
end