Monitorizar cambios de recursos con Pub/Sub

Puedes recibir notificaciones en tiempo real sobre los cambios en los recursos y las políticas creando un feed y suscribiéndote a él.

Cuando creas el feed, puedes especificar que quieres monitorizar los cambios de los tipos de recursos, las políticas de gestión de identidades y accesos, las políticas de acceso y las políticas de organización admitidos en una organización, una carpeta o un proyecto. Además, puede añadir condiciones a su feed para recibir notificaciones solo de determinados tipos de cambios en un recurso.

Después de crear un feed, recibirá notificaciones a través de Pub/Sub cada vez que cambien los recursos especificados. El primer mensaje publicado en el tema de Pub/Sub es un mensaje de bienvenida en formato de cadena, y todos los mensajes siguientes están en formato TemporalAsset.

Aquí tienes un mensaje de Pub/Sub de ejemplo para el tipo de contenido 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"
  }
}

Para obtener más información sobre Pub/Sub o sobre cómo configurar suscripciones, consulta la documentación de Pub/Sub.

Antes de empezar

  1. Habilita la API Cloud Asset Inventory en el proyecto desde el que ejecutas los comandos de Cloud Asset Inventory.

    Habilitar la API Cloud Asset Inventory

  2. Asegúrate de que tu cuenta tiene el rol correcto para llamar a la API Cloud Asset Inventory. Para ver los permisos individuales de cada tipo de llamada, consulta la sección Permisos.

  3. Crea un tema de Pub/Sub si aún no tienes ninguno.

Limitaciones

  • La creación, actualización o eliminación de un feed puede tardar hasta 10 minutos en aplicarse.

  • El proyecto en el que se crea un feed debe durar más que el feed. Esto se debe a que la cuenta de servicio utilizada para publicar en el tema de Pub/Sub de destino se encuentra en ese proyecto. Un feed deja de funcionar y se elimina en cuanto se elimina el proyecto de forma permanente.

  • Puede crear hasta 200 feeds en una cuenta principal. Este límite solo se aplica a los feeds que siguen directamente a un feed principal y no tiene en cuenta los feeds de sus elementos secundarios. Por ejemplo, si tienes 10 proyectos en una organización, cada proyecto puede tener hasta 200 feeds y la organización también puede tener hasta 200 feeds.

Crear feeds

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"

Proporciona los siguientes valores:

  • SCOPE: usa uno de los siguientes valores:

    • project=PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se va a crear el feed.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se creará el feed.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se va a crear el feed.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • FEED_ID: Identificador único del feed de recursos.
  • BILLING_PROJECT_ID: opcional. El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory que tiene permisos para gestionar tu tema de Pub/Sub. Consulta más información sobre cómo definir el proyecto de facturación.

  • TOPIC_PROJECT_ID: ID del proyecto en el que se encuentra el tema de Pub/Sub.
  • TOPIC_ID: ID del tema de Pub/Sub al que se enviarán las notificaciones.
  • Al menos una de las siguientes definiciones de recurso:
  • CONTENT_TYPE: opcional. El tipo de contenido de los metadatos que quieras obtener. Si no se especifica --content-type, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y los proyectos, las carpetas y las organizaciones a los que pertenecen.
  • RELATIONSHIP_TYPE_#: opcional. Se requiere acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist. Lista separada por comas de tipos de relaciones de recursos que quieras obtener. Para que funcione, debes asignar el valor RELATIONSHIP a CONTENT_TYPE.
  • Si añades una condición de feed opcional, incluye los siguientes detalles en el comando:
    • CONDITION_TITLE: título que se asignará a la condición del feed.
    • CONDITION_DESCRIPTION: descripción que se asignará a la condición del feed.
    • CONDITION_EXPRESSION: la expresión condicional que se aplicará al feed.

Consulta la referencia de la CLI de gcloud para ver todas las opciones.

Ejemplo

Ejecuta el siguiente comando para crear un feed en el tema de Pub/Sub my-topic que envía notificaciones cuando se hacen cambios en los siguientes recursos del proyecto my-project.

  • Segmento de Cloud Storage my-bucket
  • Cualquier tabla de 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

