Pub/Sub を使用してアセットの変更をモニタリングする

フィードを作成して登録すると、リソースとポリシーの変更に関するリアルタイム通知を受け取ることができます。

フィードを作成するときに、組織内、フォルダ内、プロジェクト内についてサポートされているリソースタイプ、IAM ポリシー、アクセス ポリシー、組織のポリシーの変更をモニタリングするよう指定できます。また、フィードに条件を追加して、アセットに対する特定の種類の変更に関する通知のみを受け取ることもできます。

フィードを作成すると、指定したアセットが変更されるたびに Pub/Sub を介して通知が届きます。Pub/Sub トピックに最初に公開されるメッセージは、文字列形式のウェルカム メッセージで、後続のすべてのメッセージは TemporalAsset の形式です。

以下は、RESOURCE コンテンツ タイプの Pub/Sub メッセージの例です。

{
  "asset":{
    "ancestors":[
      "projects/000000000000",
      "folders/000000000000",
      "organizations/000000000000"
    ],
    "assetType":"storage.googleapis.com/Bucket",
    "name":"//storage.googleapis.com/my-bucket",
    "resource":{
      "data":{
        LATEST_ASSET_METADATA
      },
      "discoveryDocumentUri":"https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
      "discoveryName":"Bucket",
      "location":"us",
      "parent":"//cloudresourcemanager.googleapis.com/projects/000000000000",
      "version":"v1"
    },
    "updateTime":"2024-01-30T00:00:00.000000Z"
  },
  "priorAsset":{
    "ancestors":[
      "projects/000000000000",
      "folders/000000000000",
      "organizations/000000000000"
    ],
    "assetType":"storage.googleapis.com/Bucket",
    "name":"//storage.googleapis.com/my-bucket",
    "resource":{
      "data":{
        PREVIOUS_ASSET_METADATA
      },
      "discoveryDocumentUri":"https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
      "discoveryName":"Bucket",
      "location":"us",
      "parent":"//cloudresourcemanager.googleapis.com/projects/000000000000",
      "version":"v1"
    },
    "updateTime":"2024-01-29T00:00:00.000000Z"
  },
  "priorAssetState":"PRESENT",
  "window":{
    "startTime":"2024-01-30T00:00:00.000000Z"
  }
}

Pub/Sub またはサブスクリプションの設定方法の詳細については、Pub/Sub のドキュメントをご覧ください。

始める前に

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

    Cloud Asset Inventory API を有効にする

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

  3. Pub/Sub トピックをまだ作成していない場合は、Pub/Sub トピックを作成します。

制限事項

  • フィードの作成、更新、削除が有効になるまで、最大で 10 分かかることがあります。

  • フィードが作成されるプロジェクトは、フィードよりも長く存続する必要があります。これは、宛先の Pub/Sub トピックへの公開に使用されるサービス アカウントがそのプロジェクト内にあるためです。プロジェクト削除が確定されるとすぐに、フィードは機能しなくなって削除されます。

  • 親には最大 200 個のフィードを作成できます。この上限は、その親の直後のフィードのみに適用され、その子のフィードは計上されません。たとえば、ある組織に 10 個のプロジェクトがある場合、各プロジェクトは最大 200 個のフィードを持ち、組織は最大 200 個のフィードを持つことができます。

フィードを作成する

gcloud

gcloud asset feeds create FEED_ID \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --pubsub-topic=projects/TOPIC_PROJECT_ID/topics/TOPIC_ID \
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --condition-title="CONDITION_TITLE" \
    --condition-description="CONDITION_DESCRIPTION" \
    --condition-expression="CONDITION_EXPRESSION"

次の値を指定します。

  • 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))"
  • FEED_ID: 一意のアセット フィード識別子。
  • BILLING_PROJECT_ID: 省略可。 Pub/Sub トピックを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

  • TOPIC_PROJECT_ID: Pub/Sub トピックが配置されているプロジェクトの ID。
  • TOPIC_ID: 通知公開先の Pub/Sub トピックの ID。
  • 次のアセット定義の少なくとも 1 つ:
    • ASSET_NAME_#: 省略可。 アセットのフルネームのカンマ区切りのリスト。
    • ASSET_TYPE_#: 省略可。 検索可能なアセットタイプのカンマ区切りのリスト。RE2 互換の正規表現がサポートされています。正規表現が、サポートされているアセットタイプと一致しない場合は、INVALID_ARGUMENT エラーが返されます。--asset-types が指定されていない場合、すべてのアセットタイプが返されます。
  • CONTENT_TYPE: 省略可。 取得するメタデータのコンテンツ タイプ--content-type が指定されていない場合、アセット名、アセットの最終更新日、アセットが属するプロジェクト、フォルダ、組織などの基本情報のみが返されます。
  • RELATIONSHIP_TYPE_#: 省略可。 Security Command Center Premium ティアと Enterprise ティアのサブスクライバーのみご利用いただけます。取得するアセット関係タイプのカンマ区切りのリスト。これを機能させるには、CONTENT_TYPERELATIONSHIP に設定する必要があります。
  • オプションのフィード条件を追加する場合は、コマンドに次の詳細を含めます。
    • CONDITION_TITLE: フィード条件に割り当てるタイトル。
    • CONDITION_DESCRIPTION: フィード条件に割り当てる説明。
    • フィードに適用するCONDITION_EXPRESSION条件式。

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

次のコマンドを実行して、my-project プロジェクト内の次のリソースが変更されたときに通知するフィードを my-topic Pub/Sub トピックに作成します。

  • my-bucket Cloud Storage バケット
  • 任意の BigQuery テーブル
gcloud asset feeds create my-feed \
    --project=my-project \
    --pubsub-topic=projects/my-project/topics/my-topic \
    --asset-names=//storage.googleapis.com/my-bucket \
    --asset-types=bigquery.googleapis.com/Table \
    --content-type=resource

レスポンスの例

