Consultar recursos con SQL

Puede consultar los recursos de su proyecto, carpeta u organización mediante un dialecto compatible con SQL de BigQuery.

Antes de empezar

  1. Habilita la API Cloud Asset Inventory en el proyecto desde el que ejecutas los comandos de Cloud Asset Inventory.

    Habilitar la API Cloud Asset Inventory

  2. Asegúrate de que tu cuenta tiene el rol correcto para llamar a la API Cloud Asset Inventory. Para ver los permisos individuales de cada tipo de llamada, consulta la sección Permisos.

Limitaciones

Tablas que puedes consultar

Puedes consultar las siguientes tablas:

  • En el caso de los tipos de contenido RESOURCE, los nombres de las tablas del conjunto de datos se corresponden con el nombre del tipo de recurso, siempre que este exista. Por ejemplo, la tabla compute_googleapis_com_Instance contiene metadatos de instancias de Compute Engine.

  • En el caso de los tipos de contenido que no son RESOURCE, los nombres de las tablas del conjunto de datos se corresponden con los nombres de los tipos de contenido de RPC/REST. Por ejemplo, ACCESS_POLICY.

  • Para consultar los metadatos estándar de los recursos de todos los tipos de recursos, usa el nombre de la tabla STANDARD_METADATA. Esto incluye todos los campos, excepto resource.DATA, que es específico de cada tipo de recurso.

Consultar metadatos de recursos

Consola

Para consultar los metadatos de los recursos de tu proyecto, carpeta u organización, sigue estos pasos:

  1. En la Google Cloud consola, ve a la pestaña Consulta de recursos de la página Inventario de recursos.

    Ir a Consulta de recursos

    Si no aparece la pestaña Consulta de recursos, debes tener acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist.

  2. Cambia al proyecto, la carpeta o la organización que quieras consultar.
  3. Haz clic en la pestaña Consulta de recursos.
  4. Para consultar los metadatos de un recurso, puedes usar una consulta de ejemplo o crear la tuya propia:

    • Para usar una muestra, haz clic en una entrada de la pestaña Biblioteca de consultas para previsualizar la consulta. Haz clic en Aplicar para copiar esa muestra en el cuadro Editar consulta. A continuación, edita la consulta o haz clic en Ejecutar para llevarla a cabo.
    • Para crear tu propia consulta, introduce el texto directamente en el cuadro Editar consulta y, a continuación, haz clic en Ejecutar. Para ayudarte a escribir tu propia consulta, puedes hacer clic en una tabla del panel Seleccionar tabla para ver una vista previa de su esquema y su contenido. Consulta la sección sobre sintaxis de las consultas para saber cómo redactar una consulta.

    Los metadatos del recurso que coinciden con la consulta se muestran en la pestaña Resultado de la consulta.

  5. Opcional: Para descargar los conjuntos de resultados de la consulta en formato CSV, haz clic en Exportar.

    El tamaño máximo del archivo CSV es de 2 MB. Si la descarga falla porque el tamaño del archivo supera este límite, aparecerá un mensaje con instrucciones para exportar todos los resultados.

gcloud

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

Proporciona los siguientes valores:

  • SCOPE: usa uno de los siguientes valores:

    • project=PROJECT_ID, donde PROJECT_ID es el ID del proyecto que tiene los recursos que quieres consultar.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que contiene los recursos que quieres consultar.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización que tiene los recursos que quieres consultar.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: una consulta de SQL.SELECT
  • TIMEOUT: opcional. Tiempo máximo, en segundos, que debe esperar un cliente a que se complete la consulta antes de continuar. Usa tiempos de espera para ejecutar tu consulta de forma asíncrona y recuperar los resultados más tarde con referencias de trabajo.

Consulta la referencia de la CLI de gcloud para ver todas las opciones.

Ejemplo

Ejecuta el siguiente comando para obtener los nombres y los tipos de recursos de las dos primeras instancias de Compute Engine del proyecto my-project.

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

Respuesta de trabajo finalizado

En el siguiente ejemplo se muestra una respuesta a la consulta del ejemplo anterior. La respuesta contiene una referencia de trabajo e indica si el trabajo ha finalizado (done: true). Si el trabajo ha finalizado, el objeto queryResult se rellena con los datos correspondientes y los resultados se muestran a continuación.

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

Respuesta de trabajo sin terminar

Si defines un tiempo de espera en tu solicitud, la consulta se realiza de forma asíncrona y se te envía una respuesta que indica que el trabajo no se ha completado (done: false). Este tipo de respuestas contienen una referencia de trabajo y un objeto queryResult sin rellenar:

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

Puedes usar el valor jobReference para recuperar los resultados de la consulta más adelante, una vez que la tarea se haya completado y los datos estén disponibles.

