Surveiller les modifications apportées aux éléments avec Pub/Sub

Vous pouvez recevoir des notifications en temps réel concernant les modifications de ressources et de règles en créant un flux et en vous y abonnant.

Lorsque vous créez le flux, vous pouvez spécifier que vous souhaitez surveiller les modifications des types de ressources, des stratégies IAM, des règles d'accès et des règles d'administration compatibles dans une organisation, un dossier ou un projet. Vous pouvez également ajouter des conditions à votre flux, de façon à recevoir des notifications uniquement pour certains types de modifications apportées à un élément.

Une fois un flux créé, vous recevez des notifications via Pub/Sub chaque fois que les éléments spécifiés changent. Le premier message publié dans le sujet Pub/Sub est un message de bienvenue au format de chaîne, et tous les messages suivants sont au format TemporalAsset.

Voici un exemple de message Pub/Sub pour le type de contenu 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"
  }
}

Pour en savoir plus sur Pub/Sub ou sur la configuration des abonnements, consultez la documentation Pub/Sub.

Avant de commencer

  1. Activez l'API Cloud Asset Inventory dans le projet à partir duquel vous exécutez les commandes inventaire des éléments cloud.

    Activer l'API Cloud Asset Inventory

  2. Assurez-vous que votre compte dispose du rôle approprié pour appeler l'API Cloud Asset Inventory. Pour connaître les autorisations individuelles pour chaque type d'appel, consultez la section Autorisations.

  3. Créez un sujet Pub/Sub si vous n'en avez pas déjà un.

Limites

  • La prise en compte des créations, des mises à jour et des suppressions de flux peut prendre jusqu'à dix minutes.

  • Le projet dans lequel un flux est créé doit survivre au flux. En effet, le compte de service utilisé pour publier sur le sujet Pub/Sub de destination se trouve dans ce projet. Un flux ne fonctionne plus et est supprimé dès que la suppression de projet est permanente.

  • Vous pouvez créer jusqu'à 200 flux par parent. Cette limite ne s'applique qu'aux flux qui suivent directement un parent et ne compte pas les flux de ses enfants. Par exemple, si vous avez 10 projets dans une organisation, chaque projet peut comporter jusqu'à 200 flux, et chaque organisation peut également comporter jusqu'à 200 flux.

Créez des flux

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"

Indiquez les valeurs suivantes :

  • SCOPE: utilisez l'une des valeurs suivantes:

    • project=PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel créer le flux.
    • folder=FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel créer le flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation dans laquelle créer le flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • FEED_ID: identifiant unique du flux d'assets.
  • BILLING_PROJECT_ID : facultatif. ID de projet dans lequel se trouve l'agent de service d'inventaire des éléments Cloud par défaut, qui dispose des autorisations nécessaires pour gérer votre sujet Pub/Sub. Découvrez comment définir le projet de facturation.

  • TOPIC_PROJECT_ID: ID du projet dans lequel se trouve le sujet Pub/Sub.
  • TOPIC_ID: ID du sujet Pub/Sub dans lequel publier les notifications.
  • Au moins l'une des définitions d'assets suivantes :
  • CONTENT_TYPE : facultatif. Type de contenu des métadonnées que vous souhaitez récupérer. Lorsque --content-type n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.
  • RELATIONSHIP_TYPE_# : facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définir CONTENT_TYPE sur RELATIONSHIP.
  • Si vous ajoutez une condition de flux facultative, incluez les informations suivantes dans votre commande :
    • CONDITION_TITLE: titre à attribuer à la condition du flux.
    • CONDITION_DESCRIPTION: description à attribuer à la condition du flux.
    • CONDITION_EXPRESSION: expression de condition à appliquer au flux.

Consultez la documentation de référence de la gcloud CLI pour toutes les options.

Exemple

Exécutez la commande suivante pour créer un flux dans le sujet Pub/Sub my-topic qui envoie une notification lorsque des modifications sont apportées aux ressources suivantes dans le projet my-project.

  • Le bucket Cloud Storage my-bucket
  • N'importe quelle table 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

Exemple de réponse

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éthode HTTP et URL :

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

En-têtes :

X-Goog-User-Project: BILLING_PROJECT_ID

Corps JSON de la requête :

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

