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 SQL di BigQuery.

Prima di iniziare

  1. Abilita l'API Cloud Asset Inventory nel progetto da cui stai eseguendo i comandi di 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, consulta 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, supponendo che esista. Ad esempio, la tabella compute_googleapis_com_Instance contiene i metadati delle istanze di Compute Engine.

  • Per i tipi di contenuti diversi da 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 base ai tipi di risorse, utilizza il nome della tabellaSTANDARD_METADATA. Sono inclusi tutti i campi, ad eccezione di resource.DATA, che è specifico per ogni tipo di risorsa.

Eseguire query sui metadati delle risorse

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 asset nella pagina Inventario asset.

    Vai a Query sugli asset

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

  2. Passa al progetto, alla cartella o all'organizzazione per cui vuoi eseguire una query.
  3. Fai clic sulla scheda Query sugli 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 in anteprima la query. Fai clic su **Applica** per copiare il sample 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 della risorsa corrispondenti alla query vengono visualizzati nella scheda Risultato della query.

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

    La dimensione massima del file CSV è 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 è ID del progetto che contiene le risorse su cui vuoi eseguire query.
    • folder=FOLDER_ID, dove FOLDER_ID è ID della cartella contenente le risorse su cui vuoi eseguire una query.

      Come trovare l'ID di una cartella Google Cloud

      Google Cloud console

      Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 seguente comando 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 su cui vuoi eseguire query.

      Come trovare l'ID di un'organizzazione Google Cloud

      Google Cloud console

      Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 SQL.SELECT
  • TIMEOUT: facoltativo. Il tempo massimo, in secondi, che un client deve attendere prima di continuare per il completamento della query. Utilizza i timeout per eseguire la query in modo asincrono e recuperare i risultati in un secondo momento con i riferimenti dei job.

Consulta il riferimento all'interfaccia a riga di comando gcloud per tutte le opzioni.

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 completato

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

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 relativa a un job non completato

Se imposti un timeout nella richiesta, la query viene eseguita in modo asincrono e ti viene inviata una risposta che indica che il job è incompiuto (done: false). Questi tipi di risposte contengono 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, al termine del job e quando 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 contenente le risorse su cui vuoi eseguire query.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto che contiene gli asset su cui vuoi eseguire query.

      Come trovare il numero di un progetto Google Cloud

      Google Cloud console

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

      1. Vai alla pagina Ti diamo il 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 progetto. Il nome, il numero e l'ID progetto vengono visualizzati accanto all'intestazione Ti diamo il 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 il numero di un progetto Google Cloud con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella contenente gli asset su cui vuoi eseguire una query.

      Come trovare l'ID di una cartella Google Cloud

      Google Cloud console

      Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 seguente comando 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 su cui vuoi eseguire query.

      Come trovare l'ID di un'organizzazione Google Cloud

      Google Cloud console

      Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 SQL.SELECT
  • TIMEOUT: facoltativo. Il tempo massimo, in secondi, che un client deve attendere prima di continuare per il completamento della query. Utilizza i timeout per eseguire la query in modo asincrono e recuperare i risultati in un secondo momento con i riferimenti dei job.
  • PAGE_SIZE: facoltativo. Il numero di risultati da restituire per pagina. Il numero 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 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 completato

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

I risultati della query sono suddivisi in rows, un array contenente i metadati delle risorse, e schema, un oggetto che descrive lo schema per ogni risorsa nell'array rows. Questo viene fatto per minimizzare la duplicazione dei nomi e dei tipi di campo 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 relativa a un job non completato

