Exporter des métadonnées d'éléments vers Cloud Storage

Ce document explique comment exporter les métadonnées d'éléments de votre organisation, dossier ou projet vers un bucket Cloud Storage.

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 Autorisations.

  3. Créez un bucket Cloud Storage pour l'exportation, si vous n'en avez pas déjà un.

Limites

  • Les buckets Cloud Storage chiffrés avec des clés Cloud Key Management Service (Cloud KMS) personnalisées ne sont pas compatibles.

  • Aucune règle de conservation ne doit être définie pour le bucket Cloud Storage.

  • Lors de l'exportation, l'opération peut créer des fichiers temporaires dans le dossier de sortie. Ne supprimez pas ces fichiers temporaires lorsque l'opération est en cours. Une fois l'opération terminée, les fichiers temporaires sont automatiquement supprimés.

  • Le type de contenu ACCESS_POLICY ne peut être exporté qu'au niveau de l'organisation.

  • Si le fichier vers lequel vous effectuez l'exportation existe déjà et est en cours d'exportation, une erreur 400 est renvoyée.

  • Pour tester les autorisations, l'inventaire des éléments cloud crée un fichier vide avant d'exporter les données, ce qui envoie un événement de déclenchement Cloud Storage supplémentaire de type google.cloud.storage.object.v1.finalized.

Exporter un instantané d'élément vers Cloud Storage

gcloud

gcloud asset export \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --snapshot-time="SNAPSHOT_TIME" \
    --OUTPUT_TYPE

Indiquez les valeurs suivantes :

  • SCOPE : utilisez l'une des valeurs suivantes :

    • project=PROJECT_ID, où PROJECT_ID correspond à l'ID du projet contenant les métadonnées de l'élément que vous souhaitez exporter.
    • folder=FOLDER_ID, où FOLDER_ID correspond à l'ID du dossier contenant les métadonnées d'éléments que vous souhaitez exporter.

      Trouver l'ID d'un dossier Google Cloud

      ConsoleGoogle Cloud

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

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

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

      gcloud CLI

      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 est une chaîne partielle ou complète correspondant au nom du dossier. Supprimez l'option --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 premier niveau :

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID correspond à l'ID de l'organisation qui possède les métadonnées d'éléments que vous souhaitez exporter.

      Trouver l'ID d'une organisation Google Cloud

      ConsoleGoogle Cloud

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

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation est indiqué à côté de son nom.

      gcloud CLI

      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 : facultatif. 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 vos ensembles de données et tables BigQuery. En savoir plus sur la définition du projet de facturation

  • ASSET_TYPE_# : facultatif. Liste de types d'éléments pouvant faire l'objet d'une recherche, séparés par une virgule. Les expressions régulières compatibles avec RE2 sont acceptées. Si l'expression régulière ne correspond à aucun type d'élément compatible, une erreur INVALID_ARGUMENT est renvoyée. Lorsque --asset-types n'est pas spécifié, tous les types d'assets sont renvoyés.
  • CONTENT_TYPE : facultatif. Le type de contenu des métadonnées que vous souhaitez récupérer. Lorsque --content-type n'est pas spécifié, seules des 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, dossiers et organisations auxquels ils appartiennent.
  • RELATIONSHIP_TYPE_# : facultatif. Nécessite l'accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste de types de relations entre les composants que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définir CONTENT_TYPE sur RELATIONSHIP.
  • SNAPSHOT_TIME : facultatif. Heure à laquelle vous souhaitez prendre un instantané de vos éléments, au format gcloud topic datetime. La valeur ne doit pas être antérieure de plus de 35 jours. Lorsque --snapshot-time n'est pas spécifié, un instantané est pris à l'heure actuelle.
  • OUTPUT_TYPE : utilisez l'une des valeurs suivantes :

    • --output-path="gs://BUCKET_NAME/FILE_NAME" pour écrire la sortie dans un fichier, où :

      • BUCKET_NAME est le nom du bucket Cloud Storage dans lequel écrire.
      • FILE_NAME correspond au fichier à écrire dans votre bucket Cloud Storage.
    • --output-path-prefix="gs://BUCKET_NAME/FOLDER_NAME" pour écrire la sortie dans un dossier, où :

      • BUCKET_NAME est le nom du bucket Cloud Storage dans lequel écrire.
      • FOLDER_NAME est le dossier dans lequel écrire dans votre bucket Cloud Storage. La sortie est divisée en sous-dossiers nommés d'après les types d'éléments. Les sous-dossiers ne doivent pas déjà exister dans le dossier que vous spécifiez.

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