Indiquez les valeurs suivantes :

  • SCOPE_PATH: utilisez l'une des valeurs suivantes:

    Les valeurs autorisées sont les suivantes :

    • projects/PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel créer le flux.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER est le numéro du projet dans lequel créer le flux.

      Trouver un numéro de projet Google Cloud

      Google Cloud console

      Pour trouver un numéro de projet Google Cloud , procédez comme suit:

      1. Accédez à la page Bienvenue dans la console Google Cloud .

        Accéder à "Bienvenue"

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.

        Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.

      CLI gcloud

      Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel créer le flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation dans laquelle créer le flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: ID du projet dans lequel se trouve l'agent de service inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer votre sujet Pub/Sub. Découvrez comment définir le projet de facturation.

  • FEED_ID: identifiant unique du flux d'assets.
  • Au moins l'une des définitions d'assets suivantes :
  • CONTENT_TYPE : facultatif. Type de contenu des métadonnées que vous souhaitez récupérer. Lorsque contentType n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.
  • RELATIONSHIP_TYPE_# : facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définir CONTENT_TYPE sur RELATIONSHIP.
  • TOPIC_PROJECT_ID: ID du projet dans lequel se trouve le sujet Pub/Sub.
  • TOPIC_ID: ID du sujet Pub/Sub dans lequel publier les notifications.
  • Si vous ajoutez une condition de flux facultative, incluez les informations suivantes dans votre commande :
    • CONDITION_TITLE: titre à attribuer à la condition du flux.
    • CONDITION_DESCRIPTION: description à attribuer à la condition du flux.
    • CONDITION_EXPRESSION: expression de condition à appliquer au flux.

Consultez la documentation de référence REST pour toutes les options.

Exemples de commandes

Exécutez l'une des commandes suivantes pour créer un flux dans le sujet Pub/Sub my-topic qui envoie une notification lorsque des modifications sont apportées aux ressources suivantes dans le projet my-project.

  • Le bucket Cloud Storage my-bucket
  • N'importe quelle table 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

Exemple de réponse

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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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}"

Obtenir des flux

gcloud

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

Indiquez les valeurs suivantes :

  • SCOPE: utilisez l'une des valeurs suivantes:

    • project=PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel se trouve le flux.
    • folder=FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel se trouve le flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation à laquelle appartient le flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: ID du projet dans lequel se trouve l'agent de service inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer votre sujet Pub/Sub. Découvrez comment définir le projet de facturation.

  • FEED_ID: identifiant unique du flux d'assets.

Pour connaître toutes les options, consultez la documentation de référence de la gcloud CLI.

Exemple de réponse

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éthode HTTP et URL :

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

En-têtes :

X-Goog-User-Project: BILLING_PROJECT_ID

Indiquez les valeurs suivantes :

  • SCOPE_PATH: utilisez l'une des valeurs suivantes:

    Les valeurs autorisées sont les suivantes :

    • projects/PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel se trouve le flux.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER est le numéro du projet dans lequel se trouve le flux.

      Trouver un numéro de projet Google Cloud

      Google Cloud console

      Pour trouver un numéro de projet Google Cloud , procédez comme suit:

      1. Accédez à la page Bienvenue dans la console Google Cloud .

        Accéder à "Bienvenue"

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.

        Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.

      CLI gcloud

      Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel se trouve le flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation dans laquelle se trouve le flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: ID du projet dans lequel se trouve l'agent de service d'inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et vos tables BigQuery. Découvrez comment définir le projet de facturation.

  • FEED_ID: identifiant unique du flux d'assets.

Consultez la documentation de référence REST pour toutes les options.

Exemples de commandes

Exécutez l'une des commandes suivantes pour obtenir un flux spécifique.

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

Exemple de réponse

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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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}")

Répertorier des flux

Pour répertorier tous les flux d'un projet, d'un dossier ou d'une organisation, effectuez l'une des requêtes suivantes.

gcloud

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

Indiquez les valeurs suivantes :

  • SCOPE: utilisez l'une des valeurs suivantes:

    • project=PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel se trouvent les flux.
    • folder=FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel se trouvent les flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation dans laquelle se trouvent les flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: ID du projet dans lequel se trouve l'agent de service inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer votre sujet Pub/Sub. Découvrez comment définir le projet de facturation.

Consultez la documentation de référence de la gcloud CLI pour toutes les options.

Exemple de réponse