Respuesta de ejemplo

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

Método HTTP y URL:

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

Encabezados:

X-Goog-User-Project: BILLING_PROJECT_ID

Cuerpo JSON de la solicitud:

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

Proporciona los siguientes valores:

  • SCOPE_PATH: usa uno de los siguientes valores:

    Los valores permitidos son:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se va a crear el feed.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto en el que se va a crear el feed.

      Cómo encontrar el Google Cloud número de proyecto

      Google Cloud consola

      Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:

      1. Ve a la página Bienvenida de la Google Cloud consola.

        Ir a Bienvenida

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista y, a continuación, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.

        Se muestran hasta 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.

      CLI de gcloud

      Puedes obtener un Google Cloud número de proyecto con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se creará el feed.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se va a crear el feed.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Inventario de Recursos de Cloud que tiene permisos para gestionar tu tema de Pub/Sub. Consulta más información sobre cómo definir el proyecto de facturación.

  • FEED_ID: Identificador único del feed de recursos.
  • Al menos una de las siguientes definiciones de recurso:
  • CONTENT_TYPE: opcional. El tipo de contenido de los metadatos que quieras obtener. Si no se especifica contentType, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y los proyectos, las carpetas y las organizaciones a los que pertenecen.
  • RELATIONSHIP_TYPE_#: opcional. Se requiere acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist. Lista separada por comas de tipos de relaciones de recursos que quieras obtener. Para que funcione, debes asignar el valor RELATIONSHIP a CONTENT_TYPE.
  • TOPIC_PROJECT_ID: ID del proyecto en el que se encuentra el tema de Pub/Sub.
  • TOPIC_ID: ID del tema de Pub/Sub al que se enviarán las notificaciones.
  • Si añades una condición de feed opcional, incluye los siguientes detalles en el comando:
    • CONDITION_TITLE: título que se asignará a la condición del feed.
    • CONDITION_DESCRIPTION: descripción que se asignará a la condición del feed.
    • CONDITION_EXPRESSION: la expresión condicional que se aplicará al feed.

Consulta la referencia de REST para ver todas las opciones.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para crear un feed en el tema de my-topicPub/Sub que avise cuando se hagan cambios en los siguientes recursos del proyecto my-project.

  • Segmento de Cloud Storage my-bucket
  • Cualquier tabla de 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

Respuesta de ejemplo

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Obtener feeds

gcloud

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

Proporciona los siguientes valores:

  • SCOPE: usa uno de los siguientes valores:

    • project=PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se encuentra el feed.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se encuentra el feed.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se encuentra el feed.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Inventario de Recursos de Cloud que tiene permisos para gestionar tu tema de Pub/Sub. Consulta más información sobre cómo definir el proyecto de facturación.

  • FEED_ID: Identificador único del feed de recursos.

Consulta la referencia de la CLI de gcloud para ver todas las opciones.

Respuesta de ejemplo

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

Método HTTP y URL:

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

Encabezados:

X-Goog-User-Project: BILLING_PROJECT_ID

Proporciona los siguientes valores:

  • SCOPE_PATH: usa uno de los siguientes valores:

    Los valores permitidos son:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se encuentra el feed.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto en el que se encuentra el feed.

      Cómo encontrar el Google Cloud número de proyecto

      Google Cloud consola

      Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:

      1. Ve a la página Bienvenida de la Google Cloud consola.

        Ir a Bienvenida

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista y, a continuación, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.

        Se muestran hasta 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.

      CLI de gcloud

      Puedes obtener un Google Cloud número de proyecto con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se encuentra el feed.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se encuentra el feed.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación.

  • FEED_ID: Identificador único del feed de recursos.

Consulta la referencia de REST para ver todas las opciones.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para obtener un feed específico.

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

Respuesta de ejemplo

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Mostrar feeds

Para enumerar todos los feeds de un proyecto, una carpeta o una organización, haz una de las siguientes solicitudes.

gcloud

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

