Monitorize alterações de recursos com o Pub/Sub

Pode receber notificações em tempo real sobre alterações de recursos e políticas através da criação e subscrição de um feed.

Quando cria o feed, pode especificar que quer monitorizar as alterações dos tipos de recursos suportados, das políticas IAM, das políticas de acesso e das políticas da organização numa organização, numa pasta ou num projeto. Além disso, pode adicionar condições ao seu feed para receber apenas notificações de determinados tipos de alterações a um recurso.

Depois de criar um feed, recebe notificações através do Pub/Sub sempre que os recursos especificados mudam. A primeira mensagem publicada no tópico do Pub/Sub é uma mensagem de boas-vindas no formato de uma string, e todas as mensagens seguintes estão no formato de um TemporalAsset.

Segue-se uma mensagem de exemplo do Pub/Sub para o tipo de conteúdo 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 saber mais sobre o Pub/Sub ou como configurar subscrições, consulte a documentação do Pub/Sub.

Antes de começar

  1. Ative a API Cloud Asset Inventory no projeto a partir do qual está a executar comandos do Cloud Asset Inventory.

    Ative a API Cloud Asset Inventory

  2. Certifique-se de que a sua conta tem a função correta para chamar a API Cloud Asset Inventory. Para ver as autorizações individuais de cada tipo de chamada, consulte a secção Autorizações.

  3. Crie um tópico do Pub/Sub, se ainda não tiver um.

Limitações

  • A aplicação de qualquer criação, atualização ou eliminação de feeds pode demorar até 10 minutos.

  • O projeto no qual um feed é criado tem de sobreviver ao feed. Isto deve-se ao facto de a conta de serviço usada para publicar no tópico do Pub/Sub de destino estar localizada nesse projeto. Um feed deixa de funcionar e é eliminado assim que a eliminação do projeto for permanente.

  • Pode criar até 200 feeds num feed principal. Este limite aplica-se apenas a feeds diretamente associados a um elemento principal e não contabiliza os feeds dos respetivos elementos secundários. Por exemplo, se tiver 10 projetos numa organização, cada projeto pode ter até 200 feeds, e a organização também pode ter até 200 feeds.

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

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto no qual o feed vai ser criado.
    • folder=FOLDER_ID, onde FOLDER_ID é o ID da pasta na qual criar o feed.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização na qual o feed vai ser criado.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • FEED_ID: um identificador exclusivo do feed de recursos.
  • BILLING_PROJECT_ID: opcional. O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir o seu tópico do Pub/Sub. Leia mais sobre como definir o projeto de faturação.

  • TOPIC_PROJECT_ID: O ID do projeto onde o tópico do Pub/Sub está localizado.
  • TOPIC_ID: o ID do tópico do Pub/Sub para o qual publicar notificações.
  • Pelo menos uma das seguintes definições de recursos:
  • CONTENT_TYPE: opcional. O tipo de conteúdo dos metadados que quer obter. Quando --content-type não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.
  • RELATIONSHIP_TYPE_#: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definir CONTENT_TYPE como RELATIONSHIP para que isto funcione.
  • Se adicionar uma condição do feed opcional, inclua os seguintes detalhes no comando:
    • CONDITION_TITLE: um título a atribuir à condição do feed.
    • CONDITION_DESCRIPTION: uma descrição a atribuir à condição do feed.
    • CONDITION_EXPRESSION: a expressão condicional a aplicar ao feed.

Consulte a referência da CLI gcloud para ver todas as opções.

Exemplo

Execute o seguinte comando para criar um feed no tópico do my-topic Pub/Sub que envia uma notificação quando são feitas alterações aos seguintes recursos no projeto do my-project.

  • O contentor do my-bucket Cloud Storage
  • Qualquer tabela do 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

Exemplo de resposta

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 e URL:

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

Cabeçalhos:

X-Goog-User-Project: BILLING_PROJECT_ID

Corpo JSON do pedido:

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