- 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éthode HTTP et URL :

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

En-têtes :

X-Goog-User-Project: BILLING_PROJECT_ID

Indiquez les valeurs suivantes :

  • SCOPE_PATH: utilisez l'une des valeurs suivantes:

    Les valeurs autorisées sont les suivantes :

    • projects/PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel se trouvent les flux.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER est le numéro du projet dans lequel se trouvent les flux.

      Trouver un numéro de projet Google Cloud

      Google Cloud console

      Pour trouver un numéro de projet Google Cloud , procédez comme suit:

      1. Accédez à la page Bienvenue dans la console Google Cloud .

        Accéder à "Bienvenue"

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.

        Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.

      CLI gcloud

      Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel se trouvent les flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation dans laquelle se trouvent les flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: ID du projet dans lequel se trouve l'agent de service d'inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et vos tables BigQuery. Découvrez comment définir le projet de facturation.

Consultez la documentation de référence REST pour toutes les options.

Exemples de commandes

Exécutez l'une des commandes suivantes pour répertorier tous les flux du projet 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

Exemple de réponse

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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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}")

Mettre à jour des flux

Vous pouvez mettre à jour les attributs d'un flux existant de différentes manières:

  • Ajouter et supprimer des noms d'éléments spécifiques, ou les supprimer tous du flux.

  • Ajouter et supprimer des types d'assets spécifiques, ou les supprimer tous du flux

  • écraser des conditions ou les supprimer du flux ;

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"

Indiquez les valeurs suivantes :

  • SCOPE: utilisez l'une des valeurs suivantes:

    • project=PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel mettre à jour le flux.
    • folder=FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel mettre à jour le flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation dans laquelle mettre à jour le flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • FEED_ID: identifiant unique du flux d'assets.
  • BILLING_PROJECT_ID : facultatif. ID de projet dans lequel se trouve l'agent de service d'inventaire des éléments Cloud par défaut, qui dispose des autorisations nécessaires pour gérer votre sujet Pub/Sub. Découvrez comment définir le projet de facturation.

  • TOPIC_PROJECT_ID: ID du projet dans lequel se trouve le sujet Pub/Sub.
  • TOPIC_ID: ID du sujet Pub/Sub dans lequel publier les notifications.
  • Au moins l'une des définitions d'assets suivantes :
  • CONTENT_TYPE : facultatif. Type de contenu des métadonnées que vous souhaitez récupérer. Lorsque --content-type n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.
  • RELATIONSHIP_TYPE_# : facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définir CONTENT_TYPE sur RELATIONSHIP.
  • Si vous ajoutez une condition de flux facultative, incluez les informations suivantes dans votre commande :
    • CONDITION_TITLE: titre à attribuer à la condition du flux.
    • CONDITION_DESCRIPTION: description à attribuer à la condition du flux.
    • CONDITION_EXPRESSION: expression de condition à appliquer au flux.

Consultez la documentation de référence de la gcloud CLI pour toutes les options.

Exemple

Exécutez la commande suivante pour mettre à jour le sujet Pub/Sub my-topic dans le projet my-project. Cette requête supprime tous les noms d'éléments de la surveillance et ajoute le type d'élément 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

Exemple de réponse

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

Pour mettre à jour les attributs d'un flux, vous devez spécifier le chemin d'accès à l'attribut dans update_mask et la valeur de cet attribut.

REST

Méthode HTTP et URL :

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

En-têtes :

X-Goog-User-Project: BILLING_PROJECT_ID

Corps JSON de la requête :

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