assetNames:
- //storage.googleapis.com/my-bucket
assetTypes:
- bigquery.googleapis.com/Table
condition: {}
contentType: RESOURCE
feedOutputConfig:
  pubsubDestination:
    topic: projects/my-project/topics/my-topic
name: projects/000000000000/feeds/my-feed

REST

HTTP メソッドと URL:

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

ヘッダー:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON 本文のリクエスト:

{
  "feedId": "FEED_ID",
  "feed": {
    "assetNames": [
      "ASSET_NAME_1",
      "ASSET_NAME_2",
      "..."
    ],
    "assetTypes": [
      "ASSET_TYPE_1",
      "ASSET_TYPE_2",
      "..."
    ],
    "contentType": "CONTENT_TYPE",
    "relationshipTypes": [
      "RELATIONSHIP_TYPE_1",
      "RELATIONSHIP_TYPE_2",
      "..."
    ],
    "feedOutputConfig": {
      "pubsubDestination": {
        "topic": "projects/TOPIC_PROJECT_ID/topics/TOPIC_ID"
      }
    },
    "condition": {
      "title": "CONDITION_TITLE",
      "description": "CONDITION_DESCRIPTION",
      "expression": "CONDITION_EXPRESSION"
    }
  }
}

次の値を指定します。

  • 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))"
  • BILLING_PROJECT_ID: Pub/Sub トピックを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

  • FEED_ID: 一意のアセット フィード識別子。
  • 次のアセット定義の少なくとも 1 つ:
  • CONTENT_TYPE: 省略可。 取得するメタデータのコンテンツ タイプcontentType が指定されていない場合、アセット名、アセットの最終更新日、アセットが属するプロジェクト、フォルダ、組織などの基本情報のみが返されます。
  • RELATIONSHIP_TYPE_#: 省略可。 Security Command Center Premium ティアと Enterprise ティアのサブスクライバーのみご利用いただけます。取得するアセット関係タイプのカンマ区切りのリスト。これを機能させるには、CONTENT_TYPERELATIONSHIP に設定する必要があります。
  • TOPIC_PROJECT_ID: Pub/Sub トピックが配置されているプロジェクトの ID。
  • TOPIC_ID: 通知公開先の Pub/Sub トピックの ID。
  • オプションのフィード条件を追加する場合は、コマンドに次の詳細を含めます。
    • CONDITION_TITLE: フィード条件に割り当てるタイトル。
    • CONDITION_DESCRIPTION: フィード条件に割り当てる説明。
    • フィードに適用するCONDITION_EXPRESSION条件式。

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

コマンドの例

次のコマンドのいずれかを実行して、my-project プロジェクト内の次のリソースが変更されたときに通知するフィードを my-topic Pub/Sub トピックに作成します。

  • my-bucket Cloud Storage バケット
  • 任意の 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 '{
            "feedId": "my-feed",
            "feed": {
              "assetNames": [
                "//storage.googleapis.com/my-bucket"
              ],
              "assetTypes": [
                "bigquery.googleapis.com/Table"
              ],
              "contentType": "RESOURCE",
              "feedOutputConfig": {
                "pubsubDestination": {
                  "topic": "projects/my-project/topics/my-topic"
                }
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project/feeds

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "feedId": "my-feed",
  "feed": {
    "assetNames": [
      "//storage.googleapis.com/my-bucket"
    ],
    "assetTypes": [
      "bigquery.googleapis.com/Table"
    ],
    "contentType": "RESOURCE",
    "feedOutputConfig": {
      "pubsubDestination": {
        "topic": "projects/my-project/topics/my-topic"
      }
    }
  }
}
"@

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

レスポンスの例

{
  "name": "projects/000000000000/feeds/my-feed",
  "assetNames": [
    "//storage.googleapis.com/my-bucket"
  ],
  "assetTypes": [
    "bigquery.googleapis.com/Table"
  ],
  "contentType": "RESOURCE",
  "feedOutputConfig": {
    "pubsubDestination": {
      "topic": "projects/my-project/topics/my-topic"
    }
  }
}

Go

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

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


// Sample create-feed create feed.
package main

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

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

// Command-line flags.
var (
	feedID = flag.String("feed_id", "YOUR_FEED_ID", "Identifier of Feed.")
)

func main() {
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	feedParent := fmt.Sprintf("projects/%s", projectID)
	assetNames := []string{"YOUR_ASSET_NAME"}
	topic := fmt.Sprintf("projects/%s/topics/%s", projectID, "YOUR_TOPIC_NAME")

	req := &assetpb.CreateFeedRequest{
		Parent: feedParent,
		FeedId: *feedID,
		Feed: &assetpb.Feed{
			AssetNames: assetNames,
			FeedOutputConfig: &assetpb.FeedOutputConfig{
				Destination: &assetpb.FeedOutputConfig_PubsubDestination{
					PubsubDestination: &assetpb.PubsubDestination{
						Topic: topic,
					},
				},
			},
		}}
	response, err := client.CreateFeed(ctx, req)
	if err != nil {
		log.Fatalf("client.CreateFeed: %v", err)
	}
	fmt.Print(response)
}

Java

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

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

import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.ContentType;
import com.google.cloud.asset.v1.CreateFeedRequest;
import com.google.cloud.asset.v1.Feed;
import com.google.cloud.asset.v1.FeedOutputConfig;
import com.google.cloud.asset.v1.ProjectName;
import com.google.cloud.asset.v1.PubsubDestination;
import java.io.IOException;
import java.util.Arrays;

public class CreateFeedExample {
  // Create a feed
  public static void createFeed(
      String[] assetNames, String feedId, String topic, String projectId, ContentType contentType)
      throws IOException, IllegalArgumentException {
    // String[] assetNames = {"MY_ASSET_NAME"}
    // ContentType contentType = contentType
    // String FeedId = "MY_FEED_ID"
    // String topic = "projects/[PROJECT_ID]/topics/[TOPIC_NAME]"
    // String projectID = "MY_PROJECT_ID"
    Feed feed =
        Feed.newBuilder()
            .addAllAssetNames(Arrays.asList(assetNames))
            .setContentType(contentType)
            .setFeedOutputConfig(
                FeedOutputConfig.newBuilder()
                    .setPubsubDestination(PubsubDestination.newBuilder().setTopic(topic).build())
                    .build())
            .build();
    CreateFeedRequest request =
        CreateFeedRequest.newBuilder()
            .setParent(String.format(ProjectName.of(projectId).toString()))
            .setFeedId(feedId)
            .setFeed(feed)
            .build();
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      Feed response = client.createFeed(request);
      System.out.println("Feed created successfully: " + response.getName());
    } catch (IOException | IllegalArgumentException e) {
      System.out.println("Error during CreateFeed: \n" + e.toString());
    }
  }
}

