Listar recursos

É possível listar seus recursos em projetos, pastas ou organizações do Google Cloud .

Antes de começar

  1. Ative a API Cloud Asset Inventory no projeto em que você está executando os comandos do Inventário de recursos do Cloud.

    Ativar a API Cloud Asset Inventory

  2. Verifique se sua conta tem a função correta para chamar a API Cloud Asset Inventory. Para permissões individuais de cada tipo de chamada, consulte Permissões.

Limitações

  • Ao listar dados de tabela do BigQuery, nem todos os campos são compatíveis.

  • Os campos de recursos que mudam com frequência nos metadados do BigQuery, como numBytes, numLongTermBytes, numPhysicalBytes e numRows, recebem valores null.

Listar seus recursos

Console

Só é possível ver recursos com o RESOURCE tipo de conteúdo no console do Google Cloud . Para conferir outros tipos de conteúdo ou filtrar por critérios mais precisos, use a CLI gcloud, REST ou uma biblioteca de cliente.

Para listar os metadados de recursos do seu projeto, pasta ou organização, siga estas etapas:

  1. No console Google Cloud , acesse a página Inventário de recursos.

    Acessar o inventário de recursos

  2. Mude para o projeto, a pasta ou a organização em que você quer listar recursos.
  3. Clique na guia Recurso.
  4. No painel Filtrar resultados, selecione os tipos de recursos, projetos ou locais para filtrar os resultados.
  5. Para ver os metadados de um recurso, clique no nome de exibição dele 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"

Forneça os valores a seguir:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, em que PROJECT_ID é o ID do projeto que tem o recurso que você quer recuperar.
    • folder=FOLDER_ID, em que FOLDER_ID é o ID da pasta que tem o recurso que você quer recuperar.

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud console

      Para encontrar o ID de uma pasta do Google Cloud , siga estas etapas:

      1. Acesse o console do Google Cloud .

        Acessar o console do Google Cloud

      2. Clique na caixa de listagem alternador na barra de menu.
      3. Selecione sua organização na caixa de listagem.
      4. Pesquise o nome da pasta. O ID da pasta aparece ao lado do nome dela.

      CLI da gcloud

      Para recuperar o ID de uma pasta Google Cloud localizada no nível da organização, use 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)"

      Em que 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 retorna os IDs das subpastas dentro das pastas. Para isso, execute o seguinte comando usando o ID de uma pasta de nível superior:

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

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

      Google Cloud console

      Para encontrar o ID de uma organização Google Cloud , siga estas etapas:

      1. Acesse o console do Google Cloud .

        Acessar o console do Google Cloud

      2. Clique na caixa de listagem alternador na barra de menu.
      3. Selecione sua organização na caixa de listagem.
      4. Selecione a guia Todos. O ID da organização aparece ao lado do nome dela.

      CLI da gcloud

      Para recuperar o ID de uma organização Google Cloud , use 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. Expressões regulares compatíveis com RE2 são aceitas. Se a expressão regular não corresponder a nenhum tipo de recurso compatível, um erro INVALID_ARGUMENT será retornado. Quando --asset-types não é especificado, todos os tipos de recursos são retornados.
  • CONTENT_TYPE: opcional. O tipo de conteúdo dos metadados que você quer recuperar. Quando --content-type não é especificado, apenas informações básicas são retornadas, como nomes de recursos, a última vez que os recursos foram atualizados e a quais projetos, pastas e organizações eles pertencem.
  • RELATIONSHIP_TYPE_#: opcional. Exige acesso ao nível Premium ou Enterprise do Security Command Center ou ao Gemini Cloud Assist. Uma lista separada por vírgulas de tipos de relacionamento de recursos que você quer recuperar. Defina CONTENT_TYPE como RELATIONSHIP para que isso funcione.
  • SNAPSHOT_TIME: opcional. O momento em que você quer tirar um snapshot dos seus recursos, no formato de data e hora do tópico gcloud. O valor não pode ser de mais de 35 dias atrás. Quando --snapshot-time não é especificado, um snapshot é capturado no horário atual.

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

Exemplo

O comando a seguir recebe um snapshot de metadados resource das instâncias do Compute Engine em 30 de janeiro de 2024 (2024-01-30) no projeto my-project.

Antes de executar esse comando, mude o horário do snapshot para os últimos 35 dias e altere 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

Solicitar corpo JSON:

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