Indiquez les valeurs suivantes :

  • SCOPE_PATH: utilisez l'une des valeurs suivantes:

    Les valeurs autorisées sont les suivantes :

    • projects/PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel mettre à jour le flux.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER est le numéro du projet dans lequel mettre à jour le flux.

      Trouver un numéro de projet Google Cloud

      Google Cloud console

      Pour trouver un numéro de projet Google Cloud , procédez comme suit:

      1. Accédez à la page Bienvenue dans la console Google Cloud .

        Accéder à "Bienvenue"

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.

        Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.

      CLI gcloud

      Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel mettre à jour le flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation dans laquelle mettre à jour le flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: ID du projet dans lequel se trouve l'agent de service inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer votre sujet Pub/Sub. Découvrez comment définir le projet de facturation.

  • FEED_ID: identifiant unique du flux d'assets.
  • Au moins l'une des définitions d'assets suivantes :
  • CONTENT_TYPE : facultatif. Type de contenu des métadonnées que vous souhaitez récupérer. Lorsque contentType n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.
  • RELATIONSHIP_TYPE_# : facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définir CONTENT_TYPE sur RELATIONSHIP.
  • TOPIC_PROJECT_ID: ID du projet dans lequel se trouve le sujet Pub/Sub.
  • TOPIC_ID: ID du sujet Pub/Sub dans lequel publier les notifications.
  • Si vous ajoutez une condition de flux facultative, incluez les informations suivantes dans votre commande :
    • CONDITION_TITLE: titre à attribuer à la condition du flux.
    • CONDITION_DESCRIPTION: description à attribuer à la condition du flux.
    • CONDITION_EXPRESSION: expression de condition à appliquer au flux.

Consultez la documentation de référence REST pour toutes les options.

Exemples de commandes

Exécutez l'une des commandes suivantes pour mettre à jour le sujet Pub/Sub my-topic dans le projet my-project. Cette requête supprime tous les noms d'éléments de la surveillance et ajoute le type d'élément 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

Exemple de réponse

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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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}")

Supprimer des flux

Si vous ne souhaitez plus être informé des modifications apportées aux éléments, effectuez l'une des demandes suivantes pour supprimer un flux.

gcloud

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

Indiquez les valeurs suivantes :

  • SCOPE: utilisez l'une des valeurs suivantes:

    • project=PROJECT_ID, où PROJECT_ID est l'ID du projet dans lequel se trouve le flux.
    • folder=FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel se trouve le flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation à laquelle appartient le flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: ID du projet dans lequel se trouve l'agent de service inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer votre sujet Pub/Sub. Découvrez comment définir le projet de facturation.

Pour connaître toutes les options, consultez la documentation de référence de la gcloud CLI.

Exemple de réponse

Une suppression réussie ne renvoie aucune réponse.

REST

Méthode HTTP et URL :

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

En-têtes :

X-Goog-User-Project: BILLING_PROJECT_ID

Indiquez les valeurs suivantes :

  • SCOPE_PATH: utilisez l'une des valeurs suivantes:

    Les valeurs autorisées sont les suivantes :

    • projects/PROJECT_NUMBER, où PROJECT_NUMBER est le numéro du projet dans lequel se trouve le flux.

      Trouver un numéro de projet Google Cloud

      Google Cloud console

      Pour trouver un numéro de projet Google Cloud , procédez comme suit:

      1. Accédez à la page Bienvenue dans la console Google Cloud .

        Accéder à "Bienvenue"

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.

        Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.

      CLI gcloud

      Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID est l'ID du dossier dans lequel se trouve le flux.

      Trouver l'ID d'un dossier Google Cloud

      Google Cloud console

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur --format pour afficher plus d'informations sur les dossiers trouvés.

      La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation dans laquelle se trouve le flux.

      Trouver l'ID d'une organisation Google Cloud

      Google Cloud console

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit:

      1. Accédez à la console Google Cloud .

        Accédez à la console Google Cloud .

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      CLI gcloud

      Vous pouvez récupérer l'ID d'une organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: ID du projet dans lequel se trouve l'agent de service inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer votre sujet Pub/Sub. Découvrez comment définir le projet de facturation.

Consultez la documentation de référence REST pour toutes les options.

Exemples de commandes

Exécutez l'une des commandes suivantes pour supprimer un flux spécifique.

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

Exemple de réponse

{}

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de inventaire des éléments cloud, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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")

Conditions du flux

Pour afficher uniquement certains types de modifications pour un élément donné, vous pouvez ajouter une condition à votre flux. Les conditions sont écrites en langage CEL (Common Expression Language).

La compatibilité avec les conditions est limitée. Dans certains cas, la création ou la mise à jour de flux avec des conditions peut entraîner un retard.

