Esegui query sugli asset con SQL

Puoi eseguire query sulle risorse nel tuo progetto, nella tua cartella o nella tua organizzazione utilizzando un dialetto compatibile con BigQuery SQL.

Prima di iniziare

  1. Abilita l'API Cloud Asset Inventory nel progetto da cui esegui i comandi Cloud Asset Inventory.

    Abilita l'API Cloud Asset Inventory

  2. Assicurati che il tuo account disponga del ruolo corretto per chiamare l'API Cloud Asset Inventory. Per le singole autorizzazioni per ogni tipo di chiamata, vedi Autorizzazioni.

Limitazioni

Tabelle su cui puoi eseguire query

Puoi eseguire query sulle seguenti tabelle:

  • Per i tipi di contenuti RESOURCE, i nomi delle tabelle nel set di dati corrispondono al nome del tipo di asset, se esiste. Ad esempio, la tabella compute_googleapis_com_Instance contiene i metadati delle istanze di Compute Engine.

  • Per i tipi di contenuti non RESOURCE, i nomi delle tabelle nel set di dati corrispondono ai nomi dei tipi di contenuti RPC/REST. Ad esempio: ACCESS_POLICY.

  • Per eseguire query sui metadati standard delle risorse in tutti i tipi di risorse, utilizza il nome della tabella STANDARD_METADATA. Sono inclusi tutti i campi, ad eccezione di resource.DATA, che è specifico per ogni tipo di risorsa.

Eseguire query sui metadati degli asset

Console

Per eseguire query sui metadati delle risorse per il tuo progetto, la tua cartella o la tua organizzazione, completa i seguenti passaggi:

  1. Nella console Google Cloud , vai alla scheda Query sugli asset nella pagina Inventario asset.

    Vai a Query sugli asset

    Se la scheda Query sugli asset non viene visualizzata, devi accedere al livello Security Command Center Premium o Enterprise, o Gemini Cloud Assist.

  2. Passa al progetto, alla cartella o all'organizzazione per cui vuoi eseguire la query.
  3. Fai clic sulla scheda Query asset.
  4. Per eseguire query sui metadati delle risorse, utilizza una query di esempio o creane una personalizzata:

    • Per utilizzare un esempio, fai clic su una voce nella scheda Libreria di query per visualizzare l'anteprima della query. Fai clic su Applica per copiare il campione nella casella Modifica query, quindi modifica la query o fai clic su Esegui per eseguirla.
    • Per creare una query personalizzata, inserisci il testo della query direttamente nella casella Modifica query, quindi fai clic su Esegui per eseguirla. Per aiutarti a scrivere la tua query, puoi fare clic su una tabella nel riquadro Seleziona tabella per visualizzarne l'anteprima dello schema e dei contenuti. Consulta Sintassi delle query per scoprire come creare una query.

    I metadati dell'asset corrispondenti alla query vengono visualizzati nella scheda Risultato query.

  5. (Facoltativo) Per scaricare i set di risultati delle query in formato CSV, fai clic su Esporta.

    La dimensione massima del file CSV è di 2 MB. Se la richiesta di download non va a buon fine perché le dimensioni del file superano questo limite, viene visualizzato un messaggio con le istruzioni per esportare i risultati completi.

gcloud

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

Fornisci i seguenti valori:

  • SCOPE: utilizza uno dei seguenti valori:

    • project=PROJECT_ID, dove PROJECT_ID è l'ID del progetto che contiene gli asset che vuoi interrogare.
    • folder=FOLDER_ID, dove FOLDER_ID è l'ID della cartella che contiene gli asset che vuoi interrogare.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione che contiene gli asset che vuoi interrogare.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: Una query SELECT SQL.
  • TIMEOUT: (Facoltativo). Il tempo massimo, in secondi, che un client deve attendere il completamento della query prima di continuare. Utilizza i timeout per eseguire la query in modo asincrono e recuperare i risultati in un secondo momento con i riferimenti ai job.

Per tutte le opzioni, consulta il riferimento gcloud CLI.

Esempio

Esegui il comando seguente per ottenere i nomi e i tipi di asset delle prime due istanze Compute Engine nel progetto my-project.

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

Risposta al job completata