Indique os seguintes valores:

  • SCOPE_PATH: use um dos seguintes valores:

    Os valores permitidos são:

    • projects/PROJECT_ID, onde PROJECT_ID é o ID do projeto no qual o feed vai ser criado.
    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto no qual criar o feed.

      Como encontrar um Google Cloud número do projeto

      Google Cloud consola

      Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:

      1. Aceda à página Boas-vindas na Google Cloud consola.

        Aceder a Boas-vindas

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.

        São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.

      CLI gcloud

      Pode obter um Google Cloud número do projeto com o seguinte comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, onde FOLDER_ID é o ID da pasta na qual criar o feed.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização na qual o feed vai ser criado.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir o seu tópico do Pub/Sub. Leia mais sobre como definir o projeto de faturação.

  • FEED_ID: um identificador exclusivo do feed de recursos.
  • Pelo menos uma das seguintes definições de recursos:
  • CONTENT_TYPE: opcional. O tipo de conteúdo dos metadados que quer obter. Quando contentType não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.
  • RELATIONSHIP_TYPE_#: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definir CONTENT_TYPE como RELATIONSHIP para que isto funcione.
  • TOPIC_PROJECT_ID: O ID do projeto onde o tópico do Pub/Sub está localizado.
  • TOPIC_ID: o ID do tópico do Pub/Sub para o qual publicar notificações.
  • Se adicionar uma condição do feed opcional, inclua os seguintes detalhes no comando:
    • CONDITION_TITLE: um título a atribuir à condição do feed.
    • CONDITION_DESCRIPTION: uma descrição a atribuir à condição do feed.
    • CONDITION_EXPRESSION: a expressão condicional a aplicar ao feed.

Consulte a referência REST para ver todas as opções.

Exemplos de comandos

Execute um dos seguintes comandos para criar um feed no tópico do my-topicPub/Sub que envia uma notificação quando são feitas alterações aos seguintes recursos no projeto my-project.

  • O contentor do my-bucket Cloud Storage
  • Qualquer tabela do BigQuery

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

Exemplo de resposta

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

Ir

Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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}"

Obtenha feeds

gcloud

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

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto no qual o feed se encontra.
    • folder=FOLDER_ID, onde FOLDER_ID é o ID da pasta em que o feed se encontra.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização em que o feed se encontra.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir o seu tópico do Pub/Sub. Leia mais sobre como definir o projeto de faturação.

  • FEED_ID: um identificador exclusivo do feed de recursos.

Consulte a referência da CLI gcloud para ver todas as opções.

Exemplo de resposta

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 e URL:

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

Cabeçalhos:

X-Goog-User-Project: BILLING_PROJECT_ID

Indique os seguintes valores:

  • SCOPE_PATH: use um dos seguintes valores:

    Os valores permitidos são:

    • projects/PROJECT_ID, onde PROJECT_ID é o ID do projeto no qual o feed se encontra.
    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto em que o feed se encontra.

      Como encontrar um Google Cloud número do projeto

      Google Cloud consola

      Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:

      1. Aceda à página Boas-vindas na Google Cloud consola.

        Aceder a Boas-vindas

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.

        São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.

      CLI gcloud

      Pode obter um Google Cloud número do projeto com o seguinte comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, onde FOLDER_ID é o ID da pasta em que o feed se encontra.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização em que o feed se encontra.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: O ID do projeto em que o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação.

  • FEED_ID: um identificador exclusivo do feed de recursos.

Consulte a referência REST para ver todas as opções.

Exemplos de comandos

Execute um dos seguintes comandos para obter um feed específico.

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

Exemplo de resposta

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

Ir

Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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}")

Feeds de listas

Para listar todos os feeds de um projeto, uma pasta ou uma organização, faça um dos seguintes pedidos.

gcloud

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

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto em que os feeds se encontram.
    • folder=FOLDER_ID, em que FOLDER_ID é o ID da pasta que contém os feeds.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização em que os feeds se encontram.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir o seu tópico do Pub/Sub. Leia mais sobre como definir o projeto de faturação.