Node.js

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

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

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const feedId = 'my feed';
// const assetNames = '//storage.googleapis.com/<BUCKET_NAME1>,//storage.googleapis.com/<BUCKET_NAME2>';
// const topicName = 'projects/<PROJECT_ID>/topics/<TOPIC_ID>'
// const contentType = 'RESOURCE';

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

const client = new AssetServiceClient();

async function createFeed() {
  const projectId = await client.getProjectId();
  // TODO(developer): Choose asset names, such as //storage.googleapis.com/[YOUR_BUCKET_NAME].
  // const assetNames = ['ASSET_NAME1', 'ASSET_NAME2', ...];

  const request = {
    parent: `projects/${projectId}`,
    feedId: feedId,
    feed: {
      assetNames: assetNames.split(','),
      contentType: contentType,
      feedOutputConfig: {
        pubsubDestination: {
          topic: topicName,
        },
      },
    },
  };

  // Handle the operation using the promise pattern.
  const result = await client.createFeed(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));

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 feed_id = 'Feed ID you want to create'
# TODO asset_names = 'List of asset names the feed listen to'
# TODO topic = "Topic name of the feed"
# TODO content_type ="Content type of the feed"

client = asset_v1.AssetServiceClient()
parent = f"projects/{project_id}"
feed = asset_v1.Feed()
feed.asset_names.extend(asset_names)
feed.feed_output_config.pubsub_destination.topic = topic
feed.content_type = content_type
response = client.create_feed(
    request={"parent": parent, "feed_id": feed_id, "feed": feed}
)
print(f"feed: {response}")

Ruby

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

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

require "google/cloud/asset"

# project_id = 'YOUR_PROJECT_ID'
# feed_id = 'NAME_OF_FEED'
# pubsub_topic = 'YOUR_PUBSUB_TOPIC'
# asset names, e.g.: //storage.googleapis.com/[YOUR_BUCKET_NAME]
# asset_names = [ASSET_NAMES, COMMMA_DELIMTTED]
asset_service = Google::Cloud::Asset.asset_service

formatted_parent = asset_service.project_path project: project_id

feed = {
  asset_names:        asset_names,
  feed_output_config: {
    pubsub_destination: {
      topic: pubsub_topic
    }
  }
}
response = asset_service.create_feed(
  parent:  formatted_parent,
  feed_id: feed_id,
  feed:    feed
)
puts "Created feed: #{response.name}"

フィードの取得

gcloud

gcloud asset feeds describe FEED_ID \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID

次の値を指定します。

  • 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))"
  • BILLING_PROJECT_ID: Pub/Sub トピックを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

  • FEED_ID: 一意のアセット フィード識別子。

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

レスポンスの例

assetNames:
- //storage.googleapis.com/my-bucket
assetTypes:
- bigquery.googleapis.com/Table
condition: {}
contentType: RESOURCE
feedOutputConfig:
  pubsubDestination:
    topic: projects/my-project/topics/my-topic
name: projects/000000000000/feeds/my-feed

REST

HTTP メソッドと URL:

GET https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID

ヘッダー:

X-Goog-User-Project: BILLING_PROJECT_ID

次の値を指定します。

  • 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))"
  • BILLING_PROJECT_ID: デフォルトの Cloud Asset Inventory サービス エージェントが存在する、BigQuery のデータセットとテーブルを管理する権限を持つプロジェクト ID。課金プロジェクトの設定の詳細

  • FEED_ID: 一意のアセット フィード識別子。

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

コマンドの例

特定のフィードを取得するには、次のいずれかのコマンドを実行します。

curl(Linux、macOS、Cloud Shell)

curl -X GET \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed" | Select-Object -Expand Content

レスポンスの例

{
  "name": "projects/000000000000/feeds/my-feed",
  "assetNames": [
    "//storage.googleapis.com/my-bucket"
  ],
  "assetTypes": [
    "bigquery.googleapis.com/Table"
  ],
  "contentType": "RESOURCE",
  "feedOutputConfig": {
    "pubsubDestination": {
      "topic": "projects/my-project/topics/my-topic"
    }
  }
}

Go

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

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


// Sample get-feed get feed.
package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"os"
	"strconv"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
)

// Command-line flags.
var (
	feedID = flag.String("feed_id", "YOUR_FEED_ID", "Identifier of Feed.")
)

func main() {
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	cloudresourcemanagerClient, err := cloudresourcemanager.NewService(ctx)
	if err != nil {
		log.Fatalf("cloudresourcemanager.NewService: %v", err)
	}

	project, err := cloudresourcemanagerClient.Projects.Get(projectID).Do()
	if err != nil {
		log.Fatalf("cloudresourcemanagerClient.Projects.Get.Do: %v", err)
	}
	projectNumber := strconv.FormatInt(project.ProjectNumber, 10)
	feedName := fmt.Sprintf("projects/%s/feeds/%s", projectNumber, *feedID)
	req := &assetpb.GetFeedRequest{
		Name: feedName}
	response, err := client.GetFeed(ctx, req)
	if err != nil {
		log.Fatalf("client.GetFeed: %v", err)
	}
	fmt.Print(response)
}

