Apresentar recursos

Pode listar os seus recursos em Google Cloud projetos, pastas ou organizações.

Antes de começar

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

    Ative a API Cloud Asset Inventory

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

Limitações

  • Quando lista dados de tabelas do BigQuery, nem todos os campos são suportados.

  • Os campos de recursos que mudam frequentemente nos metadados do BigQuery, como numBytes, numLongTermBytes, numPhysicalBytes e numRows, são atribuídos a valores null.

Apresente os seus recursos

Consola

Só pode ver recursos com o RESOURCE tipo de conteúdo na Google Cloud consola. Para ver outros tipos de conteúdo ou filtrar por critérios mais precisos, use a CLI gcloud, a API REST ou uma biblioteca de cliente.

Para listar os metadados de recursos do seu projeto, pasta ou organização, conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página Inventário de recursos.

    Aceda ao inventário de recursos

  2. Altere para o projeto, a pasta ou a organização nos quais quer listar os recursos.
  3. Clique no separador Recurso.
  4. No painel Filtrar resultados, selecione os tipos de recursos, os projetos ou as localizações pelos quais quer filtrar os resultados.
  5. Para ver os metadados de um recurso, clique no nome a apresentar do recurso no painel de resultados.

gcloud

gcloud asset list \
    --SCOPE \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --snapshot-time="SNAPSHOT_TIME"

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto que tem o recurso que quer obter.
    • folder=FOLDER_ID, onde FOLDER_ID é o ID da pasta que tem o recurso que quer obter.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

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

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

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

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte comando:

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

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

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

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização que tem o recurso que quer obter.

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

      Google Cloud consola

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

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

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

      CLI gcloud

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_TYPE_#: opcional. Uma lista separada por vírgulas de tipos de recursos pesquisáveis. As expressões regulares compatíveis com RE2 são suportadas. Se a expressão regular não corresponder a nenhum tipo de recurso suportado, é devolvido um erro INVALID_ARGUMENT. Quando --asset-types não é especificado, são devolvidos todos os tipos de recursos.
  • CONTENT_TYPE: opcional. O tipo de conteúdo dos metadados que quer obter. Quando --content-type não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.
  • RELATIONSHIP_TYPE_#: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definir CONTENT_TYPE como RELATIONSHIP para que isto funcione.
  • SNAPSHOT_TIME: opcional. A hora em que quer tirar uma captura instantânea dos seus recursos, no formato de data/hora do tópico gcloud. O valor não pode ser superior a 35 dias no passado. Quando --snapshot-time não é especificado, é tirado um instantâneo na hora atual.

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

Exemplo

O comando seguinte obtém uma captura instantânea de metadados resource de instâncias do Compute Engine a partir de 30 de janeiro de 2024 (2024-01-30) no projeto my-project.

Antes de executar este comando, certifique-se de que altera a hora da captura de ecrã para estar nos últimos 35 dias e altera o nome do projeto.

gcloud asset list \
    --project=my-project \
    --asset-types=compute.googleapis.com/Instance \
    --content-type=resource \
    --snapshot-time="2024-01-30"

Exemplo de resposta

---
ancestors:
- projects/000000000000
- folders/000000000000
- organizations/000000000000
assetType: compute.googleapis.com/Instance
name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-name
resource:
  data:
    ASSET_METADATA
updateTime: '2024-01-30T00:00:00.000000Z'

REST

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "relationshipTypes": [
    "RELATIONSHIP_TYPE_1",
    "RELATIONSHIP_TYPE_2",
    "..."
  ],
  "readTime": "SNAPSHOT_TIME",
  "pageSize": "PAGE_SIZE",
  "pageToken": "PAGE_TOKEN"
}