Consulte a referência da CLI gcloud para ver todas as opções.

Exemplo de resposta

- 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 e URL:

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

Cabeçalhos:

X-Goog-User-Project: BILLING_PROJECT_ID

Indique os seguintes valores:

  • SCOPE_PATH: use um dos seguintes valores:

    Os valores permitidos são:

    • projects/PROJECT_ID, onde PROJECT_ID é o ID do projeto em que os feeds se encontram.
    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto em que os feeds se encontram.

      Como encontrar um Google Cloud número do projeto

      Google Cloud consola

      Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:

      1. Aceda à página Boas-vindas na Google Cloud consola.

        Aceder a Boas-vindas

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.

        São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.

      CLI gcloud

      Pode obter um Google Cloud número do projeto com o seguinte comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, em que FOLDER_ID é o ID da pasta que contém os feeds.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização em que os feeds se encontram.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: O ID do projeto em que o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação.

Consulte a referência REST para ver todas as opções.

Exemplos de comandos

Execute um dos seguintes comandos para apresentar uma lista de todos os feeds no projeto my-project.

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

Exemplo de resposta

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

Ir

Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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}")

Atualize feeds

Pode atualizar os atributos de um feed existente das seguintes formas:

  • Adicionar e remover nomes de recursos específicos ou limpar todos os nomes do feed.

  • Adicionar e remover tipos de recursos específicos ou limpar todos os tipos do feed.

  • Substituir as condições ou limpá-las do 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"

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto no qual o feed vai ser atualizado.
    • folder=FOLDER_ID, onde FOLDER_ID é o ID da pasta na qual quer atualizar o feed.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização na qual o feed vai ser atualizado.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • FEED_ID: um identificador exclusivo do feed de recursos.
  • BILLING_PROJECT_ID: opcional. O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir o seu tópico do Pub/Sub. Leia mais sobre como definir o projeto de faturação.

  • TOPIC_PROJECT_ID: O ID do projeto onde o tópico do Pub/Sub está localizado.
  • TOPIC_ID: o ID do tópico do Pub/Sub para o qual publicar notificações.
  • Pelo menos uma das seguintes definições de recursos:
  • CONTENT_TYPE: opcional. O tipo de conteúdo dos metadados que quer obter. Quando --content-type não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.
  • RELATIONSHIP_TYPE_#: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definir CONTENT_TYPE como RELATIONSHIP para que isto funcione.
  • Se adicionar uma condição do feed opcional, inclua os seguintes detalhes no comando:
    • CONDITION_TITLE: um título a atribuir à condição do feed.
    • CONDITION_DESCRIPTION: uma descrição a atribuir à condição do feed.
    • CONDITION_EXPRESSION: a expressão condicional a aplicar ao feed.

Consulte a referência da CLI gcloud para ver todas as opções.

Exemplo

Execute o seguinte comando para atualizar o tópico do Pub/Sub no projeto my-project.my-topic Este pedido remove todos os nomes de recursos da monitorização e adiciona o 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

Exemplo de resposta

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 atualizar os atributos de um feed, tem de especificar o caminho do atributo no elemento update_mask e o valor desse atributo.

REST

Método HTTP e URL:

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

Cabeçalhos:

X-Goog-User-Project: BILLING_PROJECT_ID

Corpo JSON do pedido:

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

