Obtenir l'historique des éléments

Vous pouvez récupérer jusqu'à 35 jours d'historique de création, de modification et de suppression pour vos composants dans des projets ou des organisations Google Cloud. Éléments qui n'ont pas changé dans au cours des 35 derniers jours.

Avant de commencer

  1. Activer l'API Cloud Asset Inventory dans le projet pour lequel 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 spécifiques à chaque type d'appel, consultez Autorisations :

Limites

Vous ne pouvez récupérer l'historique des composants qu'au niveau de l'organisation et du projet. Les dossiers ne sont pas acceptés.

Obtenir l'historique de vos composants

Console

Pour obtenir l'historique de vos éléments stockés dans Google Cloud, suivez les étapes suivantes.

  1. Accédez à la page Inventaire des éléments console Google Cloud.

    Accéder à l'inventaire des éléments

  2. Accédez au projet, au dossier ou à l'organisation dans lequel vous souhaitez effectuer la recherche.
  3. Cliquez sur l'onglet Ressource.
  4. Cliquez sur une ressource dans le panneau des résultats.
  5. Cliquez sur l'onglet Historique des modifications.
  6. Sélectionnez une heure de début et une heure de fin pour le rapport.
  7. Utilisez les zones de liste Sélectionner un enregistrement à comparer pour afficher la différence entre les enregistrements pour les dates sélectionnées.

Après avoir effectué une recherche, les ressources correspondant à la requête sont répertoriées la table Results (Résultats). Double-cliquez sur votre requête pour la modifier ou utilisez la Filtrer les résultats pour restreindre les résultats de recherche en fonction critères.

Pour afficher la requête sous la forme d'une commande Google Cloud CLI, cliquez sur Afficher la requête

Pour exporter les résultats, cliquez sur Télécharger au format CSV.

gcloud

gcloud asset get-history \
    --SCOPE \
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --start-time="START_TIME" \
    --end-time="END_TIME"

Indiquez les valeurs suivantes :

  • SCOPE: utilisez l'une des valeurs suivantes:

    • project=PROJECT_ID, où PROJECT_ID correspond au ID du projet contenant l'asset que vous souhaitez récupérer.
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation qui contient l'élément que vous souhaitez récupérer.

      Trouver l'ID d'une organisation Google Cloud

      console Google Cloud

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

      1. Accédez à Google Cloud Console.

        <ph type="x-smartling-placeholder"></ph> Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste sélecteur 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))"
  • ASSET_NAME_# : liste des noms complets des composants, séparés par une virgule.
  • CONTENT_TYPE: le type de contenu des métadonnées que vous souhaitez récupérer. Quand ? --content-type n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des éléments, la dernière fois que la composants mis à jour, ainsi que les projets, dossiers et organisations auxquels ils appartiennent.
  • RELATIONSHIP_TYPE_# : facultatif. Disponible uniquement pour Security Command Center Niveaux Premium et Enterprise abonnés. Une liste de valeurs séparées par des virgules <ph type="x-smartling-placeholder"></ph> types de relations entre assets que vous souhaitez récupérer. Pour que cela fonctionne, vous devez définir CONTENT_TYPE sur RELATIONSHIP.
  • START_TIME: début de la période, dans . gcloud topic datetime format. La date ne doit pas dater de plus de 35 jours.
  • END_TIME : facultatif. Point de fin de la période, au format gcloud topic datetime. La date ne doit pas dater de plus de 35 jours. Si --end-time n'est pas spécifié, il est défini sur l'heure actuelle.

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

Exemple

Exécutez la commande suivante pour obtenir les métadonnées d'historique resource de l'instance Compute Engine my-instance dans le projet my-project entre le 30 janvier 2024 et le 5 février 2024. L'instance possède les propriétés suivantes :

  • Nom de l'instance: my-instance
  • Projet: my-project
  • Emplacement: us-central1-a
gcloud asset get-history \
    --project=my-project \
    --asset-names=//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance \
    --content-type=resource \
    --start-time="2024-01-30" \
    --end-time="2024-02-05"

Exemple de réponse