Proporciona los siguientes valores:

  • SCOPE: usa uno de los siguientes valores:

    • project=PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se encuentran los feeds.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se encuentran los feeds.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se encuentran los feeds.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Inventario de Recursos de Cloud que tiene permisos para gestionar tu tema de Pub/Sub. Consulta más información sobre cómo definir el proyecto de facturación.

Consulta la referencia de la CLI de gcloud para ver todas las opciones.

Respuesta de ejemplo

- 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

Método HTTP y URL:

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

Encabezados:

X-Goog-User-Project: BILLING_PROJECT_ID

Proporciona los siguientes valores:

  • SCOPE_PATH: usa uno de los siguientes valores:

    Los valores permitidos son:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se encuentran los feeds.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto en el que se encuentran los feeds.

      Cómo encontrar el Google Cloud número de proyecto

      Google Cloud consola

      Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:

      1. Ve a la página Bienvenida de la Google Cloud consola.

        Ir a Bienvenida

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista y, a continuación, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.

        Se muestran hasta 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.

      CLI de gcloud

      Puedes obtener un Google Cloud número de proyecto con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se encuentran los feeds.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se encuentran los feeds.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación.

Consulta la referencia de REST para ver todas las opciones.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para enumerar todos los feeds del proyecto 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

Respuesta de ejemplo

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Actualizar feeds

Puede actualizar los atributos de un feed de las siguientes formas:

  • Añadir o quitar nombres de recursos específicos, o bien borrar todos los nombres del feed.

  • Añadir o quitar tipos de recursos específicos, o bien borrar todos los recursos del feed.

  • Sobrescribir las condiciones o eliminarlas del 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"

Proporciona los siguientes valores:

  • SCOPE: usa uno de los siguientes valores:

    • project=PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se va a actualizar el feed.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se va a actualizar el feed.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se va a actualizar el feed.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • FEED_ID: Identificador único del feed de recursos.
  • BILLING_PROJECT_ID: opcional. El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory que tiene permisos para gestionar tu tema de Pub/Sub. Consulta más información sobre cómo definir el proyecto de facturación.

  • TOPIC_PROJECT_ID: ID del proyecto en el que se encuentra el tema de Pub/Sub.
  • TOPIC_ID: ID del tema de Pub/Sub al que se enviarán las notificaciones.
  • Al menos una de las siguientes definiciones de recurso:
  • CONTENT_TYPE: opcional. El tipo de contenido de los metadatos que quieras obtener. Si no se especifica --content-type, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y los proyectos, las carpetas y las organizaciones a los que pertenecen.
  • RELATIONSHIP_TYPE_#: opcional. Se requiere acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist. Lista separada por comas de tipos de relaciones de recursos que quieras obtener. Para que funcione, debes asignar el valor RELATIONSHIP a CONTENT_TYPE.
  • Si añades una condición de feed opcional, incluye los siguientes detalles en el comando:
    • CONDITION_TITLE: título que se asignará a la condición del feed.
    • CONDITION_DESCRIPTION: descripción que se asignará a la condición del feed.
    • CONDITION_EXPRESSION: la expresión condicional que se aplicará al feed.

Consulta la referencia de la CLI de gcloud para ver todas las opciones.

Ejemplo

Ejecuta el siguiente comando para actualizar el tema de Pub/Sub my-topic en el proyecto my-project. Esta solicitud quita todos los nombres de recursos de la monitorización y añade el tipo de recurso 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

Respuesta de ejemplo

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

Para actualizar los atributos de un feed, debe especificar la ruta del atributo en update_mask y el valor de ese atributo.

REST

Método HTTP y URL:

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

Encabezados:

X-Goog-User-Project: BILLING_PROJECT_ID

Cuerpo JSON de la solicitud:

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