Indique os seguintes valores:

  • SCOPE_PATH: use um dos seguintes valores:

    Os valores permitidos são:

    • projects/PROJECT_ID, onde PROJECT_ID é o ID do projeto no qual o feed vai ser atualizado.
    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto no qual quer atualizar o feed.

      Como encontrar um Google Cloud número do projeto

      Google Cloud consola

      Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:

      1. Aceda à página Boas-vindas na Google Cloud consola.

        Aceder a Boas-vindas

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.

        São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.

      CLI gcloud

      Pode obter um Google Cloud número do projeto com o seguinte comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, onde FOLDER_ID é o ID da pasta na qual quer atualizar o feed.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização na qual o feed vai ser atualizado.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir o seu tópico do Pub/Sub. Leia mais sobre como definir o projeto de faturação.

  • FEED_ID: um identificador exclusivo do feed de recursos.
  • Pelo menos uma das seguintes definições de recursos:
  • CONTENT_TYPE: opcional. O tipo de conteúdo dos metadados que quer obter. Quando contentType não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.
  • RELATIONSHIP_TYPE_#: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definir CONTENT_TYPE como RELATIONSHIP para que isto funcione.
  • TOPIC_PROJECT_ID: O ID do projeto onde o tópico do Pub/Sub está localizado.
  • TOPIC_ID: o ID do tópico do Pub/Sub para o qual publicar notificações.
  • Se adicionar uma condição do feed opcional, inclua os seguintes detalhes no comando:
    • CONDITION_TITLE: um título a atribuir à condição do feed.
    • CONDITION_DESCRIPTION: uma descrição a atribuir à condição do feed.
    • CONDITION_EXPRESSION: a expressão condicional a aplicar ao feed.

Consulte a referência REST para ver todas as opções.

Exemplos de comandos

Execute um dos seguintes comandos para atualizar o tópico do my-topic Pub/Sub no projeto my-project. Este pedido remove todos os nomes de recursos da monitorização e adiciona o tipo de recurso gkemulticloud.googleapis.com/AttachedCluster.

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

Exemplo de resposta

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

Ir

Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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}")

Elimine feeds

Se já não quiser receber notificações sobre alterações aos recursos, faça um dos seguintes pedidos para eliminar um feed.

gcloud

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

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto no qual o feed se encontra.
    • folder=FOLDER_ID, onde FOLDER_ID é o ID da pasta em que o feed se encontra.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização em que o feed se encontra.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir o seu tópico do Pub/Sub. Leia mais sobre como definir o projeto de faturação.

Consulte a referência da CLI gcloud para ver todas as opções.

Exemplo de resposta

Uma eliminação bem-sucedida não devolve nenhuma resposta.

REST

Método HTTP e URL:

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

Cabeçalhos:

X-Goog-User-Project: BILLING_PROJECT_ID

Indique os seguintes valores:

  • SCOPE_PATH: use um dos seguintes valores:

    Os valores permitidos são:

    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto em que o feed se encontra.

      Como encontrar um Google Cloud número do projeto

      Google Cloud consola

      Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:

      1. Aceda à página Boas-vindas na Google Cloud consola.

        Aceder a Boas-vindas

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.

        São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.

      CLI gcloud

      Pode obter um Google Cloud número do projeto com o seguinte comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, onde FOLDER_ID é o ID da pasta em que o feed se encontra.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"

      Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag --format para ver mais informações sobre as pastas encontradas.

      O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização em que o feed se encontra.

      Como encontrar o ID de uma Google Cloud organização

      Google Cloud consola

      Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

      2. Clique na caixa de lista do comutador na barra de menu.
      3. Selecione a sua organização na caixa de lista.
      4. Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.

      CLI gcloud

      Pode obter o ID de uma Google Cloud organização com o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir o seu tópico do Pub/Sub. Leia mais sobre como definir o projeto de faturação.

Consulte a referência REST para ver todas as opções.

Exemplos de comandos

Execute um dos seguintes comandos para eliminar um feed específico.

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

Exemplo de resposta

{}

Ir

Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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")

Condições do feed

Para ver apenas determinados tipos de alterações de um determinado recurso, pode adicionar uma condição ao feed. As condições são escritas no Idioma de expressão comum (IEC).

O suporte para condições é limitado. Em alguns casos, a criação ou a atualização de feeds com condições pode resultar num atraso.