---
asset:
  ancestors:
  - projects/000000000000
  - folders/000000000000
  - organizations/000000000000
  assetType: compute.googleapis.com/Instance
  name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance
  resource:
    data:
      LATEST_ASSET_METADATA
    discoveryDocumentUri: https://www.googleapis.com/discovery/v1/apis/compute/v1/rest
    discoveryName: Instance
    location: us-central1-a
    parent: //cloudresourcemanager.googleapis.com/projects/000000000000
    version: v1
  updateTime: '2024-02-05T16:00:25.259186Z'
window:
  endTime: '2024-02-05T16:00:25.259186Z'
  startTime: '2024-02-03T16:00:28.854779Z'
---
asset:
  ancestors:
  - projects/000000000000
  - folders/000000000000
  - organizations/000000000000
  assetType: compute.googleapis.com/Instance
  name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance
  resource:
    data:
      EARLIEST_ASSET_METADATA
    discoveryDocumentUri: https://www.googleapis.com/discovery/v1/apis/compute/v1/rest
    discoveryName: Instance
    location: us-central1-a
    parent: //cloudresourcemanager.googleapis.com/projects/000000000000
    version: v1
  updateTime: '2024-02-03T16:00:28.854779Z'
window:
  endTime: '2024-02-03T16:00:28.854779Z'
  startTime: '2024-01-30T08:00:22.930462Z'

REST

Méthode HTTP et URL :

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

Corps JSON de la requête :

{
  "assetNames": [
    "ASSET_NAME_1",
    "ASSET_NAME_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "relationshipTypes": [
    "RELATIONSHIP_TYPE_1",
    "RELATIONSHIP_TYPE_2",
    "..."
  ],
  "readTimeWindow": {
    "startTime": "START_TIME",
    "endTime": "END_TIME"
  }
}

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 au ID du projet contenant l'asset que vous souhaitez récupérer.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER est le numéro du projet contenant l'élément que vous souhaitez récupérer.

      Trouver un numéro de projet Google Cloud

      console Google Cloud

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

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

        <ph type="x-smartling-placeholder"></ph> Accéder à la page d'accueil

      2. Cliquez sur la liste déroulante Basculateur 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 à côté du champ Welcome (Bienvenue). en haut à droite.

        Jusqu'à 4 000 ressources sont 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)"
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation qui contient l'élément que vous souhaitez récupérer.

      Comment trouver l'ID d'une organisation Google Cloud

      console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à 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))"
  • ASSET_NAME_# : tableau de noms complets des composants.
  • CONTENT_TYPE : type de contenu des métadonnées que vous souhaitez récupérer. Si contentType n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des éléments, la dernière fois que la composants mis à jour, ainsi que les projets, dossiers et organisations auxquels ils appartiennent.
  • RELATIONSHIP_TYPE_# : facultatif. Disponible uniquement pour Security Command Center Niveaux Premium et Enterprise abonnés. Une liste de valeurs séparées par des virgules <ph type="x-smartling-placeholder"></ph> types de relations entre assets que vous souhaitez récupérer. Pour que cela fonctionne, vous devez définir CONTENT_TYPE sur RELATIONSHIP.
  • START_TIME: début de la période, dans . format RFC 3339. La date ne doit pas dater de plus de 35 jours.
  • END_TIME : facultatif. Point de fin de la période, au format RFC 3339. La valeur ne doit pas remonter à plus de 35 jours. Si endTime n'est pas spécifié, il est défini sur l'heure actuelle.

Consultez la documentation de référence sur REST pour plus d'informations options.

Exemples de commandes

Exécutez l'une des commandes suivantes pour obtenir l'historique resource de l'instance Compute Engine my-instance dans le projet my-project entre le 30 janvier 2024 et le 5 février 2024. L'instance possède les propriétés suivantes :

  • Nom de l'instance: my-instance
  • Projet: my-project
  • Emplacement: us-central1-a

curl (Linux, macOS ou Cloud Shell)

