Cómo consultar recursos con SQL

Puedes consultar los recursos de tu proyecto, carpeta o organización con un dialecto compatible con BigQuery SQL.

Antes de comenzar

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

    Habilita la API de Cloud Asset Inventory

  2. Asegúrate de que tu cuenta tenga el rol correcto para llamar a la API de Cloud Asset Inventory. Para obtener información sobre los permisos individuales de cada tipo de llamada, consulta 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 en el conjunto de datos corresponden al nombre del tipo de activo, 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 en el conjunto de datos corresponden a los nombres de los tipos de contenido RPC/REST. Por ejemplo, ACCESS_POLICY.

  • Para consultar los metadatos estándar de recursos en 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.

Cómo consultar metadatos de activos

Console

Para consultar los metadatos de los activos de tu proyecto, carpeta o organización, completa los siguientes pasos:

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

    Ir a Búsqueda de recursos

    Si no aparece la pestaña Consulta de recursos, necesitas 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 deseas consultar.
  3. Haz clic en la pestaña Consulta de recursos.
  4. Para consultar los metadatos de los activos, usa una consulta de muestra o crea una propia:

    • Para usar una muestra, haz clic en una entrada de la pestaña Biblioteca de consultas para obtener una vista previa de la consulta. Haz clic en **Aplicar** para copiar ese ejemplo en el cuadro Editar consulta y, luego, edita la consulta o haz clic en Ejecutar para ejecutarla.
    • Para compilar tu propia consulta, ingresa el texto de la consulta directamente en el cuadro Editar consulta y, luego, haz clic en Ejecutar para ejecutarla. Para ayudarte a escribir tu propia consulta, puedes hacer clic en una tabla del panel Seleccionar tabla para obtener una vista previa de su esquema y contenido. Consulta Sintaxis de consulta para aprender a construir una consulta.

    Los metadatos del activo 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 solicitud de descarga falla porque el tamaño del archivo supera este límite, aparecerá un mensaje con instrucciones para exportar los resultados completos.

gcloud

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

Ingresa 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 deseas consultar.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que tiene los recursos que deseas consultar.

      Cómo encontrar el ID de una carpeta de Google Cloud

      consola de

      Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

      Puedes recuperar el ID de una carpeta de Google Cloud que se encuentra a nivel de la 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)"

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

      El comando anterior no muestra los IDs de las subcarpetas dentro 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 deseas consultar.

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

      consola de

      Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: Una consulta SELECT de SQL.
  • TIMEOUT: Opcional Es el tiempo máximo, en segundos, que un cliente debe esperar a que se complete la consulta antes de continuar. Usa tiempos de espera para ejecutar la consulta de forma asíncrona y recuperar los resultados más adelante 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 en el proyecto my-project.

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

Respuesta del trabajo finalizado

En el siguiente ejemplo, se muestra una respuesta a la búsqueda de ejemplo anterior. La respuesta contiene una referencia de trabajo y te indica si este finalizó (done: true). Si el trabajo finalizó, el objeto queryResult se propaga con los datos adecuados y los resultados se enumeran después.

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 configuras 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 la tarea no está completa (done: false). Este tipo de respuestas contiene una referencia de trabajo y un objeto queryResult no propagado:

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

Puedes usar el valor jobReference para recuperar los resultados de la consulta más adelante, después de que se complete la tarea 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"
}