Limitações

  • As expressões de condições têm um limite de comprimento de 3000 carateres.

  • A maioria dos nomes de variáveis nas expressões de condições é representada em letras minúsculas com carateres de sublinhado entre cada palavra. Por exemplo, example_variable.

    A exceção são os nomes das variáveis dos subcampos de data no objeto Resource. Não têm separadores de palavras e o primeiro caráter de cada palavra depois da primeira tem uma letra maiúscula. Por exemplo, exampleVariable.

  • Algumas validações em expressões condicionais são realizadas durante a criação do feed ou a hora de atualização do feed. No entanto, essas validações não são abrangentes, especialmente para condições definidas no campo temporal_asset.asset.resource.data, que tem um tipo dinâmico. Sempre que possível, filtre o feed usando os parâmetros apropriados da CLI gcloud ou da API REST.

  • As notificações não são enviadas se ocorrerem erros durante o tempo de avaliação. No entanto, os erros são registados.

  • Para tipos dinâmicos em temporal_asset.asset.resource.data, as condições especificadas em campos ausentes acionam erros de tempo de execução e as notificações não são publicadas. Por exemplo, para a condição temporal_asset.asset.resource.data.name != "my_name", se o campo name estiver em falta numa atualização, a avaliação falha e não recebe notificações. Se a sua condição só funcionar na presença de determinados campos, adicione uma verificação de existência à condição para garantir que é avaliada corretamente.

  • Os tipos de enumeração estáticos podem ser representados como nomes de caminhos totalmente qualificados ou números inteiros não processados. Por exemplo, as seguintes expressões são válidas para prior_asset_state:

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

    e

    temporal_asset.prior_asset_state == 3
    

    Os tipos de enumeração dinâmicos em temporal_asset.asset.resource.data são representados como strings não processadas. Por exemplo, a seguinte expressão é válida para o tipo de recurso cloudresourcemanager.googleapis.com/Project:

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

Crie uma expressão de condição com o IEC

Numa condição do feed, o Idioma de expressão comum (IEC) é usado para tomar decisões booleanas com base nos dados dos atributos. Uma expressão de condição consiste numa ou mais declarações unidas através de operadores lógicos. Cada declaração expressa uma regra de controlo baseada em atributos que se aplica ao TemporalAsset para determinar se é enviada uma notificação.

As seguintes funcionalidades da CEL são as mais importantes para as condições do feed:

  • Variáveis: as condições usam variáveis para expressar um determinado atributo, como temporal_asset.deleted (Boolean) ou temporal_asset.asset.name (String). Estas variáveis são preenchidas com valores baseados no contexto no momento da execução.

  • Operadores: todos os tipos de dados, como String, suportam um conjunto de operadores que podem ser usados para criar uma expressão lógica. Normalmente, os operadores são usados para comparar o valor contido numa variável com um valor literal, como temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345". Neste exemplo, se o valor de entrada de temporal_asset.asset.name for //cloudresourcemanager.googleapis.com/projects/12345, a expressão tem o valor true.

  • Funções: uma função é um operador composto para tipos de dados que suportam operações mais complexas. Nas expressões de condição, existem funções predefinidas que podem ser usadas em conjunto com um determinado tipo de dados. Por exemplo, temporal_asset.asset.name.contains("keyword") usa uma função denominada contains para verificar se o valor de temporal_asset.asset.name contém "keyword". Em caso afirmativo, é avaliado como true.

  • Operadores lógicos: as condições suportam operadores lógicos que podem ser usados para criar expressões lógicas complexas a partir de declarações de expressões básicas: &&(AND) e || (OR). Estes operadores lógicos permitem usar várias variáveis de entrada numa expressão de condição. Por exemplo: temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020 junta duas declarações básicas e requer que ambas as declarações sejam cumpridas para produzir um resultado de avaliação true.

Para mais informações sobre as funcionalidades da CEL, consulte a definição de linguagem.

Usar variáveis de condição

As variáveis de condição permitem-lhe criar condições em diferentes atributos. As variáveis de condição suportadas são:

  • temporal_asset: a alteração do recurso mais recente no formato TemporalAsset. Se a condição for avaliada como verdadeira, o TemporalAsset é enviado para o destino configurado.

Exemplos de expressões de condições

A seguinte expressão de condição envia notificações em eventos de criação:

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