Java

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

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

import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.Feed;

public class GetFeedExample {

  // Get a feed with full feed name
  public static void getFeed(String feedName) throws Exception {
    // String feedName = "MY_FEED_NAME"

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      Feed feed = client.getFeed(feedName);
      System.out.println("Get a feed: " + feedName);
    } catch (Exception e) {
      System.out.println("Error during GetFeed: \n" + e.toString());
    }
  }
}

Node.js

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

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

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

const client = new AssetServiceClient();

async function getFeed() {
  const request = {
    name: feedName,
  };

  // Handle the operation using the promise pattern.
  const result = await client.getFeed(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));
}
getFeed();

Python

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

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

from google.cloud import asset_v1

# TODO feed_name = 'Feed Name you want to get'

client = asset_v1.AssetServiceClient()
response = client.get_feed(request={"name": feed_name})
print(f"gotten_feed: {response}")

フィードの一覧表示

プロジェクト、フォルダ、組織に対するすべてのフィードを一覧表示するには、次のいずれかのリクエストを行います。

gcloud

gcloud asset feeds list \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID

次の値を指定します。

  • 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))"
  • BILLING_PROJECT_ID: Pub/Sub トピックを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

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

レスポンスの例

- assetNames:
  - //storage.googleapis.com/my-bucket
  assetTypes:
  - bigquery.googleapis.com/Table
  condition: {}
  contentType: RESOURCE
  feedOutputConfig:
    pubsubDestination:
      topic: projects/my-project/topics/my-topic
  name: projects/000000000000/feeds/my-feed

REST

HTTP メソッドと URL:

GET https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds

ヘッダー:

X-Goog-User-Project: BILLING_PROJECT_ID

次の値を指定します。

  • 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))"
  • BILLING_PROJECT_ID: デフォルトの Cloud Asset Inventory サービス エージェントが存在する、BigQuery のデータセットとテーブルを管理する権限を持つプロジェクト ID。課金プロジェクトの設定の詳細

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

コマンドの例

次のいずれかのコマンドを実行して、my-project プロジェクト内のすべてのフィードを一覧表示します。

curl(Linux、macOS、Cloud Shell)

curl -X GET \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudasset.googleapis.com/v1/projects/my-project/feeds

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project/feeds" | Select-Object -Expand Content

レスポンスの例

{
  "feeds": [
    {
      "name": "projects/000000000000/feeds/my-feed",
      "assetNames": [
        "//storage.googleapis.com/my-bucket"
      ],
      "assetTypes": [
        "bigquery.googleapis.com/Table"
      ],
      "contentType": "RESOURCE",
      "feedOutputConfig": {
        "pubsubDestination": {
          "topic": "projects/my-project/topics/my-topic"
        }
      }
    }
  ]
}

Go

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

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


// Sample list-feeds list feeds.
package main

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

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
)

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

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	cloudresourcemanagerClient, err := cloudresourcemanager.NewService(ctx)
	if err != nil {
		log.Fatalf("cloudresourcemanager.NewService: %v", err)
	}

	project, err := cloudresourcemanagerClient.Projects.Get(projectID).Do()
	if err != nil {
		log.Fatalf("cloudresourcemanagerClient.Projects.Get.Do: %v", err)
	}
	projectNumber := strconv.FormatInt(project.ProjectNumber, 10)
	parent := fmt.Sprintf("projects/%s", projectNumber)
	req := &assetpb.ListFeedsRequest{
		Parent: parent}
	response, err := client.ListFeeds(ctx, req)
	if err != nil {
		log.Fatalf("client.ListFeeds: %v", err)
	}
	fmt.Print(response)
}

Java

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

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

import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.ListFeedsResponse;
import com.google.cloud.asset.v1.ProjectName;

public class ListFeedsExample {
  // List feeds in a project.
  public static void listFeeds(String projectId) throws Exception {
    // String projectId = "MY_PROJECT_ID"
    // String topic = "projects/[PROJECT_ID]/topics/[TOPIC_NAME]"

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      ListFeedsResponse response = client.listFeeds(ProjectName.of(projectId).toString());
      System.out.println("Listed feeds under: " + projectId);
    } catch (Exception e) {
      System.out.println("Error during ListFeeds: \n" + e.toString());
    }
  }
}

Node.js

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

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

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

const client = new AssetServiceClient();

async function listFeeds() {
  const projectId = await client.getProjectId();

  const request = {
    parent: `projects/${projectId}`,
  };

  // Handle the operation using the promise pattern.
  const result = await client.listFeeds(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));

Python

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

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

from google.cloud import asset_v1

# TODO parent_resource = 'Parent resource you want to list all feeds'

client = asset_v1.AssetServiceClient()
response = client.list_feeds(request={"parent": parent_resource})
print(f"feeds: {response.feeds}")

フィードの更新

既存のフィードの属性は、次の方法で更新できます。

  • 特定のアセット名の追加と削除、またはフィードからのすべてのアセット名の消去。

  • 特定のアセットタイプの追加と削除、またはフィードからのすべてのアセットタイプの消去。

  • 条件のオーバーライド、またはフィードからの条件の削除。

gcloud

gcloud asset feeds update FEED_ID \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --pubsub-topic=projects/TOPIC_PROJECT_ID/topics/TOPIC_ID \
    --clear-asset-names \
    --add-asset-names=ASSET_NAME_1,ASSET_NAME_2,... \
    --remove-asset-names=ASSET_NAME_3,ASSET_NAME_4,... \
    --clear-asset-types \
    --add-asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --remove-asset-types=ASSET_TYPE_3,ASSET_TYPE_4,... \
    --clear-content-type \
    --content-type=CONTENT_TYPE \
    --clear-relationship-types \
    --remove-relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --add-relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --clear-condition-title \
    --condition-title="CONDITION_TITLE" \
    --clear-condition-description \
    --condition-description="CONDITION_DESCRIPTION" \
    --clear-condition-expression
    --condition-expression="CONDITION_EXPRESSION"