Ingresa los siguientes valores:

  • SCOPE_PATH: Usa uno de los siguientes valores:

    Los valores permitidos son los siguientes:

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

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

      consola de

      Para encontrar el número de proyecto de Google Cloud , completa los siguientes pasos:

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

        Ve a Bienvenida

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista y, luego, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Te damos la bienvenida.

        Se muestran hasta 4,000 recursos. Si no ves el proyecto que buscas, ve a la página Administrar recursos y filtra la lista con el nombre de ese proyecto.

      gcloud CLI

      Puedes recuperar un número de proyecto de Google Cloud 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 tiene los recursos que deseas consultar.

      Cómo encontrar el ID de una carpeta de Google Cloud

      consola de

      Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

      Puedes recuperar el ID de una carpeta de Google Cloud que se encuentra a nivel de la 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)"

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

      El comando anterior no muestra los IDs de las subcarpetas dentro 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 deseas consultar.

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

      consola de

      Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: Una consulta SELECT de SQL.
  • TIMEOUT: Opcional Es el tiempo máximo, en segundos, que un cliente debe esperar a que se complete la consulta antes de continuar. Usa tiempos de espera para ejecutar la consulta de forma asíncrona y recuperar los resultados más adelante con referencias de trabajo.
  • PAGE_SIZE: Opcional Es la cantidad de resultados que se mostrarán por página. La cantidad máxima es 500. Si el valor se establece en 0 o en un valor negativo, se selecciona un valor predeterminado adecuado. Se muestra un nextPageToken para recuperar los resultados posteriores.

  • PAGE_TOKEN: Opcional Las respuestas de solicitudes largas se separan en varias páginas. Cuando no se especifica pageToken, se muestra la primera página. Para llamar a las páginas posteriores, usa el nextPageToken de la respuesta anterior como el 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 en el 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 del trabajo finalizado

En el siguiente ejemplo, se muestra una respuesta a la búsqueda de ejemplo anterior. La respuesta contiene una referencia de trabajo y te indica si este finalizó ("done": true). Si el trabajo finalizó, el objeto queryResult se propaga con los datos adecuados.

Los resultados de la consulta se dividen en rows, un array que contiene los metadatos del activo, y schema, un objeto que describe el esquema de cada activo en el 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 el array rows en lugar de fields y value para mantener las respuestas 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 configuras 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 la tarea no está completa ("done": false). Este tipo de respuestas contiene una referencia de trabajo y un objeto queryResult sin propagar:

{
  "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, después de que se complete la tarea y los datos estén disponibles.

Cómo recuperar los resultados de la consulta más tarde

Para recuperar una solicitud más tarde que haya tardado en completarse, realiza una de las siguientes solicitudes.

gcloud

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

Ingresa 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 deseas consultar.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que tiene los recursos que deseas consultar.

      Cómo encontrar el ID de una carpeta de Google Cloud

      consola de

      Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

      Puedes recuperar el ID de una carpeta de Google Cloud que se encuentra a nivel de la 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)"

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

      El comando anterior no muestra los IDs de las subcarpetas dentro 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 deseas consultar.

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

      consola de

      Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

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

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

Ejemplo

Ejecuta el siguiente comando para obtener los resultados de una consulta que se ejecutó 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"
}

Ingresa los siguientes valores:

  • SCOPE_PATH: Usa uno de los siguientes valores:

    Los valores permitidos son los siguientes:

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

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

      consola de

      Para encontrar el número de proyecto de Google Cloud , completa los siguientes pasos:

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

        Ve a Bienvenida

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista y, luego, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Te damos la bienvenida.

        Se muestran hasta 4,000 recursos. Si no ves el proyecto que buscas, ve a la página Administrar recursos y filtra la lista con el nombre de ese proyecto.

      gcloud CLI

      Puedes recuperar un número de proyecto de Google Cloud 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 tiene los recursos que deseas consultar

      Cómo encontrar el ID de una carpeta de Google Cloud

      consola de

      Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

      Puedes recuperar el ID de una carpeta de Google Cloud que se encuentra a nivel de la 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)"

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

      El comando anterior no muestra los IDs de las subcarpetas dentro 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 deseas consultar.

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

      consola de

      Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE: Es el valor de referencia del trabajo que se muestra en una respuesta anterior.
  • PAGE_TOKEN: Opcional Las respuestas de solicitudes largas se separan en varias páginas. Cuando no se especifica pageToken, se muestra la primera página. Para llamar a las páginas posteriores, usa el nextPageToken de la respuesta anterior como el valor de pageToken.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para obtener los resultados de una consulta que se ejecutó 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

Exporta los resultados de las consultas a BigQuery

Los resultados de la consulta se muestran como respuestas de la API de 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 realizar 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"

