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
Ative a API Cloud Asset Inventory no projeto a partir do qual está a executar comandos do Cloud Asset Inventory.
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.
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,numPhysicalBytesenumRows, podem ser exportados com um valornull.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-forcecom a CLI gcloud ou use"force": truecom a API REST.Os tipos de recursos do Google Kubernetes Engine (GKE), exceto
container.googleapis.com/Clusterecontainer.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_POLICYsó 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
RESOURCEquando 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
RESOURCEou não o especifica e define a flagper-asset-typecomofalseou 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
RESOURCEou não define o tipo de conteúdo e define a flagper-asset-typecomotrue, cria tabelas separadas para cada tipo de recurso. O esquema de cada tabela inclui colunas do tipo RECORD mapeadas para os campos aninhados no campoResource.datadesse 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_POLICYna API REST ouiam-policyna 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_POLICYna API REST ouorg-policyna 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":