Consulte recursos com SQL

Pode consultar recursos no seu projeto, pasta ou organização através de um dialeto compatível com o SQL do BigQuery.

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

Tabelas que pode consultar

Pode consultar as seguintes tabelas:

  • Para os tipos de conteúdo RESOURCE, os nomes das tabelas no conjunto de dados correspondem ao nome do tipo de recurso, partindo do princípio de que o tipo de recurso existe. Por exemplo, a tabela compute_googleapis_com_Instance contém metadados de instâncias do Compute Engine.

  • Para tipos de conteúdo não relacionados com RESOURCE, os nomes das tabelas no conjunto de dados correspondem aos nomes dos tipos de conteúdo RPC/REST. Por exemplo, ACCESS_POLICY.

  • Para consultar metadados padrão de recursos em tipos de recursos, use o nome da tabela STANDARD_METADATA. Isto inclui todos os campos, exceto resource.DATA, que é específico de cada tipo de recurso.

Consulte metadados de recursos

Consola

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

  1. Na Google Cloud consola, aceda ao separador Consulta de recursos na página Inventário de recursos.

    Aceda à consulta de recursos

    Se o separador Consulta de recursos não aparecer, precisa de acesso ao nível Premium ou Enterprise do Security Command Center, ou Gemini Cloud Assist.

  2. Altere para o projeto, a pasta ou a organização que quer consultar.
  3. Clique no separador Consulta de recursos.
  4. Para consultar os metadados dos recursos, use uma consulta de exemplo ou crie a sua própria:

    • Para usar um exemplo, clique numa entrada no separador Biblioteca de consultas para pré-visualizar a consulta. Clique em Aplicar para copiar esse exemplo para a caixa Editar consulta e, em seguida, edite a consulta ou clique em Executar para a executar.
    • Para criar a sua própria consulta, introduza o texto da consulta diretamente na caixa Editar consulta e, de seguida, clique em Executar para a executar. Para ajudar a escrever a sua própria consulta, pode clicar numa tabela no painel Selecionar tabela para pré-visualizar o respetivo esquema e conteúdo. Consulte Sintaxe de consulta para saber como criar uma consulta.

    Os metadados dos recursos que correspondem à consulta são apresentados no separador Resultado da consulta.

  5. Opcional: para transferir os conjuntos de resultados da consulta no formato CSV, clique em Exportar.

    O tamanho máximo do ficheiro CSV é de 2 MB. Se o pedido de transferência falhar porque o tamanho do ficheiro excede este limite, é apresentada uma mensagem com instruções para exportar os resultados completos.

gcloud

gcloud asset query \
    --SCOPE \
    --statement="SQL_SELECT_QUERY" \
    --timeout="TIMEOUTs"

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto que tem os recursos que quer consultar.
    • folder=FOLDER_ID, onde FOLDER_ID é o ID da pasta que tem os recursos que quer consultar.

      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 os recursos que quer consultar.

      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))"
  • SQL_SELECT_QUERY: Uma consulta SQL.SELECT
  • TIMEOUT: opcional. O tempo máximo, em segundos, que um cliente deve aguardar pela conclusão da consulta antes de continuar. Use limites de tempo para executar a consulta de forma assíncrona e obter os resultados mais tarde com referências de tarefas.

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

Exemplo

Execute o seguinte comando para obter os nomes e os tipos de recursos das duas primeiras instâncias do Compute Engine no projeto my-project.

gcloud asset query \
    --project=my-project \
    --statement="
      SELECT
        name, assetType
      FROM
        compute_googleapis_com_Instance
      LIMIT 2"

Resposta de tarefa concluída

O exemplo seguinte mostra uma resposta à consulta do exemplo anterior. A resposta contém uma referência da tarefa e indica se a tarefa foi concluída (done: true). Se a tarefa tiver sido concluída, o objeto queryResult é preenchido com os dados adequados e os resultados são apresentados posteriormente.

done: true
jobReference: 0000000000000000000000000000000000000000000000000000000000000000
queryResult:
  nextPageToken: ''
  totalRows: '2'

name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1
assetType: compute.googleapis.com/Instance

name: //compute.googleapis.com/projects/my-project/zones/us-central1-c/instances/instance-2
assetType: compute.googleapis.com/Instance

Resposta de tarefa não concluída

Se definir um limite de tempo no seu pedido, a consulta é realizada de forma assíncrona e é-lhe enviada uma resposta que indica que a tarefa está inconcluída (done: false). Estes tipos de respostas contêm uma referência de tarefa e um objeto queryResult não preenchido:

done: false
jobReference: 0000000000000000000000000000000000000000000000000000000000000000
queryResult:
  nextPageToken: ''
  totalRows: '0'

Pode usar o valor jobReference para obter os resultados da consulta mais tarde, após a tarefa estar concluída e os dados estarem disponíveis.

REST

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "statement": "SQL_SELECT_QUERY",
  "timeout": "TIMEOUTs",
  "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 os recursos que quer consultar.
    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto que tem os recursos que quer consultar.

      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 os recursos que quer consultar.

      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 os recursos que quer consultar.

      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))"
  • SQL_SELECT_QUERY: Uma consulta SQL.SELECT
  • TIMEOUT: opcional. O tempo máximo, em segundos, que um cliente deve aguardar pela conclusão da consulta antes de continuar. Use limites de tempo para executar a consulta de forma assíncrona e obter os resultados mais tarde com referências de tarefas.
  • 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

Execute um dos seguintes comandos para obter os nomes e os tipos de recursos das duas primeiras instâncias do Compute Engine no projeto my-project.

curl (Linux, macOS ou Cloud Shell)

curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "statement": "
              SELECT
                name, assetType
              FROM
                compute_googleapis_com_Instance
              LIMIT 2"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "statement": "
    SELECT
      name, assetType
    FROM
      compute_googleapis_com_Instance
    LIMIT 2"
}
"@

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

Resposta de tarefa concluída

O exemplo seguinte mostra uma resposta à consulta do exemplo anterior. A resposta contém uma referência de tarefa e indica se a tarefa foi concluída ("done": true). Se a tarefa tiver sido concluída, o objeto queryResult é preenchido com os dados adequados.

Os resultados da consulta são divididos em rows, uma matriz que contém metadados de recursos, e schema, um objeto que descreve o esquema de cada recurso na matriz rows. Isto é feito para minimizar a duplicação de nomes e tipos de campos em respostas grandes.

Da mesma forma, f e v são usados na matriz rows em vez de fields e value para manter as respostas o mais pequenas possível.

{
  "jobReference": "0000000000000000000000000000000000000000000000000000000000000000",
  "done": true,
  "queryResult": {
    "rows": [
      {
        "f": [
          {
            "v": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1"
          },
          {
            "v": "compute.googleapis.com/Instance"
          }
        ]
      },
      {
        "f": [
          {
            "v": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-2"
          },
          {
            "v": "compute.googleapis.com/Instance"
          }
        ]
      }
    ],
    "schema": {
      "fields": [
        {
          "field": "name",
          "type": "STRING",
          "mode": "NULLABLE",
          "fields": []
        },
        {
          "field": "assetType",
          "type": "STRING",
          "mode": "NULLABLE",
          "fields": []
        }
      ]
    },
    "nextPageToken": "",
    "totalRows": "1"
  }
}

Resposta de tarefa não concluída

Se definir um limite de tempo no seu pedido, a consulta é realizada de forma assíncrona e é-lhe enviada uma resposta que indica que a tarefa está inconcluída ("done": false). Estes tipos de respostas contêm uma referência de tarefa e um objeto queryResult não preenchido:

{
  "jobReference": "0000000000000000000000000000000000000000000000000000000000000000",
  "done": false,
  "queryResult": {
    "rows": [],
    "schema": {
      "fields": []
    },
    "nextPageToken": "",
    "totalRows": "0"
  }
}

Pode usar o valor jobReference para obter os resultados da consulta mais tarde, após a tarefa estar concluída e os dados estarem disponíveis.

Obtenha resultados de consultas mais tarde

Para obter um pedido mais tarde que demorou tempo a ser concluído, faça um dos seguintes pedidos.

gcloud

gcloud asset query \
    --SCOPE \
    --job-reference="JOB_REFERENCE"

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto que tem os recursos que quer consultar.
    • folder=FOLDER_ID, onde FOLDER_ID é o ID da pasta que tem os recursos que quer consultar.

      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 os recursos que quer consultar.

      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))"
  • JOB_REFERENCE: O valor de referência da tarefa devolvido numa resposta anterior.

Exemplo

Execute o seguinte comando para obter os resultados de uma consulta executada anteriormente no projeto my-project.

gcloud asset query \
    --project=my-project \
    --job-reference="0000000000000000000000000000000000000000000000000000000000000000"