Indique os seguintes valores:

  • SCOPE_PATH: use um dos seguintes valores:

    Os valores permitidos são:

    • projects/PROJECT_ID, onde PROJECT_ID é o ID do projeto que tem o recurso que quer obter.
    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto que tem o recurso que quer obter.

      Como encontrar um Google Cloud número do projeto

      Google Cloud consola

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

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

        Aceder a Boas-vindas

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

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

      CLI gcloud

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

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, onde FOLDER_ID é o ID da pasta que tem o recurso que quer obter.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud consola

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

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

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

      CLI gcloud

      Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte comando:

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

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

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

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, onde ORGANIZATION_ID é o ID da organização que tem o recurso que quer obter.

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

      Google Cloud consola

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

      1. Aceda à Google Cloud consola.

        Aceda à Google Cloud consola

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

      CLI gcloud

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_TYPE_#: opcional. Uma matriz de tipos de recursos pesquisáveis. As expressões regulares compatíveis com RE2 são suportadas. Se a expressão regular não corresponder a nenhum tipo de recurso suportado, é devolvido um erro INVALID_ARGUMENT. Quando assetTypes não é especificado, são devolvidos todos os tipos de recursos.
  • CONTENT_TYPE: opcional. O tipo de conteúdo dos metadados que quer obter. Quando contentType não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.
  • RELATIONSHIP_TYPE_#: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definir CONTENT_TYPE como RELATIONSHIP para que isto funcione.
  • SNAPSHOT_TIME: opcional. A hora em que quer tirar uma captura instantânea dos seus recursos, no formato RFC 3339. O valor não pode ser superior a 35 dias no passado. Quando readTime não é especificado, é tirado um instantâneo na hora atual.
  • PAGE_SIZE: opcional. O número de resultados a devolver por página. O máximo é 500. Se o valor estiver definido como 0 ou um valor negativo, é selecionado um valor predefinido adequado. É devolvido um nextPageToken para obter resultados subsequentes.

  • PAGE_TOKEN: opcional. As respostas a pedidos longos são separadas em várias páginas. Quando pageToken não é especificado, é devolvida a primeira página. As páginas subsequentes podem ser chamadas através do nextPageToken da resposta anterior como o valor pageToken.

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

Exemplos de comandos

Os seguintes comandos obtêm uma captura instantânea de metadados das instâncias do Compute Engine a 30 de janeiro de 2024 (2024-01-30T00:00:00Z) no projeto my-project.resource

Antes de executar qualquer um destes comandos, certifique-se de que altera a hora da captura de ecrã para estar nos últimos 35 dias e altera o nome do projeto.

curl (Linux, macOS ou Cloud Shell)

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 '{
            "assetTypes": ["compute.googleapis.com/Instance"],
            "contentType": "RESOURCE",
            "readTime": "2024-01-30T00:00:00Z"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project/assets

PowerShell (Windows)

$cred = gcloud auth print-access-token

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


$body = @"
{
  "assetTypes": ["compute.googleapis.com/Instance"],
  "contentType": "RESOURCE",
  "readTime": "2024-01-30T00: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/assets" | Select-Object -Expand Content

Exemplo de resposta

{
  "readTime": "2024-01-30T00:00:00Z",
  "assets": [
    {
      "name": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-name",
      "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": {
          ASSET_METADATA
        },
        "location": "us-central1-a"
      },
      "ancestors": [
        "projects/000000000000",
        "folders/000000000000",
        "organizations/000000000000"
      ],
    "updateTime": "2024-01-30T00:00:00.000000Z"
    }
  ]
}

C#

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

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


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

public class ListAssetsSample
{
    public  PagedEnumerable<ListAssetsResponse, Asset> ListAssets(string projectId)
    {
        // Create the client.
        AssetServiceClient client = AssetServiceClient.Create();

        // Build the request.
        ListAssetsRequest request = new ListAssetsRequest
        {
            ParentAsResourceName = ProjectName.FromProject(projectId),
            ContentType = ContentType.Resource,
        };

        // Call the API.
         PagedEnumerable<ListAssetsResponse, Asset> response = client.ListAssets(request);

        // Return the result.
        return response;
    }
}

Ir

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

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


// Sample list-assets list assets.
package main

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

	"google.golang.org/api/iterator"

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

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")
	assetType := "storage.googleapis.com/Bucket"
	req := &assetpb.ListAssetsRequest{
		Parent:      fmt.Sprintf("projects/%s", projectID),
		AssetTypes:  []string{assetType},
		ContentType: assetpb.ContentType_RESOURCE,
	}

	// Call ListAssets API to get an asset iterator.
	it := client.ListAssets(ctx, req)

	// Traverse and print the first 10 listed assets in response.
	for i := 0; i < 10; i++ {
		response, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			log.Fatal(err)
		}
		fmt.Println(response)
	}
}

Java

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

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

// Imports the Google Cloud client library

public class ListAssetsExample {