Proporciona los siguientes valores:

  • SCOPE_PATH: usa uno de los siguientes valores:

    Los valores permitidos son:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se va a actualizar el feed.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto en el que se va a actualizar el feed.

      Cómo encontrar el Google Cloud número de proyecto

      Google Cloud consola

      Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:

      1. Ve a la página Bienvenida de la Google Cloud consola.

        Ir a Bienvenida

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista y, a continuación, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.

        Se muestran hasta 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.

      CLI de gcloud

      Puedes obtener un Google Cloud número de proyecto con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se va a actualizar el feed.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se va a actualizar el feed.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Inventario de Recursos de Cloud que tiene permisos para gestionar tu tema de Pub/Sub. Consulta más información sobre cómo definir el proyecto de facturación.

  • FEED_ID: Identificador único del feed de recursos.
  • Al menos una de las siguientes definiciones de recurso:
  • CONTENT_TYPE: opcional. El tipo de contenido de los metadatos que quieras obtener. Si no se especifica contentType, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y los proyectos, las carpetas y las organizaciones a los que pertenecen.
  • RELATIONSHIP_TYPE_#: opcional. Se requiere acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist. Lista separada por comas de tipos de relaciones de recursos que quieras obtener. Para que funcione, debes asignar el valor RELATIONSHIP a CONTENT_TYPE.
  • TOPIC_PROJECT_ID: ID del proyecto en el que se encuentra el tema de Pub/Sub.
  • TOPIC_ID: ID del tema de Pub/Sub al que se enviarán las notificaciones.
  • Si añades una condición de feed opcional, incluye los siguientes detalles en el comando:
    • CONDITION_TITLE: título que se asignará a la condición del feed.
    • CONDITION_DESCRIPTION: descripción que se asignará a la condición del feed.
    • CONDITION_EXPRESSION: la expresión condicional que se aplicará al feed.

Consulta la referencia de REST para ver todas las opciones.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para actualizar el tema de Pub/Sub my-topic en el proyecto my-project. Esta solicitud quita todos los nombres de recursos de la monitorización y añade el tipo de recurso 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

Respuesta de ejemplo

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Eliminar feeds

Si ya no quieres recibir notificaciones sobre los cambios en los recursos, haz una de las siguientes solicitudes para eliminar un feed.

gcloud

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

Proporciona los siguientes valores:

  • SCOPE: usa uno de los siguientes valores:

    • project=PROJECT_ID, donde PROJECT_ID es el ID del proyecto en el que se encuentra el feed.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se encuentra el feed.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se encuentra el feed.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Inventario de Recursos de Cloud que tiene permisos para gestionar tu tema de Pub/Sub. Consulta más información sobre cómo definir el proyecto de facturación.

Consulta la referencia de la CLI de gcloud para ver todas las opciones.

Respuesta de ejemplo

Si la eliminación se realiza correctamente, no se devuelve ninguna respuesta.

REST

Método HTTP y URL:

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

Encabezados:

X-Goog-User-Project: BILLING_PROJECT_ID

Proporciona los siguientes valores:

  • SCOPE_PATH: usa uno de los siguientes valores:

    Los valores permitidos son:

    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto en el que se encuentra el feed.

      Cómo encontrar el Google Cloud número de proyecto

      Google Cloud consola

      Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:

      1. Ve a la página Bienvenida de la Google Cloud consola.

        Ir a Bienvenida

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista y, a continuación, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.

        Se muestran hasta 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.

      CLI de gcloud

      Puedes obtener un Google Cloud número de proyecto con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, donde FOLDER_ID es el ID de la carpeta en la que se encuentra el feed.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización en la que se encuentra el feed.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Inventario de Recursos de Cloud que tiene permisos para gestionar tu tema de Pub/Sub. Consulta más información sobre cómo definir el proyecto de facturación.

Consulta la referencia de REST para ver todas las opciones.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para eliminar un feed específico.

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

Respuesta de ejemplo

{}

Go

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.

Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

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

Condiciones de los feeds

Para ver solo determinados tipos de cambios de un recurso concreto, puede añadir una condición a su feed. Las condiciones se escriben en lenguaje de expresión común (CEL).

La compatibilidad con las condiciones es limitada. En algunos casos, crear o actualizar feeds con condiciones puede provocar un retraso.

