Exporta metadatos de recursos a BigQuery

En este documento, se muestra cómo exportar una instantánea de activos de tu organización, carpeta o proyecto a una tabla de BigQuery y, luego, ejecutar un análisis de datos en tu inventario. BigQuery brinda una experiencia similar a SQL para que los usuarios analicen datos y generen estadísticas significativas sin usar secuencias de comandos personalizadas.

Antes de comenzar

  1. Habilita la API de Cloud Asset Inventory en el proyecto desde 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.

  3. Crea un conjunto de datos de BigQuery para exportar los datos si aún no tienes uno.

Limitaciones

  • Cuando se exportan datos de tablas de BigQuery, no todos los campos son compatibles con Cloud Asset Inventory.

  • Los campos de recursos que cambian con frecuencia, como numBytes, numLongTermBytes, numPhysicalBytes y numRows, se pueden exportar con un valor de null.

  • No se admite la exportación a tablas agrupadas de BigQuery.

  • No se admite agregar los resultados de las exportaciones a una tabla existente, a menos que exportes a una tabla particionada. La tabla de destino debe estar vacía o debes reemplazarla. Para reemplazarla, usa la marca --output-bigquery-force con gcloud CLI o "force": true con la API de REST.

  • Los tipos de recursos de Google Kubernetes Engine (GKE), excepto container.googleapis.com/Cluster y container.googleapis.com/NodePool, no se admiten cuando se exportan a tablas separadas para cada tipo de recurso.

  • Cloud Asset Inventory rechaza las solicitudes de exportación si una solicitud anterior al mismo destino comenzó hace menos de 15 minutos y aún se está ejecutando. Sin embargo, si una exportación tarda más de 15 minutos en completarse, se marca como finalizada y se permiten nuevas solicitudes de exportación al mismo destino.

  • El tipo de contenido ACCESS_POLICY solo se puede exportar a nivel de la organización.

  • Si la tabla a la que se exporta ya existe y está en proceso de exportación, se devuelve un error 400.

Carcasa

Los nombres de los campos usan diferentes convenciones de mayúsculas y minúsculas según el tipo de contenido solicitado y la configuración de exportación:

  • Para el tipo de contenido RESOURCE cuando exportas recursos a tablas por tipo de recurso, no hay espacios entre las palabras y la primera letra de cada palabra nueva después de la primera se escribe en mayúscula. Por ejemplo, assetType.

  • Para todos los demás tipos de contenido, el nombre del campo está en minúsculas y los espacios se reemplazan por guiones bajos. Por ejemplo, asset_type.

Esquemas de BigQuery que se usan para la exportación

A cada tabla de BigQuery se define en un esquema que describe los nombres de las columnas, los tipos de datos y otra información. Configurar el tipo de contenido para una exportación determina el esquema de tu tabla:

  • Recurso o no especificado: Cuando configuras el tipo de contenido como RESOURCE o no lo especificas, y configuras la marca per-asset-type como false o no la usas, creas una tabla de BigQuery que tiene el siguiente esquema.

    Esquema de recursos

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "version",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "discovery_document_uri",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "discovery_name",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "resource_url",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "parent",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "data",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "location",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "resource",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]

    La columna resource.data contiene los metadatos del recurso representados como una cadena JSON.

    Cuando configuras el tipo de contenido como RESOURCE o no lo configuras, y estableces la marca per-asset-type en true, creas tablas separadas para cada tipo de activo. El esquema de cada tabla incluye columnas de tipo RECORD asignadas a los campos anidados en el campo Resource.data de ese tipo de activo (hasta los 15 niveles anidados que admite BigQuery). Para ver tablas de ejemplo, consulta export-assets-examples en la consola de Google Cloud .

  • Política de IAM: Cuando configuras el tipo de contenido como IAM_POLICY en la API de REST o iam-policy en gcloud CLI, creas una tabla de BigQuery que tiene el siguiente esquema.

    Esquema de la política de IAM

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "version",
            "type": "INTEGER"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "role",
                "type": "STRING"
              },
              {
                "mode": "REPEATED",
                "name": "members",
                "type": "STRING"
              },
              {
                "fields": [
                  {
                    "mode": "NULLABLE",
                    "name": "expression",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "title",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "description",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "location",
                    "type": "STRING"
                  }
                ],
                "mode": "NULLABLE",
                "name": "condition",
                "type": "RECORD"
              }
            ],
            "mode": "REPEATED",
            "name": "bindings",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "service",
                "type": "STRING"
              },
              {
                "fields": [
                  {
                    "mode": "NULLABLE",
                    "name": "log_type",
                    "type": "INTEGER"
                  },
                  {
                    "mode": "REPEATED",
                    "name": "exempted_members",
                    "type": "STRING"
                  }
                ],
                "mode": "REPEATED",
                "name": "audit_log_configs",
                "type": "RECORD"
              }
            ],
            "mode": "REPEATED",
            "name": "audit_configs",
            "type": "RECORD"
          },
          {
            "mode": "NULLABLE",
            "name": "etag",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "iam_policy",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]
  • Política de la organización: Cuando estableces el tipo de contenido en ORG_POLICY en la API de REST o org-policy en gcloud CLI, creas una tabla de BigQuery que tiene el siguiente esquema.

    Esquema de la política de la organización

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "version",
            "type": "INTEGER"
          },
          {
            "mode": "NULLABLE",
            "name": "constraint",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "etag",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "update_time",
            "type": "TIMESTAMP"
          },
          {
            "fields": [
              {
                "mode": "REPEATED",
                "name": "allowed_values",
                "type": "STRING"
              },
              {
                "mode": "REPEATED",
                "name": "denied_values",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "all_values",
                "type": "INTEGER"
              },
              {
                "mode": "NULLABLE",
                "name": "suggested_value",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "inherit_from_parent",
                "type": "BOOLEAN"
              }
            ],
            "mode": "NULLABLE",
            "name": "list_policy",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "enforced",
                "type": "BOOLEAN"
              }
            ],
            "mode": "NULLABLE",
            "name": "boolean_policy",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "_present",
                "type": "BOOLEAN"
              }
            ],
            "mode": "NULLABLE",
            "name": "restore_default",
            "type": "RECORD"
          }
        ],
        "mode": "REPEATED",
        "name": "org_policy",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]
  • Política de VPCSC: Cuando estableces el tipo de contenido en ACCESS_POLICY en la API de REST o access-policy en gcloud CLI, creas una tabla de BigQuery que tiene el siguiente esquema.

    Esquema de la política de VPCSC

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "name",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name"