REST

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Proporciona los siguientes valores:

  • SCOPE_PATH: usa uno de los siguientes valores:

    Los valores permitidos son:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto que tiene los recursos que quieres consultar.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto que tiene los recursos que quieres consultar.

      Cómo encontrar el Google Cloud número de proyecto

      Google Cloud consola

      Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:

      1. Ve a la página Bienvenida de la Google Cloud consola.

        Ir a Bienvenida

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista y, a continuación, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.

        Se muestran hasta 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.

      CLI de gcloud

      Puedes obtener un Google Cloud número de proyecto con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que contiene los recursos que quieres consultar.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización que tiene los recursos que quieres consultar.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: una consulta de SQL.SELECT
  • TIMEOUT: opcional. Tiempo máximo, en segundos, que debe esperar un cliente a que se complete la consulta antes de continuar. Usa tiempos de espera para ejecutar tu consulta de forma asíncrona y recuperar los resultados más tarde con referencias de trabajo.
  • PAGE_SIZE: opcional. Número de resultados que se devolverán por página. El máximo es 500. Si el valor es 0 o un valor negativo, se selecciona un valor predeterminado adecuado. Se devuelve un nextPageToken para obtener los resultados posteriores.

  • PAGE_TOKEN: opcional. Las respuestas a solicitudes largas se separan en varias páginas. Si no se especifica pageToken, se devuelve la primera página. Se pueden llamar páginas posteriores usando el nextPageToken de la respuesta anterior como valor de pageToken.

Consulta la referencia de REST para ver todas las opciones.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para obtener los nombres y los tipos de recursos de las dos primeras instancias de Compute Engine del proyecto 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

Respuesta de trabajo finalizado

En el siguiente ejemplo se muestra una respuesta a la consulta del ejemplo anterior. La respuesta contiene una referencia de trabajo e indica si el trabajo ha finalizado ("done": true). Si el trabajo ha finalizado, el objeto queryResult se rellena con los datos correspondientes.

Los resultados de la consulta se dividen en rows, un array que contiene metadatos de recursos, y schema, un objeto que describe el esquema de cada recurso del array rows. Esto se hace para minimizar la duplicación de nombres y tipos de campos en respuestas grandes.

Del mismo modo, f y v se usan en la matriz rows en lugar de fields y value para que las respuestas sean lo más pequeñas posible.

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

Respuesta de trabajo sin terminar

Si defines un tiempo de espera en tu solicitud, la consulta se realiza de forma asíncrona y se te envía una respuesta que indica que el trabajo no se ha completado ("done": false). Este tipo de respuestas contienen una referencia de trabajo y un objeto queryResult sin rellenar:

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

Puedes usar el valor jobReference para recuperar los resultados de la consulta más adelante, una vez que la tarea se haya completado y los datos estén disponibles.

Recuperar resultados de consultas más adelante

Para recuperar una solicitud que ha tardado en completarse, haz una de las siguientes solicitudes.

gcloud

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

Proporciona los siguientes valores:

  • SCOPE: usa uno de los siguientes valores:

    • project=PROJECT_ID, donde PROJECT_ID es el ID del proyecto que tiene los recursos que quieres consultar.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que contiene los recursos que quieres consultar.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización que tiene los recursos que quieres consultar.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE: valor de referencia del trabajo devuelto en una respuesta anterior.

Ejemplo

Ejecuta el siguiente comando para obtener los resultados de una consulta ejecutada anteriormente en el proyecto my-project.

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

REST

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Proporciona los siguientes valores:

  • SCOPE_PATH: usa uno de los siguientes valores:

    Los valores permitidos son:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto que tiene los recursos que quieres consultar.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto que tiene los recursos que quieres consultar.

      Cómo encontrar el Google Cloud número de proyecto

      Google Cloud consola

      Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:

      1. Ve a la página Bienvenida de la Google Cloud consola.

        Ir a Bienvenida

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista y, a continuación, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.

        Se muestran hasta 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.

      CLI de gcloud

      Puedes obtener un Google Cloud número de proyecto con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que contiene los recursos que quieres consultar.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización que tiene los recursos que quieres consultar.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE: valor de referencia del trabajo devuelto en una respuesta anterior.
  • PAGE_TOKEN: opcional. Las respuestas a solicitudes largas se separan en varias páginas. Si no se especifica pageToken, se devuelve la primera página. Se pueden llamar páginas posteriores usando el nextPageToken de la respuesta anterior como valor de pageToken.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para obtener los resultados de una consulta que hayas ejecutado anteriormente.

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

Exportar resultados de consultas a BigQuery

Los resultados de las consultas se devuelven como respuestas de la API Query Assets. Para exportar los resultados a tu propia tabla de BigQuery, especifica un destino de BigQuery en la solicitud. Si aún no tienes uno, debes crear un conjunto de datos de BigQuery antes de hacer estas solicitudes.

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"