Limitaciones

  • Las expresiones de condición tienen un límite de 3000 caracteres.

  • La mayoría de los nombres de las variables de las expresiones de condición se representan en minúsculas con guiones bajos entre cada palabra. Por ejemplo, example_variable.

    La excepción son los nombres de las variables de los subcampos de data en el objeto Resource. No tienen separadores de palabras y la primera letra de cada palabra después de la primera se escribe en mayúscula. Por ejemplo, exampleVariable.

  • Algunas validaciones de expresiones de condición se realizan durante la creación o la actualización del feed. Sin embargo, estas validaciones no son exhaustivas, sobre todo en el caso de las condiciones definidas en el campo temporal_asset.asset.resource.data, que tiene un tipo dinámico. Siempre que sea posible, filtre su feed usando los parámetros adecuados de la CLI de gcloud o de la API REST.

  • Las notificaciones no se envían si se producen errores durante el tiempo de evaluación, pero los errores se registran.

  • En temporal_asset.asset.resource.data, los tipos dinámicos y las condiciones especificadas en campos que no están presentes activan errores de tiempo de ejecución y no se publican notificaciones. Por ejemplo, en la condición temporal_asset.asset.resource.data.name != "my_name", si falta el campo name en una actualización, la evaluación falla y no recibes notificaciones. Si tu condición solo funciona cuando hay determinados campos, añade una comprobación de existencia a la condición para asegurarte de que se evalúa correctamente.

  • Los tipos de enumeración estáticos se pueden representar como nombres de ruta completos o como números enteros sin formato. Por ejemplo, las siguientes expresiones son válidas para prior_asset_state:

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

    y

    temporal_asset.prior_asset_state == 3
    

    Los tipos de enumeración dinámicos de temporal_asset.asset.resource.data se representan como cadenas sin formato. Por ejemplo, la siguiente expresión es válida para el tipo de recurso cloudresourcemanager.googleapis.com/Project:

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

Crear una expresión de condición con CEL

En una condición de feed, se usa el lenguaje de expresión común (CEL) para tomar decisiones booleanas basadas en datos de atributos. Una expresión condicional consta de una o varias instrucciones unidas mediante operadores lógicos. Cada instrucción expresa una regla de control basada en atributos que se aplica al TemporalAsset para determinar si se envía una notificación.

Las siguientes funciones de CEL son las más importantes para las condiciones de los feeds:

  • Variables: las condiciones usan variables para expresar un atributo determinado, como temporal_asset.deleted (Boolean) o temporal_asset.asset.name (String). Estas variables se rellenan con valores basados en el contexto en tiempo de ejecución.

  • Operadores: cada tipo de datos, como String, admite un conjunto de operadores que se pueden usar para crear una expresión lógica. Lo más habitual es que los operadores se usen para comparar el valor contenido en una variable con un valor literal, como temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345". En este ejemplo, si el valor de entrada de temporal_asset.asset.name es //cloudresourcemanager.googleapis.com/projects/12345, la expresión se evalúa como true.

  • Funciones: una función es un operador compuesto para tipos de datos que admiten operaciones más complejas. En las expresiones de condición, hay funciones predefinidas que se pueden usar junto con un tipo de datos concreto. Por ejemplo, temporal_asset.asset.name.contains("keyword") usa una función llamada contains para comprobar si el valor de temporal_asset.asset.name contiene "keyword". Si es así, se evalúa como true.

  • Operadores lógicos: las condiciones admiten operadores lógicos que se pueden usar para crear expresiones lógicas complejas a partir de instrucciones de expresiones básicas: && (Y) y || (O). Estos operadores lógicos permiten usar varias variables de entrada en una expresión condicional. Por ejemplo: temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020 combina dos instrucciones básicas y requiere que se cumplan ambas para producir un resultado de evaluación true.

Para obtener más información sobre las funciones de CEL, consulta la definición del lenguaje.

Usar variables de condición

Las variables de condición te permiten crear condiciones en diferentes atributos. Las variables de condición admitidas son las siguientes:

  • temporal_asset el cambio de recurso más reciente en formato TemporalAsset. Si la condición se evalúa como verdadera, se envía el TemporalAsset al destino configurado.

Ejemplos de expresiones de condición

La siguiente expresión de condición envía notificaciones sobre eventos de creación:

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

La siguiente expresión de condición envía notificaciones de los recursos que se encuentran en las carpetas 12345 y 23456:

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