Il seguente esempio mostra una risposta alla query di esempio precedente. La risposta contiene un riferimento al job e indica se il job è terminato (done: true). Se il job è terminato, l'oggetto queryResult viene compilato con i dati appropriati e i risultati vengono elencati successivamente.

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

Risposta a una prestazione non completata

Se imposti un timeout nella richiesta, la query viene eseguita in modo asincrono e ti viene inviata una risposta che indica che il job è incompleto (done: false). Questo tipo di risposte contiene un riferimento al job e un oggetto queryResult non compilato:

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

Puoi utilizzare il valore jobReference per recuperare i risultati della query in un secondo momento, dopo che il job è stato completato e i dati sono disponibili.

REST

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "statement": "SQL_SELECT_QUERY",
  "timeout": "TIMEOUTs",
  "pageSize": "PAGE_SIZE",
  "pageToken": "PAGE_TOKEN"
}

Fornisci i seguenti valori:

  • SCOPE_PATH: utilizza uno dei seguenti valori:

    I valori consentiti sono:

    • projects/PROJECT_ID, dove PROJECT_ID è l'ID del progetto che contiene gli asset che vuoi interrogare.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto che contiene gli asset che vuoi interrogare.

      Come trovare un Google Cloud numero di progetto

      ConsoleGoogle Cloud

      Per trovare un numero di progetto, completa i seguenti passaggi: Google Cloud

      1. Vai alla pagina Benvenuto nella console Google Cloud .

        Vai a Benvenuto

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del tuo progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Benvenuto.

        Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.

      Interfaccia a riga di comando gcloud

      Puoi recuperare un Google Cloud numero di progetto con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella che contiene gli asset che vuoi interrogare.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione che contiene gli asset che vuoi interrogare.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: Una query SELECT SQL.
  • TIMEOUT: (Facoltativo). Il tempo massimo, in secondi, che un client deve attendere il completamento della query prima di continuare. Utilizza i timeout per eseguire la query in modo asincrono e recuperare i risultati in un secondo momento con i riferimenti ai job.
  • PAGE_SIZE: (Facoltativo). Il numero di risultati da restituire per pagina. Il massimo è 500. Se il valore è impostato su 0 o su un valore negativo, viene selezionato un valore predefinito appropriato. Viene restituito un nextPageToken per recuperare i risultati successivi.

  • PAGE_TOKEN: (Facoltativo). Le risposte alle richieste lunghe sono separate su più pagine. Se pageToken non è specificato, viene restituita la prima pagina. Le pagine successive possono essere chiamate utilizzando nextPageToken della risposta precedente come valore di pageToken.

Consulta il riferimento REST per tutte le opzioni.

Esempi di comandi

Esegui uno dei seguenti comandi per ottenere i nomi e i tipi di asset delle prime due istanze Compute Engine nel progetto my-project.

curl (Linux, macOS o 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

Risposta al job completata

Il seguente esempio mostra una risposta alla query di esempio precedente. La risposta contiene un riferimento al job e indica se il job è terminato ("done": true). Se il job è terminato, l'oggetto queryResult viene compilato con i dati appropriati.

I risultati della query sono suddivisi in rows, un array che contiene i metadati delle risorse, e schema, un oggetto che descrive lo schema per ogni risorsa nell'array rows. Questa operazione viene eseguita per ridurre al minimo la duplicazione di nomi e tipi di campi nelle risposte di grandi dimensioni.

Analogamente, f e v vengono utilizzati nell'array rows anziché fields e value per mantenere le risposte il più piccole possibile.

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

Risposta a una prestazione non completata

Se imposti un timeout nella richiesta, la query viene eseguita in modo asincrono e ti viene inviata una risposta che indica che il job è incompleto ("done": false). Questo tipo di risposte contiene un riferimento al job e un oggetto queryResult non compilato:

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

Puoi utilizzare il valore jobReference per recuperare i risultati della query in un secondo momento, dopo che il job è stato completato e i dati sono disponibili.

Recuperare i risultati della query in un secondo momento

Per recuperare in un secondo momento una richiesta che ha richiesto tempo per essere completata, effettua una delle seguenti richieste.

gcloud

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

Fornisci i seguenti valori:

  • SCOPE: utilizza uno dei seguenti valori:

    • project=PROJECT_ID, dove PROJECT_ID è l'ID del progetto che contiene gli asset che vuoi interrogare.
    • folder=FOLDER_ID, dove FOLDER_ID è l'ID della cartella che contiene gli asset che vuoi interrogare.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione che contiene gli asset che vuoi interrogare.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE: Il valore di riferimento del job restituito in una risposta precedente.

Esempio

Esegui questo comando per ottenere i risultati di una query eseguita in precedenza nel progetto my-project.

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

REST

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "jobReference": "JOB_REFERENCE",
  "pageToken": "PAGE_TOKEN"
}