Ingresa 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 deseas exportar con una consulta en SQL.
    • folder=FOLDER_ID, donde FOLDER_ID es el ID de la carpeta que tiene los metadatos del activo que deseas exportar con una consulta en SQL.

      Cómo encontrar el ID de una carpeta de Google Cloud

      consola de

      Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

      Puedes recuperar el ID de una carpeta de Google Cloud que se encuentra a nivel de la 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)"

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

      El comando anterior no muestra los IDs de las subcarpetas dentro 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 deseas exportar con una consulta en SQL.

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

      consola de

      Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

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

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

    • write-empty: Predeterminado. Si la tabla existente contiene datos, se muestra un error de duplicado en el resultado del trabajo.
    • write-append: Agrega datos a la tabla o a la partición más reciente.
    • write-truncate: Reemplaza la tabla completa o todos los datos de particiones.

Ejemplo

Ejecuta el siguiente comando para obtener los nombres y los tipos de activos de las dos primeras instancias de Compute Engine en el proyecto my-project y exportar los resultados a la tabla my-table de BigQuery en el proyecto my-project, reemplazando toda la tabla si ya existe.

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

Ingresa los siguientes valores:

  • SCOPE_PATH: Usa uno de los siguientes valores:

    Los valores permitidos son los siguientes:

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

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

      consola de

      Para encontrar el número de proyecto de Google Cloud , completa los siguientes pasos:

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

        Ve a Bienvenida

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista y, luego, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Te damos la bienvenida.

        Se muestran hasta 4,000 recursos. Si no ves el proyecto que buscas, ve a la página Administrar recursos y filtra la lista con el nombre de ese proyecto.

      gcloud CLI

      Puedes recuperar un número de proyecto de Google Cloud 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 tiene los metadatos del activo que deseas exportar con una consulta en SQL.

      Cómo encontrar el ID de una carpeta de Google Cloud

      consola de

      Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

      Puedes recuperar el ID de una carpeta de Google Cloud que se encuentra a nivel de la 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)"

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

      El comando anterior no muestra los IDs de las subcarpetas dentro 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, en la que ORGANIZATION_ID es el ID de la organización que tiene los metadatos del recurso que deseas exportar con una consulta en SQL.

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

      consola de

      Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

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

      gcloud CLI

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: Es el ID del proyecto en el que se encuentra el agente de servicio predeterminado del Cloud Asset Inventory que tiene permisos para administrar tus conjuntos de datos y tablas de BigQuery. Obtén más información para configurar el proyecto de facturación.

  • SQL_SELECT_QUERY: Una consulta SELECT de SQL.
  • BIGQUERY_PROJECT_ID: Es el ID del proyecto en el que se encuentra la tabla de BigQuery a la que deseas exportar.
  • DATASET_ID: Es el ID del conjunto de datos de BigQuery.
  • TABLE_NAME: Es la tabla de BigQuery a la que exportarás tus metadatos. Si no existe, se creará.
  • WRITE_METHOD: Especifica el comportamiento si ya existe la tabla o partición de destino de BigQuery. Se admiten los siguientes valores:

    • WRITE_EMPTY: Predeterminado. Si la tabla existente contiene datos, se muestra un error de duplicado en el resultado del trabajo.
    • WRITE_APPEND: Agrega datos a la tabla o a la partición más reciente.
    • WRITE_TRUNCATE: Reemplaza la tabla completa o todos los datos de particiones.
  • PAGE_SIZE: Opcional Es la cantidad de resultados que se mostrarán por página. La cantidad máxima es 500. Si el valor se establece en 0 o en un valor negativo, se selecciona un valor predeterminado adecuado. Se muestra un nextPageToken para recuperar los resultados posteriores.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para obtener los nombres y los tipos de activos de las dos primeras instancias de Compute Engine en el proyecto my-project y exportar los resultados a la tabla my-table de BigQuery en el proyecto my-project, reemplazando toda la tabla si ya existe.

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 consulta en SQL

En las siguientes muestras de código, se muestran consultas de SQL específicas que puedes usar para buscar recursos y ayudarte a crear tus propias consultas.

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

Además, muestra su name y cuándo se creó.

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

Cantidad de conjuntos de datos de BigQuery 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%'

Buckets de Cloud Storage disponibles públicamente

Además, muestra 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 adjuntas

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