Monitorare le modifiche agli asset con Pub/Sub

Puoi ricevere notifiche in tempo reale sulle modifiche alle risorse e alle policy creando un feed e iscrivendoti.

Quando crei il feed, puoi specificare che vuoi monitorare le modifiche ai tipi di risorse, alle policy IAM, alle policy di accesso e alle policy dell'organizzazione supportati in un'organizzazione, una cartella o un progetto. Inoltre, puoi aggiungere condizioni al tuo feed in modo da ricevere notifiche solo per determinati tipi di modifiche a un asset.

Dopo aver creato un feed, ricevi notifiche tramite Pub/Sub ogni volta che le risorse specificate cambiano. Il primo messaggio pubblicato nell'argomento Pub/Sub è un messaggio di benvenuto nel formato di una stringa e tutti i messaggi successivi sono nel formato di un TemporalAsset.

Ecco un messaggio Pub/Sub di esempio per il tipo di contenuti RESOURCE.

{
  "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"
  }
}

Per saperne di più su Pub/Sub o su come configurare le sottoscrizioni, consulta la documentazione di Pub/Sub.

Prima di iniziare

  1. Abilita l'API Cloud Asset Inventory nel progetto da cui esegui i comandi Cloud Asset Inventory.

    Abilita l'API Cloud Asset Inventory

  2. Assicurati che il tuo account disponga del ruolo corretto per chiamare l'API Cloud Asset Inventory. Per le singole autorizzazioni per ogni tipo di chiamata, vedi Autorizzazioni.

  3. Crea un argomento Pub/Sub se non ne hai già uno.

Limitazioni

  • La creazione, l'aggiornamento o l'eliminazione di un feed possono richiedere fino a 10 minuti per diventare effettivi.

  • Il progetto in cui viene creato un feed deve sopravvivere al feed. Questo perché ilaccount di serviziot utilizzato per la pubblicazione nell'argomento Pub/Sub di destinazione si trova in quel progetto. Un feed non funziona più e viene eliminato non appena l'eliminazione del progetto è definitiva.

  • Puoi creare fino a 200 feed in un account principale. Questo limite si applica solo ai feed che seguono direttamente un genitore e non conteggia i feed dei relativi figli. Ad esempio, se hai 10 progetti in un'organizzazione, ogni progetto può avere fino a 200 feed e anche l'organizzazione può avere fino a 200 feed.

Creare feed

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"

Fornisci i seguenti valori:

  • SCOPE: utilizza uno dei seguenti valori:

    • project=PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui creare il feed.
    • folder=FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui creare il feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui creare il feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • FEED_ID: un identificatore univoco del feed di asset.
  • BILLING_PROJECT_ID: (Facoltativo). L'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire l'argomento Pub/Sub. Scopri di più sull'impostazione del progetto di fatturazione.

  • TOPIC_PROJECT_ID: L'ID del progetto in cui si trova l'argomento Pub/Sub.
  • TOPIC_ID: l'ID dell'argomento Pub/Sub a cui pubblicare le notifiche.
  • Almeno una delle seguenti definizioni di asset:
  • CONTENT_TYPE: (Facoltativo). Il tipo di contenuti dei metadati che vuoi recuperare. Quando --content-type non è specificato, vengono restituite solo informazioni di base, come i nomi degli asset, l'ultima volta che gli asset sono stati aggiornati e i progetti, le cartelle e le organizzazioni a cui appartengono.
  • RELATIONSHIP_TYPE_#: (Facoltativo). Richiede l'accesso al livello Premium o Enterprise di Security Command Center o a Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazione tra asset che vuoi recuperare. Affinché questa operazione funzioni, devi impostare CONTENT_TYPE su RELATIONSHIP.
  • Se aggiungi una condizione del feed facoltativa, includi i seguenti dettagli nel comando:
    • CONDITION_TITLE: Un titolo da assegnare alla condizione del feed.
    • CONDITION_DESCRIPTION: una descrizione da assegnare alla condizione del feed.
    • CONDITION_EXPRESSION: l'espressione della condizione da applicare al feed.