REST

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "jobReference": "JOB_REFERENCE",
  "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 os recursos que quer consultar.
    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto que tem os recursos que quer consultar.

      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 os recursos que quer consultar.

      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 os recursos que quer consultar.

      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))"
  • JOB_REFERENCE: O valor de referência da tarefa devolvido numa resposta anterior.
  • 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.

Exemplos de comandos

Execute um dos seguintes comandos para obter os resultados de uma consulta executada anteriormente.

curl (Linux, macOS ou Cloud Shell)

curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "jobReference": "0000000000000000000000000000000000000000000000000000000000000000"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "jobReference": "0000000000000000000000000000000000000000000000000000000000000000"
}
"@

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

Exporte os resultados da consulta para o BigQuery

Os resultados da consulta são devolvidos como respostas da API Query Assets. Para exportar os resultados para a sua própria tabela do BigQuery, especifique um destino do BigQuery no pedido. Se ainda não tiver um, tem de criar um conjunto de dados do BigQuery antes de fazer estes pedidos.

gcloud

gcloud asset query \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --statement="SQL_SELECT_QUERY" \
    --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
    --write-disposition="WRITE_METHOD"

Indique os seguintes valores:

  • SCOPE: use um dos seguintes valores:

    • project=PROJECT_ID, onde PROJECT_ID é o ID do projeto que tem os metadados dos recursos que quer exportar com uma consulta SQL.
    • folder=FOLDER_ID, onde FOLDER_ID é o ID da pasta que tem os metadados dos recursos que quer exportar com uma consulta SQL.

      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 os metadados dos recursos que quer exportar com uma consulta SQL.

      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))"
  • SQL_SELECT_QUERY: Uma consulta SQL.SELECT
  • BIGQUERY_PROJECT_ID: O ID do projeto em que se encontra a tabela do BigQuery para a qual quer exportar.
  • DATASET_ID: O ID do conjunto de dados do BigQuery.
  • TABLE_NAME: A tabela do BigQuery para a qual está a exportar os metadados. Se não existir, é criado.
  • WRITE_METHOD: Especifica o comportamento se a tabela ou a partição de destino do BigQuery já existir. Os seguintes valores são suportados:

    • write-empty: predefinição. Se a tabela existente contiver dados, é devolvido um erro de duplicado no resultado da tarefa.
    • write-append: acrescenta dados à tabela ou à partição mais recente.
    • write-truncate: substitui toda a tabela ou todos os dados das partições.

Exemplo

Execute o seguinte comando para obter os nomes e os tipos de recursos das duas primeiras instâncias do Compute Engine no projeto my-project e exportar os resultados para a tabela do BigQuery my-table no projeto my-project, substituindo toda a tabela se já existir.

gcloud asset query \
  --project=my-project \
  --statement="
    SELECT
      name, assetType
    FROM
      compute_googleapis_com_Instance
    LIMIT 2" \
  --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \
  --write-disposition="write-truncate"

REST

Método HTTP e URL:

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

Cabeçalhos:

X-Goog-User-Project: BILLING_PROJECT_ID

Corpo JSON do pedido:

{
  "statement": "SQL_SELECT_QUERY",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID",
      "table": "TABLE_NAME",
      "writeDisposition": "WRITE_METHOD"
    }
  },
  "pageSize": "PAGE_SIZE"
}

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 os metadados dos recursos que quer exportar com uma consulta SQL.
    • projects/PROJECT_NUMBER, onde PROJECT_NUMBER é o número do projeto que tem os metadados dos recursos que quer exportar com uma consulta SQL.

      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 os metadados dos recursos que quer exportar com uma consulta SQL.

      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 os metadados dos recursos que quer exportar com uma consulta SQL.

      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))"
  • BILLING_PROJECT_ID: O ID do projeto em que o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação.

  • SQL_SELECT_QUERY: Uma consulta SQL.SELECT
  • BIGQUERY_PROJECT_ID: O ID do projeto em que se encontra a tabela do BigQuery para a qual quer exportar.
  • DATASET_ID: O ID do conjunto de dados do BigQuery.
  • TABLE_NAME: A tabela do BigQuery para a qual está a exportar os metadados. Se não existir, é criado.
  • WRITE_METHOD: Especifica o comportamento se a tabela ou a partição de destino do BigQuery já existir. Os seguintes valores são suportados:

    • WRITE_EMPTY: predefinição. Se a tabela existente contiver dados, é devolvido um erro de duplicado no resultado da tarefa.
    • WRITE_APPEND: acrescenta dados à tabela ou à partição mais recente.
    • WRITE_TRUNCATE: substitui toda a tabela ou todos os dados das partições.
  • 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.