次の値を指定します。

  • 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))"
  • FEED_ID: 一意のアセット フィード識別子。
  • BILLING_PROJECT_ID: 省略可。 Pub/Sub トピックを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

  • TOPIC_PROJECT_ID: Pub/Sub トピックが配置されているプロジェクトの ID。
  • TOPIC_ID: 通知公開先の Pub/Sub トピックの ID。
  • 次のアセット定義の少なくとも 1 つ:
    • ASSET_NAME_#: 省略可。 アセットのフルネームのカンマ区切りのリスト。
    • ASSET_TYPE_#: 省略可。 検索可能なアセットタイプのカンマ区切りのリスト。RE2 互換の正規表現がサポートされています。正規表現が、サポートされているアセットタイプと一致しない場合は、INVALID_ARGUMENT エラーが返されます。--asset-types が指定されていない場合、すべてのアセットタイプが返されます。
  • CONTENT_TYPE: 省略可。 取得するメタデータのコンテンツ タイプ--content-type が指定されていない場合、アセット名、アセットの最終更新日、アセットが属するプロジェクト、フォルダ、組織などの基本情報のみが返されます。
  • RELATIONSHIP_TYPE_#: 省略可。 Security Command Center Premium ティアと Enterprise ティアのサブスクライバーのみご利用いただけます。取得するアセット関係タイプのカンマ区切りのリスト。これを機能させるには、CONTENT_TYPERELATIONSHIP に設定する必要があります。
  • オプションのフィード条件を追加する場合は、コマンドに次の詳細を含めます。
    • CONDITION_TITLE: フィード条件に割り当てるタイトル。
    • CONDITION_DESCRIPTION: フィード条件に割り当てる説明。
    • フィードに適用するCONDITION_EXPRESSION条件式。

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

次のコマンドを実行して、my-project プロジェクトの my-topic Pub/Sub トピックを更新します。このリクエストにより、モニタリングからすべてのアセット名が削除され、アセットタイプ gkemulticloud.googleapis.com/AttachedCluster が追加されます。

gcloud asset feeds update my-feed \
    --project=my-project \
    --pubsub-topic=projects/my-project/topics/my-topic \
    --clear-asset-names \
    --add-asset-types=gkemulticloud.googleapis.com/AttachedCluster

レスポンスの例

assetTypes:
- bigquery.googleapis.com/Table
- gkemulticloud.googleapis.com/AttachedCluster
condition: {}
contentType: RESOURCE
feedOutputConfig:
  pubsubDestination:
    topic: projects/my-project/topics/my-topic
name: projects/000000000000/feeds/my-feed

フィードの属性を更新するには、update_mask で属性のパスを指定し、その属性の値を指定する必要があります。

REST

HTTP メソッドと URL:

PATCH https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID

ヘッダー:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON 本文のリクエスト:

{
  "feed": {
    "assetNames": [
      "ASSET_NAME_1",
      "ASSET_NAME_2",
      "..."
    ],
    "assetTypes": [
      "ASSET_TYPE_1",
      "ASSET_TYPE_2",
      "..."
    ],
    "contentType": "CONTENT_TYPE",
    "relationshipTypes": [
      "RELATIONSHIP_TYPE_1",
      "RELATIONSHIP_TYPE_2",
      "..."
    ],
    "feedOutputConfig": {
      "pubsubDestination": {
        "topic": "projects/TOPIC_PROJECT_ID/topics/TOPIC_ID"
      }
    }
  },
  "condition": {
    "title": "CONDITION_TITLE",
    "description": "CONDITION_DESCRIPTION",
    "expression": "CONDITION_EXPRESSION"
  },
  "update_mask": {
    "paths": [
      "feed_output_config.pubsub_destination.topic",
      ATTRIBUTE_PATH_1,
      ATTRIBUTE_PATH_2,
      ...
    ]
  }
}

次の値を指定します。

  • 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))"
  • BILLING_PROJECT_ID: Pub/Sub トピックを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

  • FEED_ID: 一意のアセット フィード識別子。
  • 次のアセット定義の少なくとも 1 つ:
  • CONTENT_TYPE: 省略可。 取得するメタデータのコンテンツ タイプcontentType が指定されていない場合、アセット名、アセットの最終更新日、アセットが属するプロジェクト、フォルダ、組織などの基本情報のみが返されます。
  • RELATIONSHIP_TYPE_#: 省略可。 Security Command Center Premium ティアと Enterprise ティアのサブスクライバーのみご利用いただけます。取得するアセット関係タイプのカンマ区切りのリスト。これを機能させるには、CONTENT_TYPERELATIONSHIP に設定する必要があります。
  • TOPIC_PROJECT_ID: Pub/Sub トピックが配置されているプロジェクトの ID。
  • TOPIC_ID: 通知公開先の Pub/Sub トピックの ID。
  • オプションのフィード条件を追加する場合は、コマンドに次の詳細を含めます。
    • CONDITION_TITLE: フィード条件に割り当てるタイトル。
    • CONDITION_DESCRIPTION: フィード条件に割り当てる説明。
    • フィードに適用するCONDITION_EXPRESSION条件式。

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

コマンドの例

次のコマンドのいずれかを実行して、my-project プロジェクトの my-topic Pub/Sub トピックを更新します。このリクエストにより、モニタリングからすべてのアセット名が削除され、アセットタイプ gkemulticloud.googleapis.com/AttachedCluster が追加されます。

curl(Linux、macOS、Cloud Shell)