La siguiente expresión de condición envía notificaciones cuando se añaden nuevas reglas permitidas a los cortafuegos, siempre que el tipo de recurso ya se haya definido como compute.googleapis.com/Firewall en el feed:

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

La siguiente expresión de condición envía notificaciones de instancias de VM con el tipo de máquina n1-standard-1, suponiendo que el tipo de recurso ya se ha definido como compute.googleapis.com/Instance en el feed:

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

La siguiente expresión de condición envía notificaciones de los segmentos de almacenamiento que tengan políticas de gestión de identidades y accesos de allUsers, siempre que el tipo de recurso sea storage.googleapis.com/Bucket y el tipo de contenido sea IAM_POLICY en el feed:

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

La siguiente expresión de condición envía una notificación cuando se elimina un contenedor de almacenamiento con la clave test en su etiqueta:

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

Solución de problemas

Si no recibes notificaciones sobre las actualizaciones de recursos o de políticas de gestión de identidades y accesos, sigue estos pasos para solucionar el problema:

  • Asegúrate de que los metadatos de tus recursos han cambiado. La feed en tiempo real solo envía actualizaciones cuando cambian los metadatos de los tipos de recursos admitidos. Las operaciones como la subida de un archivo nuevo a tu segmento de Cloud Storage no activan un cambio de metadatos.

  • Asegúrate de que tus recursos coincidan con uno de los nombres o tipos de recursos que hayas especificado en el feed.

  • En el caso de las eliminaciones de proyectos, ten en cuenta que, cuando cierras un proyecto, tienes 30 días para deshacer la operación. Por este motivo, el campo deleted de los metadatos del recurso no se define hasta que el proyecto se elimina de forma permanente. Para monitorizar los proyectos cuya eliminación está pendiente, puedes definir una condición en el campo lifecycleState del proyecto. Por ejemplo: temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED".

  • Consulta los registros para ver si hay errores al publicar actualizaciones en tu tema.

Cloud Logging

Cuando los feeds en tiempo real no pueden enviar recursos o actualizaciones de políticas de gestión de identidades y accesos a través de Pub/Sub, el inventario de recursos de Cloud registra el estado y el mensaje de error en Logging. El registro está habilitado de forma predeterminada y pertenece a Google Cloud Observability. Consulta los precios de Google Cloud Observability.

Ver registros de feeds en tiempo real

El registro de feed en tiempo real se indexa por un tema de Pub/Sub. Para ver todos los registros:

  1. Ve a la página Explorador de registros de la consola de Google Cloud .

    Ir a Explorador de registros

  2. Haz clic en la lista Recurso, que está cerca del cuadro Buscar en todos los campos.

  3. Busca Cloud Pub/Sub Topic y, a continuación, haz clic en el tipo de recurso Tema de Cloud Pub/Sub.

  4. Haga clic en el ID del tema que quiera ver.

  5. Haz clic en Aplicar.

La codificación UTF-8 es obligatoria para los campos de registro. Los caracteres que no son caracteres UTF-8 se sustituyen por signos de interrogación.

Información registrada

Las entradas de registro de feeds en tiempo real contienen los siguientes tipos de información:

  • Información general que se muestra en la mayoría de los registros, como la gravedad, el ID del proyecto, el número del proyecto o la marca de tiempo. Google Cloud

  • Campos de registro de feeds en tiempo real de jsonPayload, que contiene el nombre del recurso, la configuración de salida del feed y el estado del error al publicar actualizaciones de recursos o de políticas de gestión de identidades y accesos.

En la siguiente tabla se muestra el tipo de información que contiene cada campo.

Campo Tipo y descripción
name

string

Nombre completo del feed. El formato es uno de los siguientes:

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

string

Nombre completo del recurso del que quieres recibir novedades. Por ejemplo:

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

Para obtener más información, consulta Nombres de recursos .

condition

Expr

Condición del feed que determina si se debe publicar una actualización de un recurso.

error_status

Status

Estado cuando no se pueden publicar las actualizaciones de recursos en un feed.

feed_output_config

FeedOutputConfig

Configuración de la salida del feed que define dónde se publican las actualizaciones de los recursos.