Exemple

Exécutez la commande suivante pour exporter vos métadonnées resource telles qu'elles étaient le 30 janvier 2024 dans le projet my-project, vers le fichier my-file.txt dans le bucket Cloud Storage my-bucket.

gcloud asset export \
    --project=my-project \
    --billing-project=my-project \
    --content-type=resource \
    --snapshot-time="2024-01-30" \
    --output-path="gs://my-bucket/my-file.txt"

Exemple de réponse

Export in progress for root asset [projects/my-project].
Use [gcloud asset operations describe projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000] to check the status of the operation.

REST

Méthode HTTP et URL :

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

En-têtes :

X-Goog-User-Project: BILLING_PROJECT_ID

Corps JSON de la requête :

{
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "relationshipTypes": [
    "RELATIONSHIP_TYPE_1",
    "RELATIONSHIP_TYPE_2",
    "..."
  ],
  "readTime": "SNAPSHOT_TIME",
  "outputConfig": {
    "gcsDestination": {
      OUTPUT_TYPE
    }
  }
}

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 correspond à l'ID du projet contenant les métadonnées de l'élément que vous souhaitez exporter.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER correspond au numéro du projet contenant les métadonnées d'éléments que vous souhaitez exporter.

      Trouver le numéro d'un projet Google Cloud

      ConsoleGoogle Cloud

      Pour trouver le numéro d'un projet Google Cloud , procédez comme suit :

      1. Accédez à la page d'accueil de la console Google Cloud .

        Accéder à la page d'accueil

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de 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 sont affichées. Si vous ne voyez pas le projet que vous recherchez, accédez à la page Gérer les ressources et filtrez la liste à l'aide du nom de ce projet.

      gcloud CLI

      Vous pouvez récupérer un numéro de projet Google Cloud avec la commande suivante :

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID correspond à l'ID du dossier contenant les métadonnées d'éléments que vous souhaitez exporter.

      Trouver l'ID d'un dossier Google Cloud

      ConsoleGoogle Cloud

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

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

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

      gcloud CLI

      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 est une chaîne partielle ou complète correspondant au nom du dossier. Supprimez l'option --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 premier niveau :

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID correspond à l'ID de l'organisation qui possède les métadonnées d'éléments que vous souhaitez exporter.

      Trouver l'ID d'une organisation Google Cloud

      ConsoleGoogle Cloud

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

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation est indiqué à côté de son nom.

      gcloud CLI

      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 vos ensembles de données et tables BigQuery. En savoir plus sur la définition du projet de facturation

  • ASSET_TYPE_# : facultatif. Tableau de types d'éléments pouvant faire l'objet d'une recherche. Les expressions régulières compatibles avec RE2 sont acceptées. Si l'expression régulière ne correspond à aucun type d'élément compatible, une erreur INVALID_ARGUMENT est renvoyée. Lorsque assetTypes n'est pas spécifié, tous les types d'assets sont renvoyés.
  • CONTENT_TYPE : facultatif. Le 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, dossiers et organisations auxquels ils appartiennent.
  • RELATIONSHIP_TYPE_# : facultatif. Nécessite l'accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste de types de relations entre les composants que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définir CONTENT_TYPE sur RELATIONSHIP.
  • SNAPSHOT_TIME : facultatif. Heure à laquelle vous souhaitez prendre un instantané de vos composants, au format RFC 3339. La valeur ne doit pas être antérieure de plus de 35 jours. Lorsque readTime n'est pas spécifié, un instantané est pris à l'heure actuelle.
  • OUTPUT_TYPE : utilisez l'une des valeurs suivantes :

    • "uri": "gs://BUCKET_NAME/FILE_NAME" pour écrire la sortie dans un fichier, où :

      • BUCKET_NAME est le nom du bucket Cloud Storage dans lequel écrire.
      • FILE_NAME correspond au fichier à écrire dans votre bucket Cloud Storage.
    • "uriPrefix": "gs://BUCKET_NAME/FOLDER_NAME" pour écrire la sortie dans un dossier, où :

      • BUCKET_NAME est le nom du bucket Cloud Storage dans lequel écrire.
      • FOLDER_NAME est le dossier dans lequel écrire dans votre bucket Cloud Storage. La sortie est divisée en sous-dossiers nommés d'après les types d'éléments. Les sous-dossiers ne doivent pas déjà exister dans le dossier que vous spécifiez.

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