Fornisci i seguenti valori:

  • SCOPE_PATH: utilizza uno dei seguenti valori:

    I valori consentiti sono:

    • projects/PROJECT_ID, dove PROJECT_ID è l'ID del progetto che contiene gli asset che vuoi interrogare.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto che contiene gli asset che vuoi interrogare.

      Come trovare un Google Cloud numero di progetto

      ConsoleGoogle Cloud

      Per trovare un numero di progetto, completa i seguenti passaggi: Google Cloud

      1. Vai alla pagina Benvenuto nella console Google Cloud .

        Vai a Benvenuto

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del tuo progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Benvenuto.

        Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.

      Interfaccia a riga di comando gcloud

      Puoi recuperare un Google Cloud numero di progetto con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella che contiene gli asset che vuoi interrogare.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione che contiene gli asset che vuoi interrogare.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE: Il valore di riferimento del job restituito in una risposta precedente.
  • PAGE_TOKEN: (Facoltativo). Le risposte alle richieste lunghe sono separate su più pagine. Se pageToken non è specificato, viene restituita la prima pagina. Le pagine successive possono essere chiamate utilizzando nextPageToken della risposta precedente come valore di pageToken.

Esempi di comandi

Esegui uno dei seguenti comandi per ottenere i risultati di una query eseguita in precedenza.