Forneça os valores a seguir:

  • SCOPE_PATH: use um dos seguintes valores:

    Os valores permitidos são:

    • projects/PROJECT_ID, em que PROJECT_ID é o ID do projeto que tem o recurso que você quer recuperar.
    • projects/PROJECT_NUMBER, em que PROJECT_NUMBER é o número do projeto que tem o recurso que você quer recuperar.

      Como encontrar um Google Cloud número do projeto

      Google Cloud console

      Para encontrar o número de um projeto Google Cloud , siga estas etapas:

      1. Acesse a página Boas-vindas no console do Google Cloud .

        Acesse "Conheça"

      2. Clique na caixa de listagem alternador na barra de menu.
      3. Selecione sua organização na caixa de listagem e pesquise o nome do projeto. O nome, o número e o ID do projeto são mostrados perto do título Bem-vindo.

        Até 4.000 recursos são exibidos. Se você não encontrar o projeto que está procurando, acesse a página Gerenciar recursos e filtre a lista usando o nome dele.

      CLI da gcloud

      É possível extrair um Google Cloud número de projeto com o seguinte comando:

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

      Como encontrar o ID de uma Google Cloud pasta

      Google Cloud console

      Para encontrar o ID de uma pasta do Google Cloud , siga estas etapas:

      1. Acesse o console do Google Cloud .

        Acessar o console do Google Cloud

      2. Clique na caixa de listagem alternador na barra de menu.
      3. Selecione sua organização na caixa de listagem.
      4. Pesquise o nome da pasta. O ID da pasta aparece ao lado do nome dela.

      CLI da gcloud

      Para recuperar o ID de uma pasta Google Cloud localizada no nível da organização, use 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)"

      Em que 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 retorna os IDs das subpastas dentro das pastas. Para isso, execute o seguinte comando usando o ID de uma pasta de nível superior:

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

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

      Google Cloud console

      Para encontrar o ID de uma organização Google Cloud , siga estas etapas:

      1. Acesse o console do Google Cloud .

        Acessar o console do Google Cloud

      2. Clique na caixa de listagem alternador na barra de menu.
      3. Selecione sua organização na caixa de listagem.
      4. Selecione a guia Todos. O ID da organização aparece ao lado do nome dela.

      CLI da gcloud

      Para recuperar o ID de uma organização Google Cloud , use o seguinte comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_TYPE_#: opcional. Uma matriz de tipos de recursos pesquisáveis. Expressões regulares compatíveis com RE2 são aceitas. Se a expressão regular não corresponder a nenhum tipo de recurso compatível, um erro INVALID_ARGUMENT será retornado. Quando assetTypes não é especificado, todos os tipos de recursos são retornados.
  • CONTENT_TYPE: opcional. O tipo de conteúdo dos metadados que você quer recuperar. Quando contentType não é especificado, apenas informações básicas são retornadas, como nomes de recursos, a última vez que os recursos foram atualizados e a quais projetos, pastas e organizações eles pertencem.
  • RELATIONSHIP_TYPE_#: opcional. Exige acesso ao nível Premium ou Enterprise do Security Command Center ou ao Gemini Cloud Assist. Uma lista separada por vírgulas de tipos de relacionamento de recursos que você quer recuperar. Defina CONTENT_TYPE como RELATIONSHIP para que isso funcione.
  • SNAPSHOT_TIME: opcional. O momento em que você quer tirar um snapshot dos seus recursos, no formato RFC 3339. O valor não pode ser de mais de 35 dias atrás. Quando readTime não é especificado, um snapshot é capturado no horário atual.
  • PAGE_SIZE: opcional. O número de resultados a serem retornados por página. O valor máximo é 500. Se o valor for 0 ou um valor negativo, um padrão apropriado será selecionado. Um nextPageToken é retornado para recuperar resultados subsequentes.

  • PAGE_TOKEN: opcional. Respostas longas são separadas em várias páginas. Quando pageToken não é especificado, a primeira página é retornada. As páginas subsequentes podem ser chamadas usando o nextPageToken da resposta anterior como o valor de pageToken.

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

Exemplos de comandos

Os comandos a seguir recebem um snapshot de metadados resource das instâncias do Compute Engine em 30 de janeiro de 2024 (2024-01-30T00:00:00Z) no projeto my-project.

Antes de executar qualquer um desses comandos, mude o horário do snapshot para os últimos 35 dias e altere 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 Inventário de recursos do Cloud, consulte Bibliotecas de cliente do Cloud Asset Inventory.

Para autenticar no Inventário de recursos do Cloud, configure o Application Default Credentials. Para mais informações, consulte Configurar 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;
    }
}

Go

Para saber como instalar e usar a biblioteca de cliente do Inventário de recursos do Cloud, consulte Bibliotecas de cliente do Cloud Asset Inventory.

Para autenticar no Inventário de recursos do Cloud, configure o Application Default Credentials. Para mais informações, consulte Configurar 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 Inventário de recursos do Cloud, consulte Bibliotecas de cliente do Cloud Asset Inventory.

Para autenticar no Inventário de recursos do Cloud, configure o Application Default Credentials. Para mais informações, consulte Configurar 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 Inventário de recursos do Cloud, consulte Bibliotecas de cliente do Cloud Asset Inventory.

Para autenticar no Inventário de recursos do Cloud, configure o Application Default Credentials. Para mais informações, consulte Configurar 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 Inventário de recursos do Cloud, consulte Bibliotecas de cliente do Cloud Asset Inventory.

Para autenticar no Inventário de recursos do Cloud, configure o Application Default Credentials. Para mais informações, consulte Configurar 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 Inventário de recursos do Cloud, consulte Bibliotecas de cliente do Cloud Asset Inventory.

Para autenticar no Inventário de recursos do Cloud, configure o Application Default Credentials. Para mais informações, consulte Configurar 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 Inventário de recursos do Cloud, consulte Bibliotecas de cliente do Cloud Asset Inventory.

Para autenticar no Inventário de recursos do Cloud, configure o Application Default Credentials. Para mais informações, consulte Configurar 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