curl -X PATCH \
     -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 '{
            "feed": {
              "assetNames": [],
              "assetTypes": [
                "gkemulticloud.googleapis.com/AttachedCluster"
              ],
              "feedOutputConfig": {
                "pubsubDestination": {
                  "topic": "projects/my-project/topics/my-topic"
                }
              }
            },
            "update_mask": {
              "paths": ["feed_output_config.pubsub_destination.topic", "asset_names", "asset_types"]
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "feed": {
    "assetNames": [],
    "assetTypes": [
      "gkemulticloud.googleapis.com/AttachedCluster"
    ],
    "feedOutputConfig": {
      "pubsubDestination": {
        "topic": "projects/my-project/topics/my-topic"
      }
    }
  },
  "update_mask": {
    "paths": ["feed_output_config.pubsub_destination.topic", "asset_names", "asset_types"]
  }
}
"@

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

レスポンスの例

{
  "feeds": [
    {
      "name": "projects/000000000000/feeds/my-feed",
      "assetTypes": [
        "bigquery.googleapis.com/Table",
        "gkemulticloud.googleapis.com/AttachedCluster"
      ],
      "contentType": "RESOURCE",
      "feedOutputConfig": {
        "pubsubDestination": {
          "topic": "projects/my-project/topics/my-topic"
        }
      }
    }
  ]
}

Go

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

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


// Sample update-feed update feed.
package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"os"
	"strconv"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
	field_mask "google.golang.org/genproto/protobuf/field_mask"
)

// Command-line flags.
var (
	feedID = flag.String("feed_id", "YOUR_FEED_ID", "Identifier of Feed.")
)

func main() {
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	cloudresourcemanagerClient, err := cloudresourcemanager.NewService(ctx)
	if err != nil {
		log.Fatalf("cloudresourcemanager.NewService: %v", err)
	}

	project, err := cloudresourcemanagerClient.Projects.Get(projectID).Do()
	if err != nil {
		log.Fatalf("cloudresourcemanagerClient.Projects.Get.Do: %v", err)
	}
	projectNumber := strconv.FormatInt(project.ProjectNumber, 10)
	feedName := fmt.Sprintf("projects/%s/feeds/%s", projectNumber, *feedID)
	topic := fmt.Sprintf("projects/%s/topics/%s", projectID, "TOPIC_TO_UPDATE")

	req := &assetpb.UpdateFeedRequest{
		Feed: &assetpb.Feed{
			Name: feedName,
			FeedOutputConfig: &assetpb.FeedOutputConfig{
				Destination: &assetpb.FeedOutputConfig_PubsubDestination{
					PubsubDestination: &assetpb.PubsubDestination{
						Topic: topic,
					},
				},
			},
		},
		UpdateMask: &field_mask.FieldMask{
			Paths: []string{"feed_output_config.pubsub_destination.topic"},
		},
	}
	response, err := client.UpdateFeed(ctx, req)
	if err != nil {
		log.Fatalf("client.UpdateFeed: %v", err)
	}
	fmt.Print(response)
}

Java

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

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

import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.Feed;
import com.google.cloud.asset.v1.FeedOutputConfig;
import com.google.cloud.asset.v1.PubsubDestination;
import com.google.cloud.asset.v1.UpdateFeedRequest;
import com.google.protobuf.FieldMask;

public class UpdateFeedExample {

  // Update a feed
  public static void updateFeed(String feedName, String topic) throws Exception {
    // String feedName = "MY_FEED_NAME"
    // String topic = "projects/[PROJECT_ID]/topics/[TOPIC_NAME]"
    Feed feed =
        Feed.newBuilder()
            .setName(feedName)
            .setFeedOutputConfig(
                FeedOutputConfig.newBuilder()
                    .setPubsubDestination(PubsubDestination.newBuilder().setTopic(topic).build())
                    .build())
            .build();
    UpdateFeedRequest request =
        UpdateFeedRequest.newBuilder()
            .setFeed(feed)
            .setUpdateMask(
                FieldMask.newBuilder()
                    .addPaths("feed_output_config.pubsub_destination.topic")
                    .build())
            .build();
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      Feed response = client.updateFeed(request);
      System.out.println("Feed updated successfully: " + response.getName());
    } catch (Exception e) {
      System.out.println("Error during UpdateFeed: \n" + e.toString());
    }
  }
}

Node.js

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

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

const {AssetServiceClient} = require('@google-cloud/asset');

const client = new AssetServiceClient();
// example inputs:
// const fullQueryName = 'folders/<FOLDER_NUMBER>/savedQueries/<QUERY_ID>';
// const description = 'a new description';
async function updateSavedQuery() {
  const request = {
    savedQuery: {
      name: fullQueryName,
      description: description,
    },
    updateMask: {
      paths: ['description'],
    },
  };

  // Handle the operation using the promise pattern.
  const [query] = await client.updateSavedQuery(request);
  // Do things with with the response.
  console.log('Query name:', query.name);
  console.log('Query description:', query.description);
  console.log('Created time:', query.createTime);
  console.log('Updated time:', query.lastUpdateTime);
  console.log('Query type:', query.content.queryContent);
  console.log('Query content:', JSON.stringify(query.content, null, 4));

Python

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

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

from google.cloud import asset_v1
from google.protobuf import field_mask_pb2

# TODO feed_name = 'Feed Name you want to update'
# TODO topic = "Topic name you want to update with"

client = asset_v1.AssetServiceClient()
feed = asset_v1.Feed()
feed.name = feed_name
feed.feed_output_config.pubsub_destination.topic = topic
update_mask = field_mask_pb2.FieldMask()
# In this example, we update topic of the feed
update_mask.paths.append("feed_output_config.pubsub_destination.topic")
response = client.update_feed(request={"feed": feed, "update_mask": update_mask})
print(f"updated_feed: {response}")

フィードの削除

今後、アセットの変更通知を受け取らないようにする場合は、次のいずれかのリクエストを実行してフィードを削除します。

gcloud

gcloud asset feeds delete FEED_ID \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID

次の値を指定します。

  • 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))"
  • BILLING_PROJECT_ID: Pub/Sub トピックを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

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