Exemplos de comandos

Execute um dos seguintes comandos para obter os nomes e os tipos de recursos das duas primeiras instâncias do Compute Engine no projeto my-project e exportar os resultados para a tabela my-table do BigQuery no projeto my-project, substituindo toda a tabela, se já existir.

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 '{
            "statement": "
              SELECT
                name, assetType
              FROM
                compute_googleapis_com_Instance
              LIMIT 2",
            "outputConfig": {
              "bigqueryDestination": {
                "dataset": "projects/my-project/datasets/my-dataset",
                "table": "my-table",
                "writeDisposition": "WRITE_TRUNCATE"
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

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


$body = @"
{
  "statement": "
    SELECT
      name, assetType
    FROM
      compute_googleapis_com_Instance
    LIMIT 2",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/my-project/datasets/my-dataset",
      "table": "my-table",
      "writeDisposition": "WRITE_TRUNCATE"
    }
  }
}
"@

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

Exemplos adicionais de consultas SQL

Os seguintes exemplos de código mostram consultas SQL específicas que pode usar para pesquisar recursos, o que ajuda a criar as suas próprias consultas.

Instâncias de VM do Compute Engine numa região específica

Além disso, devolve o name e a data de criação.

SELECT
  name,
  resource.DATA.creationTimestamp
FROM
  compute_googleapis_com_Instance
WHERE
  resource.location LIKE '%asia%'

Detalhes de uma app em execução num pod do Kubernetes

Devolve o espaço de nomes, a versão e a data/hora da app ingress-nginx. Saiba mais sobre as funções JSON usadas no BigQuery.

SELECT
  name AS pod_name,
  JSON_EXTRACT_SCALAR(resource.data.metadata, '$.namespace') AS namespace,
  resource.data.metadata.creationTimestamp AS creation_time,
  JSON_EXTRACT_SCALAR(resource.data.metadata.labels, "$['app.kubernetes.io/name']") AS app_label,
  resource.data.metadata.labels['app.kubernetes.io/version'] AS version
FROM
  k8s_io_Pod
WHERE
  JSON_EXTRACT_SCALAR(resource.data.metadata, '$.namespace') = "default"
  AND JSON_EXTRACT_SCALAR(resource.data.metadata.labels, "$['app.kubernetes.io/name']") = "ingress-nginx"

Quantos conjuntos de dados do BigQuery existem em cada projeto

  SELECT
    ancestor AS project,
    COUNT(*)
  FROM
    bigquery_googleapis_com_Dataset
  CROSS JOIN
    UNNEST (ancestors) AS ancestor
  WHERE
    ancestor LIKE '%project%'
  GROUP BY
    ancestor
  ORDER BY
    2 DESC

Quantas instâncias de VM do Compute Engine existem em cada região

SELECT
  resource.location,
  COUNT(*)
FROM
  compute_googleapis_com_Instance
GROUP BY
  resource.location

Nome e assetType de todos os recursos numa região

SELECT
  name,
  assetType
FROM
  STANDARD_METADATA
WHERE
  resource.location LIKE '%asia%'

Contentores do Cloud Storage disponíveis publicamente

Além disso, devolva o name.

SELECT
  name
FROM
  IAM_POLICY
CROSS JOIN
  UNNEST(iamPolicy.bindings) AS binding
WHERE
  ('allUsers' IN UNNEST(binding.members)
  OR 'allAuthenticatedUsers' IN UNNEST(binding.members))
  AND assetType = 'storage.googleapis.com/Bucket'

Sub-redes que não têm instâncias de VM anexadas

SELECT
  subnetwork_table.name
FROM
  compute_googleapis_com_Subnetwork AS subnetwork_table
LEFT JOIN (
  SELECT
    interface.subnetwork AS subnetwork
  FROM
    compute_googleapis_com_Instance
  CROSS JOIN
    UNNEST(resource.DATA.networkInterfaces) AS interface) AS instance_table
ON
  SUBSTR(subnetwork_table.name, 25) = SUBSTR(instance_table.subnetwork,38)
WHERE
  instance_table.subnetwork IS NULL
  AND NOT subnetwork_table.name LIKE '%default%'