Se imposti un timeout nella richiesta, la query viene eseguita in modo asincrono e ti viene inviata una risposta che indica che il job è incompiuto ("done": false). Questi tipi di risposte contengono 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, al termine del job e quando 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 è ID del progetto che contiene le risorse su cui vuoi eseguire query.
    • folder=FOLDER_ID, dove FOLDER_ID è ID della cartella contenente le risorse su cui vuoi eseguire una query.

      Come trovare l'ID di una cartella Google Cloud

      Google Cloud console

      Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 seguente comando 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 su cui vuoi eseguire query.

      Come trovare l'ID di un'organizzazione Google Cloud

      Google Cloud console

      Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 il seguente 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 le risorse su cui vuoi eseguire query.
    • projects/PROJECT_NUMBER, dove PROJECT_NUMBER è il numero del progetto che contiene gli asset su cui vuoi eseguire query.

      Come trovare il numero di un progetto Google Cloud

      Google Cloud console

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

      1. Vai alla pagina Ti diamo il 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 progetto. Il nome, il numero e l'ID progetto vengono visualizzati accanto all'intestazione Ti diamo il 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 il numero di un progetto Google Cloud con il seguente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, dove FOLDER_ID è l'ID della cartella contenente gli asset su cui vuoi eseguire una query.

      Come trovare l'ID di una cartella Google Cloud

      Google Cloud console

      Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 seguente comando 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 su cui vuoi eseguire query.

      Come trovare l'ID di un'organizzazione Google Cloud

      Google Cloud console

      Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 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 delle 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 è ID della cartella contenente i metadati della risorsa che vuoi esportare con una query SQL.

      Come trovare l'ID di una cartella Google Cloud

      Google Cloud console

      Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 seguente comando 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 della risorsa che vuoi esportare con una query SQL.

      Come trovare l'ID di un'organizzazione Google Cloud

      Google Cloud console

      Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 SQL SELECT.
  • BIGQUERY_PROJECT_ID: l'ID del progetto in cui si trova la tabella BigQuery in cui vuoi eseguire l'esportazione.
  • DATASET_ID: l'ID del set di dati BigQuery.
  • TABLE_NAME: la tabella BigQuery in cui stai esportando i metadati. Se non esiste, viene creato.
  • WRITE_METHOD: specifica il comportamento se la tabella o la partizione di destinazione BigQuery esistente. Sono supportati i seguenti valori:

    • write-empty: valore predefinito. Se la tabella esistente contiene dati, nel risultato del job viene restituito un errore di duplicazione.
    • write-append: aggiunge i dati alla tabella o alla partizione più recente.
    • 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 esportare i risultati nella tabella BigQuery my-table del 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 contenente i metadati della risorsa che vuoi esportare con una query SQL.

      Come trovare il numero di un progetto Google Cloud

      Google Cloud console

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

      1. Vai alla pagina Ti diamo il 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 progetto. Il nome, il numero e l'ID progetto vengono visualizzati accanto all'intestazione Ti diamo il 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 il numero di un progetto Google Cloud con il seguente comando:

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

      Come trovare l'ID di una cartella Google Cloud

      Google Cloud console

      Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 seguente comando 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 della risorsa che vuoi esportare con una query SQL.

      Come trovare l'ID di un'organizzazione Google Cloud

      Google Cloud console

      Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:

      1. Vai alla console Google Cloud .

        Vai alla console Google Cloud

      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 del servizio di Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i set di dati e le tabelle BigQuery. Scopri di più sulla configurazione del progetto di fatturazione.

  • SQL_SELECT_QUERY: una query SQL.SELECT
  • BIGQUERY_PROJECT_ID: l'ID del progetto in cui si trova la tabella BigQuery in cui vuoi eseguire l'esportazione.
  • DATASET_ID: l'ID del set di dati BigQuery.
  • TABLE_NAME: la tabella BigQuery in cui stai esportando i metadati. Se non esiste, viene creato.
  • WRITE_METHOD: specifica il comportamento se la tabella o la partizione di destinazione BigQuery esistente. Sono supportati i seguenti valori:

    • WRITE_EMPTY: valore predefinito. Se la tabella esistente contiene dati, nel risultato del job viene restituito un errore di duplicazione.
    • WRITE_APPEND: aggiunge i dati alla tabella o alla partizione più recente.
    • WRITE_TRUNCATE: sovrascrive l'intera tabella o tutti i dati delle partizioni.
  • PAGE_SIZE: facoltativo. Il numero di risultati da restituire per pagina. Il numero 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

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

Istanze VM di Compute Engine in una regione specifica

Inoltre, restituisci il relativo name e la data di creazione.

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

Il numero di set di dati BigQuery 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 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 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%'