Proporciona los siguientes valores:

  • SCOPE: usa uno de los siguientes valores:

    • project=PROJECT_ID, donde PROJECT_ID es el ID del proyecto que tiene los metadatos del recurso que quieres exportar con una consulta SQL.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que contiene los metadatos del recurso que quieres exportar con una consulta SQL.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización que tiene los metadatos del recurso que quieres exportar con una consulta de SQL.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: una consulta de SQL.SELECT
  • BIGQUERY_PROJECT_ID: ID del proyecto en el que se encuentra la tabla de BigQuery que quieres exportar.
  • DATASET_ID: ID del conjunto de datos de BigQuery.
  • TABLE_NAME: la tabla de BigQuery a la que exporta los metadatos. Si no existe, se crea.
  • WRITE_METHOD: especifica el comportamiento si la tabla o la partición de destino de BigQuery ya existen. Se admiten los siguientes valores:

    • write-empty: predeterminado. Si la tabla ya contiene datos, se devuelve un error de duplicado en el resultado del trabajo.
    • write-append: añade datos a la tabla o a la partición más reciente.
    • write-truncate: sobrescribe toda la tabla o todos los datos de las particiones.

Ejemplo

Ejecuta el siguiente comando para obtener los nombres y los tipos de recursos de las dos primeras instancias de Compute Engine del proyecto my-project y exportar los resultados a la tabla my-table de BigQuery del proyecto my-project. Si la tabla ya existe, se sobrescribirá por completo.

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 y URL:

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

Encabezados:

X-Goog-User-Project: BILLING_PROJECT_ID

Cuerpo JSON de la solicitud:

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

Proporciona los siguientes valores:

  • SCOPE_PATH: usa uno de los siguientes valores:

    Los valores permitidos son:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto que tiene los metadatos del recurso que quieres exportar con una consulta SQL.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto que tiene los metadatos del recurso que quieres exportar con una consulta SQL.

      Cómo encontrar el Google Cloud número de proyecto

      Google Cloud consola

      Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:

      1. Ve a la página Bienvenida de la Google Cloud consola.

        Ir a Bienvenida

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista y, a continuación, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.

        Se muestran hasta 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.

      CLI de gcloud

      Puedes obtener un Google Cloud número de proyecto con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que contiene los metadatos del recurso que quieres exportar con una consulta SQL.

      Cómo encontrar el ID de una Google Cloud carpeta

      Google Cloud consola

      Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de organización con el siguiente 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)"

      Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no devuelve los IDs de las subcarpetas de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, donde ORGANIZATION_ID es el ID de la organización que tiene los metadatos del recurso que quieres exportar con una consulta de SQL.

      Cómo encontrar el ID de una Google Cloud organización

      Google Cloud consola

      Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:

      1. Ve a la Google Cloud consola.

        Ve a la Google Cloud consola

      2. En la barra de menús, haz clic en el cuadro de lista del selector.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.

      CLI de gcloud

      Puedes obtener el ID de una Google Cloud organización con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación.

  • SQL_SELECT_QUERY: una consulta de SQL.SELECT
  • BIGQUERY_PROJECT_ID: ID del proyecto en el que se encuentra la tabla de BigQuery que quieres exportar.
  • DATASET_ID: ID del conjunto de datos de BigQuery.
  • TABLE_NAME: la tabla de BigQuery a la que exporta los metadatos. Si no existe, se crea.
  • WRITE_METHOD: especifica el comportamiento si la tabla o la partición de destino de BigQuery ya existen. Se admiten los siguientes valores:

    • WRITE_EMPTY: predeterminado. Si la tabla ya contiene datos, se devuelve un error de duplicado en el resultado del trabajo.
    • WRITE_APPEND: añade datos a la tabla o a la partición más reciente.
    • WRITE_TRUNCATE: sobrescribe toda la tabla o todos los datos de las particiones.
  • PAGE_SIZE: opcional. Número de resultados que se devolverán por página. El máximo es 500. Si el valor es 0 o un valor negativo, se selecciona un valor predeterminado adecuado. Se devuelve un nextPageToken para obtener los resultados posteriores.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para obtener los nombres y los tipos de recursos de las dos primeras instancias de Compute Engine del proyecto my-project y exportar los resultados a la tabla my-table de BigQuery del proyecto my-project. Si la tabla ya existe, se sobrescribirá por completo.

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

Ejemplos adicionales de consultas de SQL

En los siguientes ejemplos de código se muestran consultas SQL específicas que puedes usar para buscar recursos, lo que te ayudará a crear tus propias consultas.

Instancias de VM de Compute Engine en una región específica

Además, devuelve su name y cuándo se crearon.

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

Detalles de una aplicación que se ejecuta en un pod de Kubernetes

Devuelve el espacio de nombres, la versión y la marca de tiempo de la aplicación ingress-nginx. Consulta más información sobre las funciones JSON que se usan en 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"

Cuántos conjuntos de datos de BigQuery hay en cada proyecto

  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

Cuántas instancias de VM de Compute Engine hay en cada región

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

Nombre y assetType de todos los recursos de una región

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

Segmentos de Cloud Storage disponibles públicamente

Además, devuelve su 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'

Subredes que no tienen instancias de VM asociadas

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