<ph type="x-smartling-placeholder">
curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetNames": ["//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance"],
            "contentType": "RESOURCE",
            "readTimeWindow": {
              "startTime": "2024-01-30T00:00:00Z",
              "endTime": "2024-02-05T00:00:00Z"
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:batchGetAssetsHistory

PowerShell (Windows)

<ph type="x-smartling-placeholder">
$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetNames": ["//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance"],
  "contentType": "RESOURCE",
  "readTimeWindow": {
    "startTime": "2024-01-30T00:00:00Z",
    "endTime": "2024-02-05T00:00:00Z"
  }
}
"@

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

Exemple de réponse

{
  "assets": [
    {
      "window": {
        "startTime": "2024-02-03T16:00:28.854779Z",
        "endTime": "2024-02-05T16:00:25.259186Z"
      },
      "asset": {
        "name": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance",
        "assetType": "compute.googleapis.com/Instance",
        "resource": {
          "version": "v1",
          "discoveryDocumentUri": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest",
          "discoveryName": "Instance",
          "parent": "//cloudresourcemanager.googleapis.com/projects/000000000000",
          "data": {
            LATEST_ASSET_METADATA
          },
          "location": "us-central1-a"
        },
        "ancestors": [
          "projects/000000000000",
          "folders/000000000000",
          "organizations/000000000000"
        ],
        "updateTime": "2024-02-05T16:00:25.259186Z"
      }
    },
    {
      "window": {
        "startTime": "2024-01-30T08:00:22.930462Z",
        "endTime": "2024-02-03T16:00:28.854779Z"
      },
      "asset": {
        "name": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance",
        "assetType": "compute.googleapis.com/Instance",
        "resource": {
          "version": "v1",
          "discoveryDocumentUri": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest",
          "discoveryName": "Instance",
          "parent": "//cloudresourcemanager.googleapis.com/projects/000000000000",
          "data": {
            EARLIEST_ASSET_METADATA
          },
          "location": "us-central1-a"
        },
        "ancestors": [
          "projects/000000000000",
          "folders/000000000000",
          "organizations/000000000000"
        ],
        "updateTime": "2024-02-03T16:00:28.854779Z"
      }
    }
  ]
}

C#

Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de Cloud Asset Inventory, configurez le service 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;
using Google.Protobuf.WellKnownTypes;
using System;

public class BatchGetAssetsHistorySample
{
    public BatchGetAssetsHistoryResponse BatchGetAssetsHistory(string[] assetNames, DateTimeOffset startTime, string projectId)
    {
        // Create the client.
        AssetServiceClient client = AssetServiceClient.Create();

        // Build the request.
        BatchGetAssetsHistoryRequest request = new BatchGetAssetsHistoryRequest
        {
            ParentAsResourceName = ProjectName.FromProject(projectId),
            ContentType = ContentType.Resource,
            ReadTimeWindow = new TimeWindow
            {
                StartTime = Timestamp.FromDateTimeOffset(startTime)
            }
        };
        request.AssetNames.AddRange(assetNames);

        // Call the API.
        BatchGetAssetsHistoryResponse response = client.BatchGetAssetsHistory(request);

        // Return the result.
        return response;
    }
}

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez 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 batch-gets assets history.
package main

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

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	"github.com/golang/protobuf/ptypes/timestamp"
)