Limites

  • Les expressions de condition sont limitées à 3 000 caractères.

  • La plupart des noms de variables dans les expressions de condition sont représentés en minuscules, avec des traits de soulignement entre chaque mot. Par exemple, example_variable.

    Les noms de variables des sous-champs de data dans l'objet Resource sont la seule exception. Ils ne comportent pas de séparateurs de mots, et la première lettre de chaque mot après le premier est en majuscule. Par exemple, exampleVariable.

  • Certaines validations sur les expressions de condition sont effectuées lors de la création ou de la mise à jour du flux. Toutefois, ces validations ne sont pas exhaustives, en particulier pour les conditions définies dans le champ temporal_asset.asset.resource.data, qui possède un type dynamique. Dans la mesure du possible, filtrez votre flux à l'aide des paramètres appropriés de gcloud CLI ou de l'API REST.

  • Les notifications ne sont pas envoyées si des erreurs se produisent pendant l'évaluation, mais les erreurs sont consignées.

  • Pour les types dynamiques dans temporal_asset.asset.resource.data, les conditions spécifiées sur les champs absents déclenchent des erreurs d'exécution et les notifications ne sont pas publiées. Par exemple, pour la condition temporal_asset.asset.resource.data.name != "my_name", si le champ name est manquant dans une mise à jour, l'évaluation échoue et vous ne recevez pas de notifications. Si votre condition ne fonctionne qu'en présence de certains champs, ajoutez une vérification d'existence à la condition pour vous assurer qu'elle est correctement évaluée.

  • Les types d'énumérations statiques peuvent être représentés sous forme de noms de chemin complets ou d'entiers bruts. Par exemple, les expressions suivantes sont valides pour prior_asset_state :

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

    et

    temporal_asset.prior_asset_state == 3
    

    Les types d'énumérations dynamiques dans temporal_asset.asset.resource.data sont représentés par des chaînes brutes. Par exemple, l'expression suivante est valide pour le type d'élément cloudresourcemanager.googleapis.com/Project:

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

Créer une expression conditionnelle avec CEL

Dans une condition de flux, le langage CEL (Common Expression Language) est utilisé pour prendre des décisions booléennes basées sur des données d'attribut. Une expression de condition se compose d'une ou plusieurs instructions qui sont combinées à l'aide d'opérateurs logiques. Chaque instruction exprime une règle de contrôle basée sur des attributs qui s'applique à TemporalAsset pour déterminer si une notification est envoyée.

Les caractéristiques de langage CEL suivantes sont les plus importantes pour les conditions de flux :

  • Variables: les conditions utilisent des variables pour exprimer un attribut donné, comme temporal_asset.deleted (Boolean) ou temporal_asset.asset.name (String). Ces variables sont renseignées avec des valeurs basées sur le contexte lors de l'exécution.

  • Opérateurs: chaque type de données, tel que String, accepte un ensemble d'opérateurs pouvant être utilisés pour créer une expression logique. Le plus souvent, les opérateurs sont utilisés pour comparer la valeur contenue dans une variable avec une valeur littérale, telle que temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345". Dans cet exemple, si la valeur d'entrée de temporal_asset.asset.name est //cloudresourcemanager.googleapis.com/projects/12345, l'expression renvoie true.

  • Fonctions : une fonction est un opérateur composé pour les types de données qui acceptent des opérations plus complexes. Dans les expressions de condition, il existe des fonctions prédéfinies qui peuvent être utilisées conjointement avec un type de données spécifique. Par exemple, temporal_asset.asset.name.contains("keyword") utilise une fonction appelée contains pour vérifier si la valeur de temporal_asset.asset.name contient "keyword". Si c'est le cas, la valeur renvoyée est true.

  • Opérateurs logiques: les conditions acceptent des opérateurs logiques qui peuvent être utilisés pour créer des expressions logiques complexes à partir d'instructions d'expression de base: && (AND) et || (OR). Ces opérateurs logiques permettent d'utiliser plusieurs variables d'entrée dans une expression de condition. Par exemple : temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020 combine deux instructions simples et requiert que les deux instructions soient remplies pour produire un résultat d'évaluation true.

Pour en savoir plus sur les caractéristiques des éléments CEL, consultez la section définition de langage.

Utiliser des variables de condition

Les variables de condition vous permettent de créer des conditions sur différents attributs. Les variables de condition acceptées sont les suivantes :

  • temporal_asset: modification de l'élément la plus récente au format TemporalAsset. Si la condition renvoie "true", TemporalAsset est envoyé à la destination configurée.

Exemples d'expressions de condition

L'expression de condition suivante envoie des notifications concernant les événements de création :

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