Per tutte le opzioni, consulta il riferimento gcloud CLI.

Esempio

Esegui questo comando per creare un feed nell'argomento Pub/Sub my-topic che invia una notifica quando vengono apportate modifiche alle seguenti risorse nel progetto my-project.

  • Il bucket Cloud Storage my-bucket
  • Qualsiasi tabella 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

Esempio di risposta

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

Metodo HTTP e URL:

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

Intestazioni:

X-Goog-User-Project: BILLING_PROJECT_ID

Corpo JSON della richiesta:

{
  "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"
    }
  }
}

Fornisci i seguenti valori:

  • SCOPE_PATH: utilizza uno dei seguenti valori:

    I valori consentiti sono:

    • projects/PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui creare il feed.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto in cui creare il feed.

      Come trovare un Google Cloud numero di progetto

      ConsoleGoogle Cloud

      Per trovare un numero di progetto, completa i seguenti passaggi: Google Cloud

      1. Vai alla pagina Benvenuto nella console Google Cloud .

        Vai a Benvenuto

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del tuo progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Benvenuto.

        Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.

      Interfaccia a riga di comando gcloud

      Puoi recuperare un Google Cloud numero di progetto con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui creare il feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui creare il feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire l'argomento Pub/Sub. Scopri di più sull'impostazione del progetto di fatturazione.

  • FEED_ID: un identificatore univoco del feed di asset.
  • Almeno una delle seguenti definizioni di asset:
  • CONTENT_TYPE: (Facoltativo). Il tipo di contenuti dei metadati che vuoi recuperare. Quando contentType non è specificato, vengono restituite solo informazioni di base, come i nomi degli asset, l'ultima volta che sono stati aggiornati e i progetti, le cartelle e le organizzazioni a cui appartengono.
  • RELATIONSHIP_TYPE_#: (Facoltativo). Richiede l'accesso al livello Premium o Enterprise di Security Command Center o a Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazione tra asset che vuoi recuperare. Affinché questa operazione funzioni, devi impostare CONTENT_TYPE su RELATIONSHIP.
  • TOPIC_PROJECT_ID: L'ID del progetto in cui si trova l'argomento Pub/Sub.
  • TOPIC_ID: l'ID dell'argomento Pub/Sub a cui pubblicare le notifiche.
  • Se aggiungi una condizione del feed facoltativa, includi i seguenti dettagli nel comando:
    • CONDITION_TITLE: Un titolo da assegnare alla condizione del feed.
    • CONDITION_DESCRIPTION: una descrizione da assegnare alla condizione del feed.
    • CONDITION_EXPRESSION: l'espressione della condizione da applicare al feed.

Consulta il riferimento REST per tutte le opzioni.

Esempi di comandi

Esegui uno dei seguenti comandi per creare un feed nell'argomento Pub/Sub my-topic che invia una notifica quando vengono apportate modifiche alle seguenti risorse nel progetto my-project.

  • Il bucket Cloud Storage my-bucket
  • Qualsiasi tabella BigQuery

curl (Linux, macOS o 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

Esempio di risposta

{
  "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"
    }
  }
}

Vai

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


// 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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