レスポンスの例

正常に削除されると、レスポンスは返されません。

REST

HTTP メソッドと URL:

DELETE https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID

ヘッダー:

X-Goog-User-Project: BILLING_PROJECT_ID

次の値を指定します。

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

    使用できる値は次のとおりです。

    • 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))"
  • BILLING_PROJECT_ID: Pub/Sub トピックを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

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

コマンドの例

特定のフィードを削除するには、次のいずれかのコマンドを実行します。

curl(Linux、macOS、Cloud Shell)

curl -X DELETE \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudasset.googleapis.com/v1/projects/000000000000/feeds/my-feed

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


Invoke-WebRequest `
  -Method DELETE `
  -Headers $headers `
  -Uri "https://cloudasset.googleapis.com/v1/projects/000000000000/feeds/my-feed" | Select-Object -Expand Content

レスポンスの例

{}

Go

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

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


// Sample delete-feed delete feed.
package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"os"
	"strconv"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
)

// Command-line flags.
var (
	feedID = flag.String("feed_id", "YOUR_FEED_ID", "Identifier of Feed.")
)

func main() {
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	cloudresourcemanagerClient, err := cloudresourcemanager.NewService(ctx)
	if err != nil {
		log.Fatalf("cloudresourcemanager.NewService: %v", err)
	}

	project, err := cloudresourcemanagerClient.Projects.Get(projectID).Do()
	if err != nil {
		log.Fatalf("cloudresourcemanagerClient.Projects.Get.Do: %v", err)
	}
	projectNumber := strconv.FormatInt(project.ProjectNumber, 10)
	feedName := fmt.Sprintf("projects/%s/feeds/%s", projectNumber, *feedID)
	req := &assetpb.DeleteFeedRequest{
		Name: feedName,
	}
	if err = client.DeleteFeed(ctx, req); err != nil {
		log.Fatalf("client.DeleteFeed: %v", err)
	}
	fmt.Print("Deleted Feed")
}

Java

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

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

import com.google.cloud.asset.v1.AssetServiceClient;

public class DeleteFeedExample {

  // Delete a feed with full feed name
  public static void deleteFeed(String feedName) throws Exception {
    // String feedName = "MY_FEED_NAME"

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      client.deleteFeed(feedName);
      System.out.println("Feed deleted");
    } catch (Exception e) {
      System.out.println("Error during DeleteFeed: \n" + e.toString());
    }
  }
}

Node.js

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

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

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

const client = new AssetServiceClient();

async function deleteFeed() {
  const request = {
    name: feedName,
  };

  // Handle the operation using the promise pattern.
  const result = await client.deleteFeed(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));

Python

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

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

from google.cloud import asset_v1

# TODO feed_name = 'Feed name you want to delete'

client = asset_v1.AssetServiceClient()
client.delete_feed(request={"name": feed_name})
print("deleted_feed")

フィードの状態

任意のアセットに対して特定の種類の変更のみを表示するには、フィードに条件を追加します。条件は Common Expression Language(CEL)で記述します。

条件のサポートには、制限があります。場合によっては、条件を使用してフィードを作成または更新すると、遅延が生じることがあります。

制限事項

  • 条件式の長さは 3,000 文字以内に制限されます。

  • 条件式のほとんどの変数名は、小文字で単語ごとにアンダースコアが付いています。例: example_variable

    例外は、Resource オブジェクト内の data のサブフィールドの変数名です。単語区切り文字はなく、最初の単語以外の各単語の最初の文字は大文字になります。例: exampleVariable

  • 条件式の検証には、フィードの作成時または更新時に行われるものもあります。ただし、そのような検証は、特にダイナミック型の temporal_asset.asset.resource.data フィールドで設定される条件では、包括的なものではありません。可能であれば、適切な gcloud CLI または REST API パラメータを使用してフィードにフィルを適用してください。

  • 評価中にエラーが発生した場合、通知は送信されませんが、エラーはログに記録されます

  • temporal_asset.asset.resource.data のダイナミック型の場合、存在しないフィールドで指定された条件によってランタイム エラーが発生し、通知が公開されません。たとえば、条件 temporal_asset.asset.resource.data.name != "my_name" では、更新に name フィールドが含まれていない場合、評価が失敗し、通知は送信されません。特定のフィールドが存在する場合のみ条件が動作する場合は、条件が正しく評価されるよう、条件に存在チェックを追加します。

  • 静的列挙型は、完全修飾されたパス名または生の整数のいずれでも表すことができます。たとえば、次の式は prior_asset_state に対し有効です。

    temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
    

    および

    temporal_asset.prior_asset_state == 3
    

    temporal_asset.asset.resource.data の動的列挙型は、生の文字列として表現されます。たとえば、以下の式は、アセットタイプ cloudresourcemanager.googleapis.com/Project に対し有効です。

    temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"
    

CEL で条件式を作成する

フィード条件では、Common Expression Language(CEL)を使用して、属性データに基づきブール判定を行います。条件式は、論理演算子を使用して結合された 1 つ以上のステートメントで構成されます。各ステートメントは、通知が送信されるかどうかを判断するために TemporalAsset に適用される属性ベースの制御ルールを表します。

フィードの状態にとって最も重要な CEL 機能は次のとおりです。

  • 変数: 条件で使用される変数は、temporal_asset.deletedBoolean)や temporal_asset.asset.nameString)などの特定の属性を表します。これらの変数には、実行時のコンテキストに基づいて値が入力されます。

  • 演算子: String などの各データ型は、論理式の作成に使用できる一連の演算子をサポートします。通常、演算子を使用して変数に含まれる値とリテラル値とを比較します(例: temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345")。この例では、temporal_asset.asset.name の入力値が //cloudresourcemanager.googleapis.com/projects/12345 である場合、式は true と評価されます。

  • 関数: 関数は、より複雑な演算をサポートするデータ型向けの複合演算子です。条件式には、特定のデータ型と組み合わせて使用できる事前定義された関数があります。たとえば、temporal_asset.asset.name.contains("keyword")contains という関数を使用して、temporal_asset.asset.name の値に "keyword" が含まれているかどうかを確認します。含まれている場合、true と評価されます。

  • 論理演算子: Conditions では、基本的な式のステートメントから複雑な論理式を作成するために使用できる論理演算子(&&(AND)と ||(OR)がサポートされています。これらの論理演算子を使用すると、1 つの条件式で複数の入力変数を使用できます。たとえば、temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020 は 2 つの基本的なステートメントを結合し、評価結果として true を生成するには両方のステートメントが満たされる必要があります。

CEL 機能の詳細については、言語の定義をご覧ください。

条件変数の使用

条件変数を使用すると、さまざまな属性に関する条件を作成できます。サポートされている条件変数は次のとおりです。

  • temporal_asset: TemporalAsset 形式での最新のアセット変更。条件が true と判定されると、構成された宛先に TemporalAsset が送信されます。

条件式の例

以下の条件式は、作成イベントに関する通知を送信します。

temporal_asset.deleted == false &&
temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST

以下の条件式は、フォルダ 1234523456 に格納されたリソースに関する通知を送信します。

"folders/12345" in temporal_asset.asset.ancestors ||
"folders/23456" in temporal_asset.asset.ancestors

次の条件式は、フィード内のアセットタイプがすでに compute.googleapis.com/Firewall に設定されていることを前提として、新しい許可されたルールがファイアウォールに追加されるときに通知を送信します。

size(temporal_asset.asset.resource.data.allowed) >
size(temporal_asset.prior_asset.resource.data.allowed)

次の条件式は、フィードでアセットタイプがすでに compute.googleapis.com/Instance に設定されていることを前提として、n1-standard-1 マシンタイプの VM インスタンスに関する通知を送信します。

temporal_asset.asset.resource.data.machineType.endsWith('/machineTypes/n1-standard-1')

次の条件式は、フィードでアセットタイプが storage.googleapis.com/Bucket に設定され、コンテンツ タイプが IAM_POLICY に設定されていることを前提として、allUsers の IAM ポリシーを含むストレージ バケットに関する通知を送信します。

temporal_asset.asset.iam_policy.bindings.exists(b, b.members.exists(m, m == "allUsers"))

次の条件式は、ラベルに test キーを含むストレージ バケットが削除されたときに通知を送信します。

temporal_asset.deleted == true && temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.PRESENT && "test" in temporal_asset.prior_asset.resource.data.labels

トラブルシューティング

リソースまたは IAM ポリシーの更新に関する通知が届かない場合は、次の手順でトラブルシューティングを行うことができます。

  • アセットでメタデータが変更されているかを確認する。リアルタイム フィードは、サポートされているリソースタイプのメタデータが変更された場合にのみ更新を送信します。Cloud Storage バケットに新しいファイルをアップロードするなどの操作を行っても、メタデータの変更はトリガーされません。

  • アセットが、フィードで指定したアセット名またはアセットタイプと一致していることを確認します。

  • プロジェクトの削除については、プロジェクトをシャットダウンした後、30 日以内であれば操作を元に戻すことができます。そのため、プロジェクトが完全に削除されるまで、アセット メタデータの deleted フィールドは設定されません。削除保留中のプロジェクトをモニタリングするには、プロジェクトの lifecycleState フィールドに条件を設定します。次に例を示します。temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED"

  • ログを確認し、トピックの更新を公開するときにエラーが発生するかどうかを確かめます。

Cloud Logging

リアルタイム フィードが Pub/Sub を介してリソースまたは IAM ポリシーの更新を送信しない場合、Cloud Asset Inventory は Logging を介してエラーのステータスとメッセージを記録します。Logging はデフォルトで有効になっており、Google Cloud Observability に属します。Google Cloud Observability の料金をご覧ください。

リアルタイム フィードのログの表示

リアルタイム フィード のログは、Pub/Sub トピックによってインデックスに登録されます。すべてのログを表示するには:

  1. Google Cloud コンソールの [ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  2. [すべてのフィールドを検索] ボックスの横にある [リソース] リストをクリックします。

  3. Cloud Pub/Sub Topic を検索してから、Cloud Pub/Sub トピックのリソースタイプをクリックします。

  4. 表示するトピック ID をクリックします。

  5. [適用] をクリックします。

ログフィールドには UTF-8 文字エンコーディングが適用されます。UTF-8 以外の文字列は、疑問符に置き換えられます。

ログに記録される情報

リアルタイム フィードのログエントリには、以下の種類の情報が含まれています。

  • 重大度、プロジェクト ID、プロジェクト番号、タイムスタンプなど、ほとんどの Google Cloud ログで表示される一般情報。

  • jsonPayload のリアルタイム フィードのログ フィールド。アセット名、フィード出力の構成、リソースの公開または IAM ポリシーの更新時のエラー ステータスが含まれます。

次の表に、各フィールドにどのような種類の情報が格納されるかを示します。

フィールド データタイプと説明
name

string

フィードのフルネーム。形式は次のいずれかです。

  • projects/PROJECT_ID/feeds/FEED_ID
  • folders/FOLDER_ID/feeds/FEED_ID
  • organizations/ORGANIZATION_ID/feeds/FEED_ID
asset_name

string

更新情報を受け取るアセットのフルネーム。次に例を示します。

//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1

詳細については、リソース名をご覧ください。

condition

Expr

アセットの更新を公開するかどうかを判定するフィード条件。

error_status

Status

アセットの更新をフィードに公開できない場合のステータス。

feed_output_config

FeedOutputConfig

アセットの更新の公開場所を定義するフィード出力構成。