L'expression de condition suivante envoie des notifications pour les ressources situées dans les dossiers 12345 et 23456 :

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

L'expression de condition suivante envoie des notifications lorsque de nouvelles règles autorisées sont ajoutées aux pare-feu, en supposant que le type d'élément est déjà défini sur compute.googleapis.com/Firewall dans le flux:

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

L'expression de condition suivante envoie des notifications pour les instances de VM avec le type de machine n1-standard-1, en supposant que le type d'asset est déjà défini sur compute.googleapis.com/Instance dans le flux:

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

L'expression de condition suivante envoie des notifications pour les buckets de stockage avec des stratégies IAM pour allUsers, en supposant que le type d'élément est défini sur storage.googleapis.com/Bucket et que le type de contenu est défini sur IAM_POLICY dans le flux:

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

L'expression de condition suivante envoie une notification lorsqu'un bucket de stockage avec la clé test dans son libellé est supprimé:

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

Dépannage

Si vous ne recevez pas de notifications pour les mises à jour de ressources ou de stratégies IAM, la procédure ci-dessous peut vous aider à résoudre le problème:

  • Assurez-vous que les métadonnées ont été modifiées sur vos éléments. Le flux en temps réel n'envoie des mises à jour que lorsque les métadonnées des types de ressources acceptés sont modifiées. Les opérations telles que l'importation d'un nouveau fichier dans votre bucket Cloud Storage ne déclenchent pas de modification des métadonnées.

  • Assurez-vous que vos éléments correspondent à l'un des noms ou types d'éléments que vous avez spécifiés dans le flux.

  • Pour les suppressions de projets, gardez à l'esprit que lorsque vous arrêtez un projet, vous disposez de 30 jours pour annuler l'opération. Par conséquent, le champ deleted dans les métadonnées de l'élément n'est pas défini tant que le projet n'est pas définitivement supprimé. Pour surveiller les projets en attente de suppression, vous pouvez définir une condition sur le champ lifecycleState du projet. Par exemple : temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED".

  • Vérifiez les journaux pour voir si des erreurs se sont produites lors de la publication des mises à jour sur votre sujet.

Cloud Logging

Lorsque les flux en temps réel ne parviennent pas à envoyer des ressources ou des mises à jour de stratégie IAM via Pub/Sub, inventaire des éléments cloud consigne l'état et le message d'erreur dans Logging. La journalisation est activée par défaut et appartient à Google Cloud Observability. En savoir plus sur les tarifs de Google Cloud Observability

Afficher les journaux de flux en temps réel

Le journal du flux en temps réel est indexé par un sujet Pub/Sub. Pour afficher tous les journaux:

  1. Accédez à la page Explorateur de journaux dans la console Google Cloud .

    Accéder à l'explorateur de journaux

  2. Cliquez sur la liste Ressource, située à côté de la zone Rechercher dans tous les champs.

  3. Recherchez Cloud Pub/Sub Topic, puis cliquez sur le type de ressource Sujet Cloud Pub/Sub.

  4. Cliquez sur l'ID du sujet que vous souhaitez afficher.

  5. Cliquez sur Appliquer.

Le codage UTF-8 est appliqué aux champs de journaux. Les caractères qui ne sont pas au format UTF-8 sont remplacés par des points d'interrogation.

Informations consignées

Les entrées de journal de flux en temps réel contiennent les types d'informations suivants :

  • Informations générales figurant dans la plupart des journaux Google Cloud , telles que la gravité, l'ID de projet, le numéro de projet ou l'horodatage.

  • Champs de journal de flux en temps réel dans jsonPayload, qui contiennent le nom de l'élément, la configuration de sortie du flux et l'état d'erreur lors de la publication de mises à jour de ressources ou de stratégies IAM.

Le tableau suivant indique le type d'informations contenues dans chaque champ.

Champ Type et description
name

string

Nom complet du flux. Le format est l'un des suivants:

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

string

Nom complet de l'élément qui doit recevoir les mises à jour. Exemple :

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

Pour en savoir plus, consultez la section Noms de ressources .

condition

Expr

Condition de flux qui détermine si une mise à jour d'éléments doit être publiée.

error_status

Status

État en cas d'échec de publication des mises à jour d'éléments dans un flux.

feed_output_config

FeedOutputConfig

Configuration de sortie du flux définissant où les mises à jour des éléments sont publiées.