/**
 * 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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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}"

Ricevere i feed

gcloud

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

Fornisci i seguenti valori:

  • SCOPE: utilizza uno dei seguenti valori:

    • project=PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui si trova il feed.
    • folder=FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui si trova il feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui si trova il feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire l'argomento Pub/Sub. Scopri di più sull'impostazione del progetto di fatturazione.

  • FEED_ID: un identificatore univoco del feed di asset.

Per tutte le opzioni, consulta il riferimento gcloud CLI.

Esempio di risposta

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

Metodo HTTP e URL:

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

Intestazioni:

X-Goog-User-Project: BILLING_PROJECT_ID

Fornisci i seguenti valori:

  • SCOPE_PATH: utilizza uno dei seguenti valori:

    I valori consentiti sono:

    • projects/PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui si trova il feed.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto in cui si trova il feed.

      Come trovare un Google Cloud numero di progetto

      ConsoleGoogle Cloud

      Per trovare un numero di progetto, completa i seguenti passaggi: Google Cloud

      1. Vai alla pagina Benvenuto nella console Google Cloud .

        Vai a Benvenuto

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del tuo progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Benvenuto.

        Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.

      Interfaccia a riga di comando gcloud

      Puoi recuperare un Google Cloud numero di progetto con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui si trova il feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui si trova il feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i tuoi set di dati e tabelle BigQuery. Scopri di più sull'impostazione del progetto di fatturazione.

  • FEED_ID: un identificatore univoco del feed di asset.

Consulta il riferimento REST per tutte le opzioni.

Esempi di comandi

Esegui uno dei seguenti comandi per ottenere un feed specifico.

curl (Linux, macOS o 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

Esempio di risposta

{
  "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"
    }
  }
}

Vai

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


// 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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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}")

Elencare tutti i feed

Per elencare tutti i feed per un progetto, una cartella o un'organizzazione, effettua una delle seguenti richieste.

gcloud

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

Fornisci i seguenti valori:

  • SCOPE: utilizza uno dei seguenti valori:

    • project=PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui si trovano i feed.
    • folder=FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui si trovano i feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui si trovano i feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire l'argomento Pub/Sub. Scopri di più sull'impostazione del progetto di fatturazione.

Per tutte le opzioni, consulta il riferimento gcloud CLI.

Esempio di risposta

- 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

Metodo HTTP e URL:

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

Intestazioni:

X-Goog-User-Project: BILLING_PROJECT_ID

Fornisci i seguenti valori:

  • SCOPE_PATH: utilizza uno dei seguenti valori:

    I valori consentiti sono:

    • projects/PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui si trovano i feed.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto in cui si trovano i feed.

      Come trovare un Google Cloud numero di progetto

      ConsoleGoogle Cloud

      Per trovare un numero di progetto, completa i seguenti passaggi: Google Cloud

      1. Vai alla pagina Benvenuto nella console Google Cloud .

        Vai a Benvenuto

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del tuo progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Benvenuto.

        Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.

      Interfaccia a riga di comando gcloud

      Puoi recuperare un Google Cloud numero di progetto con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui si trovano i feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui si trovano i feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i tuoi set di dati e tabelle BigQuery. Scopri di più sull'impostazione del progetto di fatturazione.

Consulta il riferimento REST per tutte le opzioni.

Esempi di comandi

Esegui uno dei seguenti comandi per elencare tutti i feed nel progetto my-project.

curl (Linux, macOS o 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

Esempio di risposta

{
  "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"
        }
      }
    }
  ]
}

Vai

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


// 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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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}")

Aggiornare i feed

Puoi aggiornare gli attributi di un feed esistente nei seguenti modi:

  • Aggiunta e rimozione di nomi di asset specifici o eliminazione di tutti dal feed.

  • Aggiunta e rimozione di tipi di asset specifici o cancellazione di tutti dal feed.

  • Sovrascrittura delle condizioni o eliminazione dal feed.

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"

Fornisci i seguenti valori:

  • SCOPE: utilizza uno dei seguenti valori:

    • project=PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui aggiornare il feed.
    • folder=FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui aggiornare il feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui aggiornare il feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • FEED_ID: un identificatore univoco del feed di asset.
  • BILLING_PROJECT_ID: (Facoltativo). L'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire l'argomento Pub/Sub. Scopri di più sull'impostazione del progetto di fatturazione.

  • TOPIC_PROJECT_ID: L'ID del progetto in cui si trova l'argomento Pub/Sub.
  • TOPIC_ID: l'ID dell'argomento Pub/Sub a cui pubblicare le notifiche.
  • Almeno una delle seguenti definizioni di asset:
  • CONTENT_TYPE: (Facoltativo). Il tipo di contenuti dei metadati che vuoi recuperare. Quando --content-type non è specificato, vengono restituite solo informazioni di base, come i nomi degli asset, l'ultima volta che gli asset sono stati aggiornati e i progetti, le cartelle e le organizzazioni a cui appartengono.
  • RELATIONSHIP_TYPE_#: (Facoltativo). Richiede l'accesso al livello Premium o Enterprise di Security Command Center o a Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazione tra asset che vuoi recuperare. Affinché questa operazione funzioni, devi impostare CONTENT_TYPE su RELATIONSHIP.
  • Se aggiungi una condizione del feed facoltativa, includi i seguenti dettagli nel comando:
    • CONDITION_TITLE: Un titolo da assegnare alla condizione del feed.
    • CONDITION_DESCRIPTION: una descrizione da assegnare alla condizione del feed.
    • CONDITION_EXPRESSION: l'espressione della condizione da applicare al feed.

Per tutte le opzioni, consulta il riferimento gcloud CLI.

Esempio

Esegui il comando seguente per aggiornare l'argomento Pub/Sub my-topic nel progetto my-project. Questa richiesta rimuove tutti i nomi degli asset dal monitoraggio e aggiunge il tipo di asset 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

Esempio di risposta

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

Per aggiornare gli attributi di un feed, devi specificare il percorso dell'attributo in update_mask e il valore di quell'attributo.

REST

Metodo HTTP e URL:

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

Intestazioni:

X-Goog-User-Project: BILLING_PROJECT_ID

Corpo JSON della richiesta:

{
  "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,
      ...
    ]
  }
}

Fornisci i seguenti valori:

  • SCOPE_PATH: utilizza uno dei seguenti valori:

    I valori consentiti sono:

    • projects/PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui aggiornare il feed.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto in cui aggiornare il feed.

      Come trovare un Google Cloud numero di progetto

      ConsoleGoogle Cloud

      Per trovare un numero di progetto, completa i seguenti passaggi: Google Cloud

      1. Vai alla pagina Benvenuto nella console Google Cloud .

        Vai a Benvenuto

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del tuo progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Benvenuto.

        Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.

      Interfaccia a riga di comando gcloud

      Puoi recuperare un Google Cloud numero di progetto con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui aggiornare il feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui aggiornare il feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire l'argomento Pub/Sub. Scopri di più sull'impostazione del progetto di fatturazione.

  • FEED_ID: un identificatore univoco del feed di asset.
  • Almeno una delle seguenti definizioni di asset:
  • CONTENT_TYPE: (Facoltativo). Il tipo di contenuti dei metadati che vuoi recuperare. Quando contentType non è specificato, vengono restituite solo informazioni di base, come i nomi degli asset, l'ultima volta che sono stati aggiornati e i progetti, le cartelle e le organizzazioni a cui appartengono.
  • RELATIONSHIP_TYPE_#: (Facoltativo). Richiede l'accesso al livello Premium o Enterprise di Security Command Center o a Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazione tra asset che vuoi recuperare. Affinché questa operazione funzioni, devi impostare CONTENT_TYPE su RELATIONSHIP.
  • TOPIC_PROJECT_ID: L'ID del progetto in cui si trova l'argomento Pub/Sub.
  • TOPIC_ID: l'ID dell'argomento Pub/Sub a cui pubblicare le notifiche.
  • Se aggiungi una condizione del feed facoltativa, includi i seguenti dettagli nel comando:
    • CONDITION_TITLE: Un titolo da assegnare alla condizione del feed.
    • CONDITION_DESCRIPTION: una descrizione da assegnare alla condizione del feed.
    • CONDITION_EXPRESSION: l'espressione della condizione da applicare al feed.

Consulta il riferimento REST per tutte le opzioni.

Esempi di comandi

Esegui uno dei seguenti comandi per aggiornare l'argomento Pub/Sub my-topic nel progetto my-project. Questa richiesta rimuove tutti i nomi degli asset dal monitoraggio e aggiunge il tipo di asset gkemulticloud.googleapis.com/AttachedCluster.

curl (Linux, macOS o 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

Esempio di risposta

{
  "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"
        }
      }
    }
  ]
}

Vai

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


// 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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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}")

Eliminare i feed

Se non vuoi più ricevere notifiche relative alle modifiche agli asset, invia una delle seguenti richieste per eliminare un feed.

gcloud

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

Fornisci i seguenti valori:

  • SCOPE: utilizza uno dei seguenti valori:

    • project=PROJECT_ID, dove PROJECT_ID è l'ID del progetto in cui si trova il feed.
    • folder=FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui si trova il feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui si trova il feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire l'argomento Pub/Sub. Scopri di più sull'impostazione del progetto di fatturazione.

Per tutte le opzioni, consulta il riferimento gcloud CLI.

Esempio di risposta

Un'eliminazione riuscita non restituisce alcuna risposta.

REST

Metodo HTTP e URL:

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

Intestazioni:

X-Goog-User-Project: BILLING_PROJECT_ID

Fornisci i seguenti valori:

  • SCOPE_PATH: utilizza uno dei seguenti valori:

    I valori consentiti sono:

    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto in cui si trova il feed.

      Come trovare un Google Cloud numero di progetto

      ConsoleGoogle Cloud

      Per trovare un numero di progetto, completa i seguenti passaggi: Google Cloud

      1. Vai alla pagina Benvenuto nella console Google Cloud .

        Vai a Benvenuto

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del tuo progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Benvenuto.

        Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.

      Interfaccia a riga di comando gcloud

      Puoi recuperare un Google Cloud numero di progetto con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella in cui si trova il feed.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente comando:

      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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione in cui si trova il feed.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire l'argomento Pub/Sub. Scopri di più sull'impostazione del progetto di fatturazione.

Consulta il riferimento REST per tutte le opzioni.

Esempi di comandi

Esegui uno dei seguenti comandi per eliminare un feed specifico.

curl (Linux, macOS o 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

Esempio di risposta

{}

Vai

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


// 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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.

Per autenticarti in Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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")

Condizioni dei feed

Per visualizzare solo determinati tipi di modifiche per un determinato asset, puoi aggiungere una condizione al feed. Le condizioni sono scritte in Common Expression Language (CEL).

Il supporto per le condizioni è limitato. In alcuni casi, la creazione o l'aggiornamento dei feed con condizioni potrebbe comportare un ritardo.

Limitazioni

  • Le espressioni delle condizioni hanno un limite di lunghezza di 3000 caratteri.

  • La maggior parte dei nomi delle variabili nelle espressioni di condizione è rappresentata in lettere minuscole con trattini bassi tra ogni parola. Ad esempio, example_variable.

    L'eccezione sono i nomi delle variabili dei campi secondari di data nell'oggetto Risorsa. Non hanno separatori di parole e la prima lettera di ogni parola dopo la prima è maiuscola. Ad esempio: exampleVariable.

  • Alcune convalide delle espressioni di condizione vengono eseguite durante la creazione o l'aggiornamento del feed. Tuttavia, queste convalide non sono esaustive, soprattutto per le condizioni impostate nel campo temporal_asset.asset.resource.data, che ha un tipo dinamico. Se possibile, filtra il feed utilizzando i parametri appropriati dell'interfaccia a riga di comando gcloud o dell'API REST.

  • Le notifiche non vengono inviate se si verificano errori durante il periodo di valutazione, ma gli errori vengono registrati.

  • Per i tipi dinamici in temporal_asset.asset.resource.data, le condizioni specifiche sui campi assenti attivano errori di runtime e le notifiche non vengono pubblicate. Ad esempio, per la condizione temporal_asset.asset.resource.data.name != "my_name", se il campo name non è presente in un aggiornamento, la valutazione non va a buon fine e non ricevi notifiche. Se la condizione funziona solo in presenza di determinati campi, aggiungi un controllo di esistenza alla condizione per assicurarti che venga valutata correttamente.

  • I tipi di enumerazione statici possono essere rappresentati come nomi di percorso completi o come numeri interi non elaborati. Ad esempio, le seguenti espressioni sono valide per prior_asset_state:

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

    e

    temporal_asset.prior_asset_state == 3
    

    I tipi di enumerazione dinamica in temporal_asset.asset.resource.data sono rappresentati come stringhe non elaborate. Ad esempio, la seguente espressione è valida per il tipo di asset cloudresourcemanager.googleapis.com/Project:

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

Crea un'espressione di condizione con CEL

In una condizione del feed, Common Expression Language (CEL) viene utilizzato per prendere decisioni booleane in base ai dati degli attributi. Un'espressione della condizione è costituita da una o più istruzioni unite mediante operatori logici. Ogni istruzione esprime una regola di controllo basata sugli attributi che si applica a TemporalAsset per determinare se viene inviata una notifica.

Le seguenti funzionalità CEL sono le più importanti per le condizioni del feed:

  • Variabili: le condizioni utilizzano le variabili per esprimere un determinato attributo, ad esempio temporal_asset.deleted (Boolean) o temporal_asset.asset.name (String). Queste variabili vengono compilate con valori basati sul contesto in fase di runtime.

  • Operatori: ogni tipo di dati, ad esempio String, supporta un insieme di operatori che possono essere utilizzati per creare un'espressione logica. Più comunemente, gli operatori vengono utilizzati per confrontare il valore contenuto in una variabile con un valore letterale, ad esempio temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345". In questo esempio, se il valore di input di temporal_asset.asset.name è //cloudresourcemanager.googleapis.com/projects/12345, l'espressione restituisce true.

  • Funzioni: una funzione è un operatore composto per i tipi di dati che supportano operazioni più complesse. Nelle espressioni di condizione, esistono funzioni predefinite che possono essere utilizzate insieme a un determinato tipo di dati. Ad esempio, temporal_asset.asset.name.contains("keyword") utilizza una funzione chiamata contains per verificare se il valore di temporal_asset.asset.name contiene "keyword". In caso affermativo, restituisce true.

  • Operatori logici: le condizioni supportano gli operatori logici che possono essere utilizzati per creare espressioni logiche complesse da istruzioni di espressione di base: && (AND) e || (OR). Questi operatori logici consentono di utilizzare più variabili di input in un'espressione della condizione. Ad esempio: temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020 unisce due istruzioni di base e richiede che entrambe le istruzioni vengano soddisfatte in ordine per produrre un risultato di valutazione true.

Per ulteriori informazioni sulle funzionalità di CEL, consulta la definizione del linguaggio.

Utilizzo delle variabili di condizione

Le variabili di condizione ti consentono di creare condizioni su attributi diversi. Le variabili di condizione supportate sono:

  • temporal_asset: la modifica più recente della risorsa in formato TemporalAsset. Se la condizione restituisce il valore true, TemporalAsset viene inviato alla destinazione configurata.

Esempi di espressioni di condizione

La seguente espressione di condizione invia notifiche sugli eventi di creazione:

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

La seguente espressione di condizione invia notifiche per le risorse che si trovano nelle cartelle 12345 e 23456:

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

La seguente espressione di condizione invia notifiche quando vengono aggiunte nuove regole consentite ai firewall, supponendo che il tipo di asset sia già impostato su compute.googleapis.com/Firewall nel feed:

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

La seguente espressione di condizione invia notifiche per le istanze VM con tipo di macchina n1-standard-1, supponendo che il tipo di asset sia già impostato su compute.googleapis.com/Instance nel feed:

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

La seguente espressione di condizione invia notifiche per i bucket di archiviazione con qualsiasi policy IAM per allUsers, supponendo che il tipo di asset sia impostato su storage.googleapis.com/Bucket e il tipo di contenuto sia impostato su IAM_POLICY nel feed:

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

La seguente espressione di condizione invia una notifica quando viene eliminato un bucket di archiviazione con la chiave test nella relativa etichetta:

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

Risoluzione dei problemi

Se non ricevi notifiche relative agli aggiornamenti delle risorse o delle norme IAM, i seguenti passaggi possono aiutarti a risolvere il problema:

  • Assicurati che i metadati siano stati modificati nelle tue risorse. Il feed in tempo reale invia aggiornamenti solo quando i metadati dei tipi di risorse supportati sono stati modificati. Operazioni come il caricamento di un nuovo file nel bucket Cloud Storage non attivano una modifica dei metadati.

  • Assicurati che le risorse corrispondano a uno dei nomi o tipi di risorse specificati nel feed.

  • Per le eliminazioni di progetti, tieni presente che quando chiudi un progetto hai 30 giorni di tempo per annullare l'operazione. Per questo motivo, il campo deleted nei metadati dell'asset non viene impostato finché il progetto non viene eliminato definitivamente. Per monitorare i progetti in attesa di eliminazione, puoi impostare una condizione sul campo lifecycleState del progetto. Ad esempio: temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED".

  • Controlla i log per verificare la presenza di errori durante la pubblicazione degli aggiornamenti nell'argomento.

Cloud Logging

Quando i feed in tempo reale non riescono a inviare risorse o aggiornamenti dei criteri IAM tramite Pub/Sub, Cloud Asset Inventory registra lo stato e il messaggio di errore in Logging. Il logging è abilitato per impostazione predefinita e fa parte di Google Cloud Observability. Scopri di più sui prezzi di Google Cloud Observability.

Visualizzazione dei log dei feed in tempo reale

Il log del feed in tempo reale viene indicizzato da un argomento Pub/Sub. Per visualizzare tutti i log:

  1. Vai alla pagina Esplora log nella console Google Cloud .

    Vai a Esplora log

  2. Fai clic sull'elenco Risorsa, che si trova vicino alla casella Cerca in tutti i campi.

  3. Cerca Cloud Pub/Sub Topic e poi fai clic sul tipo di risorsa Argomento Cloud Pub/Sub.

  4. Fai clic sull'ID dell'argomento che vuoi visualizzare.

  5. Fai clic su Applica.

La codifica UTF-8 è applicata in modo forzato per i campi di log. I caratteri non UTF-8 vengono sostituiti con punti interrogativi.

Informazioni registrate

Le voci di log dei feed in tempo reale contengono i seguenti tipi di informazioni:

  • Informazioni generali mostrate nella maggior parte dei log, come gravità, ID progetto, numero di progetto o timestamp. Google Cloud

  • Campi dei log dei feed in tempo reale in jsonPayload, che contiene il nome della risorsa, la configurazione dell'output del feed e lo stato di errore durante la pubblicazione degli aggiornamenti delle risorse o dei criteri IAM.

La tabella seguente mostra il tipo di informazioni contenute in ogni campo.

Campo Tipo e descrizione
name

string

Nome completo del feed. Il formato è uno dei seguenti:

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

string

Nome completo dell'asset per ricevere gli aggiornamenti. Ad esempio:

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

Per saperne di più, consulta Nomi delle risorse .

condition

Expr

Condizione del feed che determina se un aggiornamento dell'asset deve essere pubblicato.

error_status

Status

Stato in caso di errore di pubblicazione degli aggiornamenti degli asset in un feed.

feed_output_config

FeedOutputConfig

Configurazione dell'output del feed che definisce la posizione in cui vengono pubblicati gli aggiornamenti degli asset.