Exporte metadados de recursos para o BigQuery

Este documento mostra como exportar uma captura instantânea de um recurso da sua organização, pasta ou projeto para uma tabela do BigQuery e, em seguida, executar a análise de dados no seu inventário. O BigQuery oferece uma experiência semelhante a SQL para os utilizadores analisarem dados e gerarem estatísticas significativas sem usar scripts personalizados.

Antes de começar

  1. Ative a API Cloud Asset Inventory no projeto a partir do qual está a executar comandos do Cloud Asset Inventory.

    Ative a API Cloud Asset Inventory

  2. Certifique-se de que a sua conta tem a função correta para chamar a API Cloud Asset Inventory. Para ver as autorizações individuais de cada tipo de chamada, consulte a secção Autorizações.

  3. Crie um conjunto de dados do BigQuery para exportar, se ainda não tiver um.

Limitações

  • Quando exporta dados de tabelas do BigQuery, nem todos os campos são suportados pelo Cloud Asset Inventory.

  • Os campos de recursos que mudam com frequência, como numBytes, numLongTermBytes, numPhysicalBytes e numRows, podem ser exportados com um valor null.

  • A exportação para tabelas agrupadas do BigQuery não é suportada.

  • Anexar o resultado da exportação a uma tabela existente não é suportado, a menos que exporte para uma tabela particionada. A tabela de destino tem de estar vazia ou tem de a substituir. Para o substituir, use a flag --output-bigquery-force com a CLI gcloud ou use "force": true com a API REST.

  • Os tipos de recursos do Google Kubernetes Engine (GKE), exceto container.googleapis.com/Cluster e container.googleapis.com/NodePool, não são suportados quando exporta para tabelas separadas para cada tipo de recurso.

  • O Cloud Asset Inventory rejeita pedidos de exportação se um pedido anterior para o mesmo destino tiver sido iniciado há menos de 15 minutos e ainda estiver em execução. No entanto, se uma exportação demorar mais de 15 minutos a ser concluída, é marcada como concluída e são permitidos novos pedidos de exportação para o mesmo destino.

  • O tipo de conteúdo ACCESS_POLICY só pode ser exportado ao nível da organização.

  • Se a tabela para a qual está a exportar já existir e estiver em processo de exportação, é devolvido um erro 400.

Caixa

Os nomes dos campos usam convenções de capitalização diferentes consoante o tipo de conteúdo pedido e as definições de exportação:

  • Para o tipo de conteúdo RESOURCE quando exporta recursos para tabelas por tipo de recurso, não existem espaços entre as palavras, e a primeira letra de cada nova palavra depois da primeira é escrita em maiúsculas. Por exemplo,assetType.

  • Para todos os outros tipos de conteúdo, o nome do campo está em letras minúsculas, com os espaços substituídos por sublinhados. Por exemplo, asset_type.

Esquemas do BigQuery usados para exportação

Todas as tabelas do BigQuery são definidas por um esquema que descreve os nomes das colunas, os tipos de dados e outras informações. A definição do tipo de conteúdo para uma exportação determina o esquema da sua tabela:

  • Recurso ou não especificado: quando define o tipo de conteúdo como RESOURCE ou não o especifica e define a flag per-asset-type como false ou não a usa, cria uma tabela do BigQuery com o seguinte 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"
      }
    ]

    A coluna resource.data é os metadados de recursos representados como uma string JSON.

    Quando define o tipo de conteúdo como RESOURCE ou não define o tipo de conteúdo e define a flag per-asset-type como true, cria tabelas separadas para cada tipo de recurso. O esquema de cada tabela inclui colunas do tipo RECORD mapeadas para os campos aninhados no campo Resource.data desse tipo de recurso (até aos 15 níveis aninhados que o BigQuery suporta). Para ver exemplos de tabelas, consulte export-assets-examples na Google Cloud consola.

  • Política de IAM: quando define o tipo de conteúdo como IAM_POLICY na API REST ou iam-policy na CLI gcloud, cria uma tabela do BigQuery com o seguinte esquema.

    Esquema da política 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 organização: quando define o tipo de conteúdo como ORG_POLICY na API REST ou org-policy na CLI gcloud, cria uma tabela do BigQuery com o seguinte esquema.

    Esquema de políticas da organização

    [
      {
        "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":