func main() {
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatal(err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	bucketResourceName := fmt.Sprintf("//storage.googleapis.com/%s-for-assets", projectID)
	req := &assetpb.BatchGetAssetsHistoryRequest{
		Parent:      fmt.Sprintf("projects/%s", projectID),
		AssetNames:  []string{bucketResourceName},
		ContentType: assetpb.ContentType_RESOURCE,
		ReadTimeWindow: &assetpb.TimeWindow{
			StartTime: &timestamp.Timestamp{
				Seconds: time.Now().Unix(),
			},
		},
	}
	response, err := client.BatchGetAssetsHistory(ctx, req)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(response)
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, 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.BatchGetAssetsHistoryRequest;
import com.google.cloud.asset.v1.BatchGetAssetsHistoryResponse;
import com.google.cloud.asset.v1.ContentType;
import com.google.cloud.asset.v1.ProjectName;
import com.google.cloud.asset.v1.TimeWindow;
import java.util.Arrays;

public class BatchGetAssetsHistoryExample {

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

  // Export assets for a project.
  // @param args path where the results will be exported to.
  public static void main(String... args) throws Exception {
    // Asset names, e.g.: "//storage.googleapis.com/[BUCKET_NAME]"
    String[] assetNames = args[0].split(",");
    try (AssetServiceClient client = AssetServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      ContentType contentType = ContentType.CONTENT_TYPE_UNSPECIFIED;
      TimeWindow readTimeWindow = TimeWindow.newBuilder().build();
      BatchGetAssetsHistoryRequest request =
          BatchGetAssetsHistoryRequest.newBuilder()
              .setParent(parent.toString())
              .addAllAssetNames(Arrays.asList(assetNames))
              .setContentType(contentType)
              .setReadTimeWindow(readTimeWindow)
              .build();
      BatchGetAssetsHistoryResponse response = client.batchGetAssetsHistory(request);
      System.out.println(response);
    }
  }
}

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour inventaire des éléments cloud, consultez 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.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const assetNames = '//storage.googleapis.com/<BUCKET_NAME1>,//storage.googleapis.com/<BUCKET_NAME2>';
// const contentType = 'RESOURCE';

const util = require('util');
const {AssetServiceClient} = require('@google-cloud/asset');

const client = new AssetServiceClient();

async function batchGetAssetsHistory() {
  const projectId = await client.getProjectId();
  const projectResource = `projects/${projectId}`;
  // TODO(developer): Choose asset names, such as //storage.googleapis.com/[YOUR_BUCKET_NAME].
  // const assetNames = ['ASSET_NAME1', 'ASSET_NAME2', ...];

  const request = {
    parent: projectResource,
    assetNames: assetNames.split(','),
    contentType: contentType,
    readTimeWindow: {
      startTime: {
        seconds: Math.floor(new Date().getTime() / 1000),
      },
    },
  };

  // Handle the operation using the promise pattern.
  const result = await client.batchGetAssetsHistory(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));

PHP

Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, 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.

use Google\Cloud\Asset\V1\BatchGetAssetsHistoryRequest;
use Google\Cloud\Asset\V1\Client\AssetServiceClient;
use Google\Cloud\Asset\V1\ContentType;
use Google\Cloud\Asset\V1\TimeWindow;
use Google\Protobuf\Timestamp;

/**
 * @param string   $projectId  Tthe project Id for list assets.
 * @param string[] $assetNames (Optional) Asset types to list for.
 */
function batch_get_assets_history(string $projectId, array $assetNames): void
{
    $client = new AssetServiceClient();
    $formattedParent = $client->projectName($projectId);
    $contentType = ContentType::RESOURCE;
    $readTimeWindow = new TimeWindow(['start_time' => new Timestamp(['seconds' => time()])]);
    $request = (new BatchGetAssetsHistoryRequest())
        ->setParent($formattedParent)
        ->setContentType($contentType)
        ->setReadTimeWindow($readTimeWindow)
        ->setAssetNames($assetNames);

    $resp = $client->batchGetAssetsHistory($request);

    # Do things with response.
    print($resp->serializeToString());
}

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de Cloud Asset Inventory, configurez le service 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 asset_names = 'Your asset names list, e.g.:
# ["//storage.googleapis.com/[BUCKET_NAME]",]'

client = asset_v1.AssetServiceClient()
parent = f"projects/{project_id}"
content_type = asset_v1.ContentType.RESOURCE
read_time_window = asset_v1.TimeWindow()
response = client.batch_get_assets_history(
    request={
        "parent": parent,
        "asset_names": asset_names,
        "content_type": content_type,
        "read_time_window": read_time_window,
    }
)
print(f"assets: {response.assets}")

Ruby

Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, consultez la page Bibliothèques clientes Cloud Asset Inventory.

Pour vous authentifier auprès de Cloud Asset Inventory, configurez le service 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'
# 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

content_type = :RESOURCE
read_time_window = {
  start_time: {
    seconds: Time.now.getutc.to_i
  }
}

response = asset_service.batch_get_assets_history(
  parent:           formatted_parent,
  content_type:     content_type,
  read_time_window: read_time_window,
  asset_names:      asset_names
)
# Do things with the response
puts response.assets