  public static void listAssets() throws IOException, IllegalArgumentException {
    // The project id of the asset parent to list.
    String projectId = "YOUR_PROJECT_ID";
    // The asset types to list. E.g.,
    // ["storage.googleapis.com/Bucket", "bigquery.googleapis.com/Table"].
    // See full list of supported asset types at
    // https://cloud.google.com/asset-inventory/docs/supported-asset-types.
    String[] assetTypes = {"YOUR_ASSET_TYPES_TO_LIST"};
    // The asset content type to list. E.g., ContentType.CONTENT_TYPE_UNSPECIFIED.
    // See full list of content types at
    // https://cloud.google.com/asset-inventory/docs/reference/rpc/google.cloud.asset.v1#contenttype
    ContentType contentType = ContentType.CONTENT_TYPE_UNSPECIFIED;
    listAssets(projectId, assetTypes, contentType);
  }

  public static void listAssets(String projectId, String[] assetTypes, ContentType contentType)
      throws IOException, IllegalArgumentException {
    try (AssetServiceClient client = AssetServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);

      // Build initial ListAssetsRequest without setting page token.
      ListAssetsRequest request =
          ListAssetsRequest.newBuilder()
              .setParent(parent.toString())
              .addAllAssetTypes(Arrays.asList(assetTypes))
              .setContentType(contentType)
              .build();

      // Repeatedly call ListAssets until page token is empty.
      ListAssetsPagedResponse response = client.listAssets(request);
      System.out.println(response);
      while (!response.getNextPageToken().isEmpty()) {
        request = request.toBuilder().setPageToken(response.getNextPageToken()).build();
        response = client.listAssets(request);
        System.out.println(response);
      }
    }
  }
}

Node.js

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

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const assetTypes = 'storage.googleapis.com/Bucket,bigquery.googleapis.com/Table';
// const contentType = 'RESOURCE';

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

const projectId = await client.getProjectId();
const projectResource = `projects/${projectId}`;
// TODO(developer): Choose types of assets to list, such as 'storage.googleapis.com/Bucket':
//   const assetTypes = 'storage.googleapis.com/Bucket,bigquery.googleapis.com/Table';
// Or simply use empty string to list all types of assets:
//   const assetTypes = '';
const assetTypesList = assetTypes ? assetTypes.split(',') : [];

async function listAssets() {
  const request = {
    parent: projectResource,
    assetTypes: assetTypesList,
    contentType: contentType,
    // (Optional) Add readTime parameter to list assets at the given time instead of current time:
    //   readTime: { seconds: 1593988758 },
  };

  // Call cloud.assets.v1.ListAssets API.
  const result = await client.listAssets(request);
  // Handle the response.
  console.log(util.inspect(result, {depth: null}));
}
listAssets();

PHP

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

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

use Google\Cloud\Asset\V1\Client\AssetServiceClient;
use Google\Cloud\Asset\V1\ListAssetsRequest;

/**
 * @param string   $projectId  Tthe project Id for list assets.
 * @param string[] $assetTypes (Optional) Asset types to list for.
 * @param int      $pageSize   (Optional) Size of one result page.
 */
function list_assets(
    string $projectId,
    array $assetTypes = [],
    int $pageSize = null
): void {
    // Instantiate a client.
    $client = new AssetServiceClient();

    // Run request
    $request = (new ListAssetsRequest())
        ->setParent("projects/$projectId")
        ->setAssetTypes($assetTypes)
        ->setPageSize($pageSize);
    $response = $client->listAssets($request);

    // Print the asset names in the result
    foreach ($response->getPage() as $asset) {
        print($asset->getName() . PHP_EOL);
    }
}

Python

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

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

from google.cloud import asset_v1

# TODO project_id = 'Your Google Cloud Project ID'
# TODO asset_types = 'Your asset type list, e.g.,
# ["storage.googleapis.com/Bucket","bigquery.googleapis.com/Table"]'
# TODO page_size = 'Num of assets in one page, which must be between 1 and
# 1000 (both inclusively)'
# TODO content_type ="Content type to list"

project_resource = f"projects/{project_id}"
client = asset_v1.AssetServiceClient()

# Call ListAssets v1 to list assets.
response = client.list_assets(
    request={
        "parent": project_resource,
        "read_time": None,
        "asset_types": asset_types,
        "content_type": content_type,
        "page_size": page_size,
    }
)

for asset in response:
    print(asset)

Ruby

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

Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

require "google/cloud/asset"

asset_service = Google::Cloud::Asset.asset_service
# project_id = 'YOUR_PROJECT_ID'
formatted_parent = asset_service.project_path project: project_id

content_type = :RESOURCE
response = asset_service.list_assets(
  parent:           formatted_parent,
  content_type:     content_type
)

# Do things with the result
response.page.each do |resource|
  puts resource
end