Exemples de commandes

Exécutez l'une des commandes suivantes pour exporter vos métadonnées resource telles qu'elles étaient le 30 janvier 2024 dans le projet my-project, vers le fichier my-file.txt dans le bucket Cloud Storage my-bucket.

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 '{
            "contentType": "RESOURCE",
            "readTime": "2024-01-30T00:00:00Z",
            "outputConfig": {
              "gcsDestination": {
                "uri": "gs://my-bucket/my-file"
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

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


$body = @"
{
  "contentType": "RESOURCE",
  "readTime": "2024-01-30T00:00:00Z",
  "outputConfig": {
    "gcsDestination": {
      "uri": "gs://my-bucket/my-file"
    }
  }
}
"@

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

Exemple de réponse

{
  "name": "projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.asset.v1.ExportAssetsRequest",
    "parent": "projects/000000000000",
    "readTime": "2024-01-30T00:00:00Z",
    "contentType": "RESOURCE",
    "outputConfig": {
      "gcsDestination": {
        "uri": "gs://my-bucket/export.txt"
      }
    }
  }
}

C#

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 l'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.


using Google.Api.Gax.ResourceNames;
using Google.Cloud.Asset.V1;

public class ExportAssetsSample
{
    public ExportAssetsResponse ExportAssets(string bucketName, string projectId)
    {
        string assetDumpFile = $"gs://{bucketName}/my-assets.txt";
        // Create the client
        AssetServiceClient client = AssetServiceClient.Create();
        // Build the request
        ExportAssetsRequest request = new ExportAssetsRequest
        {
            ParentAsResourceName = ProjectName.FromProject(projectId),
            OutputConfig = new OutputConfig
            {
                GcsDestination = new GcsDestination { Uri = assetDumpFile }
            }
        };
        // Start the long-running export operation
        var operation = client.ExportAssets(request);
        // Wait for it to complete (or fail)
        operation = operation.PollUntilCompleted();
        // Return the result
        return operation.Result;
    }
}

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 l'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 asset-quickstart exports assets to given path.
package main

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

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

func main() {
	ctx := context.Background()
	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatal(err)
	}
	defer client.Close()
	bucketName := fmt.Sprintf("%s-for-assets", projectID)
	assetDumpFile := fmt.Sprintf("gs://%s/my-assets.txt", bucketName)
	req := &assetpb.ExportAssetsRequest{
		Parent: fmt.Sprintf("projects/%s", projectID),
		OutputConfig: &assetpb.OutputConfig{
			Destination: &assetpb.OutputConfig_GcsDestination{
				GcsDestination: &assetpb.GcsDestination{
					ObjectUri: &assetpb.GcsDestination_Uri{
						Uri: string(assetDumpFile),
					},
				},
			},
		},
	}
	operation, err := client.ExportAssets(ctx, req)
	if err != nil {
		log.Fatal(err)
	}
	response, err := operation.Wait(ctx)
	if err != nil {
		log.Fatal(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 l'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.

// Imports the Google Cloud client library

import com.google.cloud.ServiceOptions;
import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.ContentType;
import com.google.cloud.asset.v1.ExportAssetsRequest;
import com.google.cloud.asset.v1.ExportAssetsRequest.Builder;
import com.google.cloud.asset.v1.ExportAssetsResponse;
import com.google.cloud.asset.v1.GcsDestination;
import com.google.cloud.asset.v1.OutputConfig;
import com.google.cloud.asset.v1.ProjectName;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class ExportAssetsExample {

  // Use the default project Id.
  private static final String projectId = ServiceOptions.getDefaultProjectId();

  /**
   * Export assets for a project.
   *
   * @param exportPath where the results will be exported to
   * @param contentType determines the schema for the table
   * @param assetTypes a list of asset types to export. if empty, export all.
   */
  public static void exportAssets(String exportPath, ContentType contentType, String[] assetTypes)
      throws IOException,