curl (Linux, macOS o 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

Esportare i risultati della query in BigQuery

I risultati della query vengono restituiti come risposte dell'API Query Assets. Per esportare i risultati nella tua tabella BigQuery, specifica una destinazione BigQuery nella richiesta. Se non ne hai già uno, devi creare un set di dati BigQuery prima di effettuare queste richieste.

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"

Fornisci i seguenti valori:

  • SCOPE: utilizza uno dei seguenti valori:

    • project=PROJECT_ID, dove PROJECT_ID è l'ID del progetto che contiene i metadati della risorsa che vuoi esportare con una query SQL.
    • folder=FOLDER_ID, dove FOLDER_ID è l'ID della cartella che contiene i metadati dell'asset che vuoi esportare con una query SQL.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione che contiene i metadati dell'asset che vuoi esportare con una query SQL.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: Una query SELECT SQL.
  • BIGQUERY_PROJECT_ID: l'ID del progetto in cui si trova la tabella BigQuery che vuoi esportare.
  • DATASET_ID: L'ID del set di dati BigQuery.
  • TABLE_NAME: La tabella BigQuery in cui esporti i metadati. Se non esiste, viene creato.
  • WRITE_METHOD: specifica il comportamento se la tabella o la partizione di destinazione BigQuery esiste già. Sono supportati i seguenti valori:

    • write-empty: predefinito. Se la tabella esistente contiene dati, nel risultato del job viene restituito un errore di duplicazione.
    • write-append: aggiunge dati alla tabella o all'ultima partizione.
    • write-truncate: sovrascrive l'intera tabella o tutti i dati delle partizioni.

Esempio

Esegui il seguente comando per ottenere i nomi e i tipi di asset delle prime due istanze Compute Engine nel progetto my-project ed esporta i risultati nella tabella BigQuery my-table nel progetto my-project, sovrascrivendo l'intera tabella se esiste già.

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

Metodo HTTP e URL:

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

Intestazioni:

X-Goog-User-Project: BILLING_PROJECT_ID

Corpo JSON della richiesta:

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

Fornisci i seguenti valori:

  • SCOPE_PATH: utilizza uno dei seguenti valori:

    I valori consentiti sono:

    • projects/PROJECT_ID, dove PROJECT_ID è l'ID del progetto che contiene i metadati della risorsa che vuoi esportare con una query SQL.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto che contiene i metadati dell'asset che vuoi esportare con una query SQL.

      Come trovare un Google Cloud numero di progetto

      ConsoleGoogle Cloud

      Per trovare un numero di progetto, completa i seguenti passaggi: Google Cloud

      1. Vai alla pagina Benvenuto nella console Google Cloud .

        Vai a Benvenuto

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del tuo progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Benvenuto.

        Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.

      Interfaccia a riga di comando gcloud

      Puoi recuperare un Google Cloud numero di progetto con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella che contiene i metadati dell'asset che vuoi esportare con una query SQL.

      Come trovare l'ID di una Google Cloud cartella

      ConsoleGoogle Cloud

      Per trovare l'ID di una Google Cloud cartella:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"

      dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag --format per visualizzare ulteriori informazioni sulle cartelle trovate.

      Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il comando seguente utilizzando l'ID di una cartella di primo livello:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, dove ORGANIZATION_ID è l'ID dell'organizzazione che contiene i metadati dell'asset che vuoi esportare con una query SQL.

      Come trovare l'ID di un' Google Cloud organizzazione

      ConsoleGoogle Cloud

      Per trovare l'ID di un' Google Cloud organizzazione:

      1. Vai alla Google Cloud console.

        Vai alla Google Cloud console

      2. Fai clic sulla casella di elenco selettore nella barra dei menu.
      3. Seleziona la tua organizzazione dalla casella di elenco.
      4. Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.

      Interfaccia a riga di comando gcloud

      Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: l'ID progetto in cui si trova l'agente di servizio Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i tuoi set di dati e tabelle BigQuery. Scopri di più sull'impostazione del progetto di fatturazione.

  • SQL_SELECT_QUERY: Una query SELECT SQL.
  • BIGQUERY_PROJECT_ID: l'ID del progetto in cui si trova la tabella BigQuery che vuoi esportare.
  • DATASET_ID: L'ID del set di dati BigQuery.
  • TABLE_NAME: La tabella BigQuery in cui esporti i metadati. Se non esiste, viene creato.
  • WRITE_METHOD: specifica il comportamento se la tabella o la partizione di destinazione BigQuery esiste già. Sono supportati i seguenti valori:

    • WRITE_EMPTY: predefinito. Se la tabella esistente contiene dati, nel risultato del job viene restituito un errore di duplicazione.
    • WRITE_APPEND: aggiunge dati alla tabella o all'ultima partizione.
    • WRITE_TRUNCATE: sovrascrive l'intera tabella o tutti i dati delle partizioni.
  • PAGE_SIZE: (Facoltativo). Il numero di risultati da restituire per pagina. Il massimo è 500. Se il valore è impostato su 0 o su un valore negativo, viene selezionato un valore predefinito appropriato. Viene restituito un nextPageToken per recuperare i risultati successivi.

Esempi di comandi

Esegui uno dei seguenti comandi per ottenere i nomi e i tipi di asset delle prime due istanze Compute Engine nel progetto my-project ed esporta i risultati nella tabella BigQuery my-table nel progetto my-project, sovrascrivendo l'intera tabella se esiste già.

curl (Linux, macOS o 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

Altri esempi di query SQL

Gli esempi di codice seguenti mostrano query SQL specifiche che puoi utilizzare per cercare asset, per aiutarti a creare le tue query.

Istanze VM di Compute Engine in una regione specifica

Inoltre, restituisci il name e la data di creazione.

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

Dettagli di un'app in esecuzione in un pod Kubernetes

Restituisce lo spazio dei nomi, la versione e il timestamp dell'app ingress-nginx. Scopri di più sulle funzioni JSON utilizzate in 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"

Quanti set di dati BigQuery sono presenti in ogni progetto

  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

Quante istanze VM di Compute Engine sono presenti in ogni regione

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

Nome e assetType di tutte le risorse in una regione

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

Bucket Cloud Storage disponibili pubblicamente

Inoltre, restituisci il loro 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'

Subnet senza istanze VM collegate

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%'