A seguinte expressão de condição envia notificações para recursos que estão localizados nas pastas 12345 e 23456:

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

A seguinte expressão de condição envia notificações quando são adicionadas novas regras permitidas a firewalls, partindo do princípio de que o tipo de recurso já está definido como compute.googleapis.com/Firewall no feed:

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

A seguinte expressão de condição envia notificações para instâncias de VM com o tipo de máquina n1-standard-1, partindo do princípio de que o tipo de recurso já está definido como compute.googleapis.com/Instance no feed:

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

A expressão de condição seguinte envia notificações para contentores de armazenamento com quaisquer políticas de IAM para allUsers, partindo do princípio de que o tipo de recurso está definido como storage.googleapis.com/Bucket e o tipo de conteúdo está definido como IAM_POLICY no feed:

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

A expressão de condição seguinte envia uma notificação quando um contentor de armazenamento com a chave test na respetiva etiqueta é eliminado:

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

Resolução de problemas

Se não estiver a receber notificações sobre atualizações de recursos ou políticas de IAM, os passos seguintes podem ajudar a resolver problemas:

  • Certifique-se de que os metadados dos seus recursos foram alterados. O feed em tempo real só envia atualizações quando os metadados dos tipos de recursos suportados foram alterados. As operações, como o carregamento de um novo ficheiro para o seu contentor do Cloud Storage, não acionam uma alteração de metadados.

  • Certifique-se de que os seus recursos correspondem a um dos nomes ou tipos de recursos especificados no feed.

  • Para eliminações de projetos, tenha em atenção que, quando encerra um projeto, tem 30 dias para anular a operação. Por este motivo, o campo deleted nos metadados do recurso não é definido até o projeto ser eliminado permanentemente. Para monitorizar projetos com eliminação pendente, pode definir uma condição no campo lifecycleState do projeto. Por exemplo: temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED".

  • Verifique os registos para ver se existem erros ao publicar atualizações no seu tópico.

Cloud Logging

Quando os feeds em tempo real não conseguem enviar recursos ou atualizações da política de IAM através do Pub/Sub, o Cloud Asset Inventory regista o estado de erro e a mensagem no Logging. O registo está ativado por predefinição e pertence ao Google Cloud Observability. Saiba mais sobre os preços da observabilidade do Google Cloud.

Visualizar registos de feeds em tempo real

O registo do feed em tempo real é indexado por um tópico Pub/Sub. Para ver todos os registos:

  1. Aceda à página Explorador de registos na Google Cloud consola.

    Aceda ao Explorador de registos

  2. Clique na lista Recurso, que se encontra junto à caixa Pesquisar todos os campos.

  3. Pesquise Cloud Pub/Sub Topic e, de seguida, clique no tipo de recurso Tópico do Cloud Pub/Sub.

  4. Clique no ID do tópico que quer ver.

  5. Clique em Aplicar.

A codificação UTF-8 é aplicada aos campos de registo. Os carateres que não são carateres UTF-8 são substituídos por pontos de interrogação.

Informações registadas

As entradas do registo do feed em tempo real contêm os seguintes tipos de informações:

  • Informações gerais apresentadas na maioria dos Google Cloud registos, como a gravidade, o ID do projeto, o número do projeto ou a data/hora.

  • Campos de registo do feed em tempo real em jsonPayload, que contém o nome do recurso, a configuração de saída do feed e o estado de erro ao publicar atualizações de recursos ou políticas de IAM.

A tabela seguinte mostra o tipo de informações que cada campo contém.

Campo Tipo e descrição
name

string

Nome completo do feed. O formato é um dos seguintes:

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

string

Nome completo do recurso para receber atualizações. Por exemplo:

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

Consulte Nomes de recursos para mais informações.

condition

Expr

Condição do feed que determina se uma atualização de recursos deve ser publicada.

error_status

Status

Estado quando ocorre uma falha na publicação de atualizações de recursos num feed.

feed_output_config

FeedOutputConfig

Configuração de saída do feed que define onde as atualizações dos recursos são publicadas.