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
,numPhysicalBytes
enumRows
, podem ser exportados com um valornull
.A exportação para tabelas agrupadas do BigQuery não é suportada.
As tabelas do BigQuery encriptadas com chaves personalizadas do Cloud Key Management Service (Cloud KMS) não são suportadas.
Não é possível anexar o resultado da exportação a uma tabela existente, 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
econtainer.googleapis.com/NodePool
, não são suportados quando exportados 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 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 flagper-asset-type
comofalse
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 flagper-asset-type
comotrue
, 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.data
desse tipo de recurso (até aos 15 níveis aninhados suportados pelo BigQuery). Para ver tabelas de exemplo, 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 ouiam-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 ouorg-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": "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: quando define o tipo de conteúdo como
ACCESS_POLICY
na API REST ouaccess-policy
na CLI gcloud, cria uma tabela do BigQuery com o seguinte esquema.Esquema da política do VPCSC
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "parent", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "REPEATED", "name": "scopes", "type": "STRING" }, { "mode": "NULLABLE", "name": "etag", "type": "STRING" } ], "mode": "NULLABLE", "name": "access_policy", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "fields": [ { "fields": [ { "mode": "REPEATED", "name": "ip_subnetworks", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "require_screenlock", "type": "BOOLEAN" }, { "mode": "REPEATED", "name": "allowed_encryption_statuses", "type": "INTEGER" }, { "fields": [ { "mode": "NULLABLE", "name": "os_type", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "minimum_version", "type": "STRING" }, { "mode": "NULLABLE", "name": "require_verified_chrome_os", "type": "BOOLEAN" } ], "mode": "REPEATED", "name": "os_constraints", "type": "RECORD" }, { "mode": "REPEATED", "name": "allowed_device_management_levels", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "require_admin_approval", "type": "BOOLEAN" }, { "mode": "NULLABLE", "name": "require_corp_owned", "type": "BOOLEAN" } ], "mode": "NULLABLE", "name": "device_policy", "type": "RECORD" }, { "mode": "REPEATED", "name": "required_access_levels", "type": "STRING" }, { "mode": "NULLABLE", "name": "negate", "type": "BOOLEAN" }, { "mode": "REPEATED", "name": "members", "type": "STRING" }, { "mode": "REPEATED", "name": "regions", "type": "STRING" }, { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "network", "type": "STRING" }, { "mode": "REPEATED", "name": "vpc_ip_subnetworks", "type": "STRING" } ], "mode": "NULLABLE", "name": "vpc_subnetwork", "type": "RECORD" } ], "mode": "REPEATED", "name": "vpc_network_sources", "type": "RECORD" } ], "mode": "REPEATED", "name": "conditions", "type": "RECORD" }, { "mode": "NULLABLE", "name": "combining_function", "type": "INTEGER" } ], "mode": "NULLABLE", "name": "basic", "type": "RECORD" }, { "fields": [ { "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": "expr", "type": "RECORD" } ], "mode": "NULLABLE", "name": "custom", "type": "RECORD" } ], "mode": "NULLABLE", "name": "access_level", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "mode": "NULLABLE", "name": "perimeter_type", "type": "INTEGER" }, { "fields": [ { "mode": "REPEATED", "name": "resources", "type": "STRING" }, { "mode": "REPEATED", "name": "access_levels", "type": "STRING" }, { "mode": "REPEATED", "name": "restricted_services", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "enable_restriction", "type": "BOOLEAN" }, { "mode": "REPEATED", "name": "allowed_services", "type": "STRING" } ], "mode": "NULLABLE", "name": "vpc_accessible_services", "type": "RECORD" }, { "fields": [ { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "access_level", "type": "STRING" }, { "mode": "NULLABLE", "name": "resource", "type": "STRING" } ], "mode": "REPEATED", "name": "sources", "type": "RECORD" }, { "mode": "REPEATED", "name": "identities", "type": "STRING" }, { "mode": "NULLABLE", "name": "identity_type", "type": "INTEGER" } ], "mode": "NULLABLE", "name": "ingress_from", "type": "RECORD" }, { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "service_name", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "method", "type": "STRING" }, { "mode": "NULLABLE", "name": "permission", "type": "STRING" } ], "mode": "REPEATED", "name": "method_selectors", "type": "RECORD" } ], "mode": "REPEATED", "name": "operations", "type": "RECORD" }, { "mode": "REPEATED", "name": "resources", "type": "STRING" } ], "mode": "NULLABLE", "name": "ingress_to", "type": "RECORD" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" } ], "mode": "REPEATED", "name": "ingress_policies", "type": "RECORD" }, { "fields": [ { "fields": [ { "mode": "REPEATED", "name": "identities", "type": "STRING" }, { "mode": "NULLABLE", "name": "identity_type", "type": "INTEGER" }, { "fields": [ { "mode": "NULLABLE", "name": "access_level", "type": "STRING" }, { "mode": "NULLABLE", "name": "resource", "type": "STRING" } ], "mode": "REPEATED", "name": "sources", "type": "RECORD" }, { "mode": "NULLABLE", "name": "source_restriction", "type": "INTEGER" } ], "mode": "NULLABLE", "name": "egress_from", "type": "RECORD" }, { "fields": [ { "mode": "REPEATED", "name": "resources", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "service_name", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "method", "type": "STRING" }, { "mode": "NULLABLE", "name": "permission", "type": "STRING" } ], "mode": "REPEATED", "name": "method_selectors", "type": "RECORD" } ], "mode": "REPEATED", "name": "operations", "type": "RECORD" }, { "mode": "REPEATED", "name": "external_resources", "type": "STRING" } ], "mode": "NULLABLE", "name": "egress_to", "type": "RECORD" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" } ], "mode": "REPEATED", "name": "egress_policies", "type": "RECORD" } ], "mode": "NULLABLE", "name": "status", "type": "RECORD" }, { "fields": [ { "mode": "REPEATED", "name": "resources", "type": "STRING" }, { "mode": "REPEATED", "name": "access_levels", "type": "STRING" }, { "mode": "REPEATED", "name": "restricted_services", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "enable_restriction", "type": "BOOLEAN" }, { "mode": "REPEATED", "name": "allowed_services", "type": "STRING" } ], "mode": "NULLABLE", "name": "vpc_accessible_services", "type": "RECORD" }, { "fields": [ { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "access_level", "type": "STRING" }, { "mode": "NULLABLE", "name": "resource", "type": "STRING" } ], "mode": "REPEATED", "name": "sources", "type": "RECORD" }, { "mode": "REPEATED", "name": "identities", "type": "STRING" }, { "mode": "NULLABLE", "name": "identity_type", "type": "INTEGER" } ], "mode": "NULLABLE", "name": "ingress_from", "type": "RECORD" }, { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "service_name", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "method", "type": "STRING" }, { "mode": "NULLABLE", "name": "permission", "type": "STRING" } ], "mode": "REPEATED", "name": "method_selectors", "type": "RECORD" } ], "mode": "REPEATED", "name": "operations", "type": "RECORD" }, { "mode": "REPEATED", "name": "resources", "type": "STRING" } ], "mode": "NULLABLE", "name": "ingress_to", "type": "RECORD" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" } ], "mode": "REPEATED", "name": "ingress_policies", "type": "RECORD" }, { "fields": [ { "fields": [ { "mode": "REPEATED", "name": "identities", "type": "STRING" }, { "mode": "NULLABLE", "name": "identity_type", "type": "INTEGER" }, { "fields": [ { "mode": "NULLABLE", "name": "access_level", "type": "STRING" }, { "mode": "NULLABLE", "name": "resource", "type": "STRING" } ], "mode": "REPEATED", "name": "sources", "type": "RECORD" }, { "mode": "NULLABLE", "name": "source_restriction", "type": "INTEGER" } ], "mode": "NULLABLE", "name": "egress_from", "type": "RECORD" }, { "fields": [ { "mode": "REPEATED", "name": "resources", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "service_name", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "method", "type": "STRING" }, { "mode": "NULLABLE", "name": "permission", "type": "STRING" } ], "mode": "REPEATED", "name": "method_selectors", "type": "RECORD" } ], "mode": "REPEATED", "name": "operations", "type": "RECORD" }, { "mode": "REPEATED", "name": "external_resources", "type": "STRING" } ], "mode": "NULLABLE", "name": "egress_to", "type": "RECORD" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" } ], "mode": "REPEATED", "name": "egress_policies", "type": "RECORD" } ], "mode": "NULLABLE", "name": "spec", "type": "RECORD" }, { "mode": "NULLABLE", "name": "use_explicit_dry_run_spec", "type": "BOOLEAN" }, { "mode": "NULLABLE", "name": "etag", "type": "STRING" } ], "mode": "NULLABLE", "name": "service_perimeter", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "authorization_type", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "asset_type", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "authorization_direction", "type": "INTEGER" }, { "mode": "REPEATED", "name": "orgs", "type": "STRING" } ], "mode": "NULLABLE", "name": "authorized_orgs_desc", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
Inventário de instâncias do OSConfig: quando define o tipo de conteúdo como
OS_INVENTORY
na API REST ouos-inventory
na CLI gcloud, cria uma tabela do BigQuery com o seguinte esquema.Esquema de inventário do SO
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "hostname", "type": "STRING" }, { "mode": "NULLABLE", "name": "long_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "short_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "kernel_version", "type": "STRING" }, { "mode": "NULLABLE", "name": "kernel_release", "type": "STRING" }, { "mode": "NULLABLE", "name": "osconfig_agent_version", "type": "STRING" } ], "mode": "NULLABLE", "name": "os_info", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "key", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "id", "type": "STRING" }, { "mode": "NULLABLE", "name": "origin_type", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "create_time", "type": "TIMESTAMP" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" }, { "mode": "NULLABLE", "name": "type", "type": "INTEGER" }, { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "yum_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "apt_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "zypper_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "googet_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "patch_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "category", "type": "STRING" }, { "mode": "NULLABLE", "name": "severity", "type": "STRING" }, { "mode": "NULLABLE", "name": "summary", "type": "STRING" } ], "mode": "NULLABLE", "name": "zypper_patch", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "id", "type": "STRING" }, { "mode": "NULLABLE", "name": "name", "type": "STRING" } ], "mode": "REPEATED", "name": "categories", "type": "RECORD" }, { "mode": "REPEATED", "name": "kb_article_ids", "type": "STRING" }, { "mode": "NULLABLE", "name": "support_url", "type": "STRING" }, { "mode": "REPEATED", "name": "more_info_urls", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_id", "type": "STRING" }, { "mode": "NULLABLE", "name": "revision_number", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "last_deployment_change_time", "type": "TIMESTAMP" } ], "mode": "NULLABLE", "name": "wua_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "caption", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "mode": "NULLABLE", "name": "hot_fix_id", "type": "STRING" }, { "mode": "NULLABLE", "name": "install_time", "type": "TIMESTAMP" } ], "mode": "NULLABLE", "name": "qfe_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "cos_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "display_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "display_version", "type": "STRING" }, { "mode": "NULLABLE", "name": "publisher", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "year", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "month", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "day", "type": "INTEGER" } ], "mode": "NULLABLE", "name": "install_date", "type": "RECORD" }, { "mode": "NULLABLE", "name": "help_link", "type": "STRING" } ], "mode": "NULLABLE", "name": "windows_application", "type": "RECORD" } ], "mode": "NULLABLE", "name": "installed_package", "type": "RECORD" }, { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "yum_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "apt_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "zypper_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "googet_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "patch_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "category", "type": "STRING" }, { "mode": "NULLABLE", "name": "severity", "type": "STRING" }, { "mode": "NULLABLE", "name": "summary", "type": "STRING" } ], "mode": "NULLABLE", "name": "zypper_patch", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "id", "type": "STRING" }, { "mode": "NULLABLE", "name": "name", "type": "STRING" } ], "mode": "REPEATED", "name": "categories", "type": "RECORD" }, { "mode": "REPEATED", "name": "kb_article_ids", "type": "STRING" }, { "mode": "NULLABLE", "name": "support_url", "type": "STRING" }, { "mode": "REPEATED", "name": "more_info_urls", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_id", "type": "STRING" }, { "mode": "NULLABLE", "name": "revision_number", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "last_deployment_change_time", "type": "TIMESTAMP" } ], "mode": "NULLABLE", "name": "wua_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "caption", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "mode": "NULLABLE", "name": "hot_fix_id", "type": "STRING" }, { "mode": "NULLABLE", "name": "install_time", "type": "TIMESTAMP" } ], "mode": "NULLABLE", "name": "qfe_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "package_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "architecture", "type": "STRING" }, { "mode": "NULLABLE", "name": "version", "type": "STRING" } ], "mode": "NULLABLE", "name": "cos_package", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "display_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "display_version", "type": "STRING" }, { "mode": "NULLABLE", "name": "publisher", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "year", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "month", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "day", "type": "INTEGER" } ], "mode": "NULLABLE", "name": "install_date", "type": "RECORD" }, { "mode": "NULLABLE", "name": "help_link", "type": "STRING" } ], "mode": "NULLABLE", "name": "windows_application", "type": "RECORD" } ], "mode": "NULLABLE", "name": "available_package", "type": "RECORD" } ], "mode": "NULLABLE", "name": "value", "type": "RECORD" } ], "mode": "REPEATED", "name": "items", "type": "RECORD" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ], "mode": "NULLABLE", "name": "os_inventory", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
Relação: quando define o tipo de conteúdo como
RELATIONSHIP
na API REST ourelationship
na CLI gcloud, cria uma tabela do BigQuery com o seguinte esquema.Esquema de relação
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "asset", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "relationship_type", "type": "STRING" } ], "mode": "NULLABLE", "name": "related_asset", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
Exporte um resumo de recursos
gcloud
gcloud asset export \ --SCOPE \ --billing-project=BILLING_PROJECT_ID \ --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \ --content-type=CONTENT_TYPE \ --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \ --snapshot-time="SNAPSHOT_TIME" \ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \ --output-bigquery-force
Indique os seguintes valores:
-
SCOPE
: use um dos seguintes valores:-
project=PROJECT_ID
, ondePROJECT_ID
é o ID do projeto que tem os metadados dos recursos que quer exportar. -
folder=FOLDER_ID
, ondeFOLDER_ID
é o ID da pasta que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud pasta
Google Cloud consola
Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.
CLI gcloud
Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"
Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag
--format
para ver mais informações sobre as pastas encontradas.O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, ondeORGANIZATION_ID
é o ID da organização que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud organização
Google Cloud consola
Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.
CLI gcloud
Pode obter o ID de uma Google Cloud organização com o seguinte comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: opcional. O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação. ASSET_TYPE_#
: opcional. Uma lista separada por vírgulas de tipos de recursos pesquisáveis. As expressões regulares compatíveis com RE2 são suportadas. Se a expressão regular não corresponder a nenhum tipo de recurso suportado, é devolvido um erroINVALID_ARGUMENT
. Quando--asset-types
não é especificado, são devolvidos todos os tipos de recursos.CONTENT_TYPE
: opcional. O tipo de conteúdo dos metadados que quer obter. Quando--content-type
não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.-
RELATIONSHIP_TYPE_#
: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definirCONTENT_TYPE
comoRELATIONSHIP
para que isto funcione. -
SNAPSHOT_TIME
: opcional. A hora em que quer tirar uma captura instantânea dos seus recursos, no formato de data/hora do tópico gcloud. O valor não pode ser superior a 35 dias no passado. Quando--snapshot-time
não é especificado, é tirado um instantâneo na hora atual. -
BIGQUERY_PROJECT_ID
: O ID do projeto em que se encontra a tabela do BigQuery para a qual quer exportar. -
DATASET_ID
: O ID do conjunto de dados do BigQuery. -
TABLE_NAME
: A tabela do BigQuery para a qual está a exportar os metadados. Se não existir, é criado.
A flag --output-bigquery-force
substitui a tabela de destino, se existir.
Consulte a referência da CLI gcloud para ver todas as opções.
Exemplo
Execute o seguinte comando para exportar os seus metadados do resource
tal como estavam a 30 de janeiro de 2024 no projeto my-project
para a tabela do BigQuery my-table
.
gcloud asset export \ --project=my-project \ --content-type=resource \ --snapshot-time="2024-01-30" \ --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \ --output-bigquery-force
Exemplo de resposta
Export in progress for root asset [projects/my-project]. Use [gcloud asset operations describe projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000] to check the status of the operation.
REST
Método HTTP e URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Cabeçalhos:
X-Goog-User-Project: BILLING_PROJECT_ID
Corpo JSON do pedido:
{ "assetTypes": [ "ASSET_TYPE_1", "ASSET_TYPE_2", "..." ], "contentType": "CONTENT_TYPE", "relationshipTypes": [ "RELATIONSHIP_TYPE_1", "RELATIONSHIP_TYPE_2", "..." ], "readTime": "SNAPSHOT_TIME", "outputConfig": { "bigqueryDestination": { "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID", "table": "TABLE_NAME", "force": true } } }
Indique os seguintes valores:
-
SCOPE_PATH
: use um dos seguintes valores:Os valores permitidos são:
-
projects/PROJECT_ID
, ondePROJECT_ID
é o ID do projeto que tem os metadados dos recursos que quer exportar. -
projects/PROJECT_NUMBER
, ondePROJECT_NUMBER
é o número do projeto que tem os metadados dos recursos que quer exportar.Como encontrar um Google Cloud número do projeto
Google Cloud consola
Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:
-
Aceda à página Boas-vindas na Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
-
Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.
São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.
CLI gcloud
Pode obter um Google Cloud número do projeto com o seguinte comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, ondeFOLDER_ID
é o ID da pasta que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud pasta
Google Cloud consola
Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.
CLI gcloud
Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"
Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag
--format
para ver mais informações sobre as pastas encontradas.O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, ondeORGANIZATION_ID
é o ID da organização que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud organização
Google Cloud consola
Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.
CLI gcloud
Pode obter o ID de uma Google Cloud organização com o seguinte comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: O ID do projeto em que o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação. ASSET_TYPE_#
: opcional. Uma matriz de tipos de recursos pesquisáveis. As expressões regulares compatíveis com RE2 são suportadas. Se a expressão regular não corresponder a nenhum tipo de recurso suportado, é devolvido um erroINVALID_ARGUMENT
. QuandoassetTypes
não é especificado, são devolvidos todos os tipos de recursos.CONTENT_TYPE
: opcional. O tipo de conteúdo dos metadados que quer obter. QuandocontentType
não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.-
RELATIONSHIP_TYPE_#
: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definirCONTENT_TYPE
comoRELATIONSHIP
para que isto funcione. -
SNAPSHOT_TIME
: opcional. A hora em que quer tirar uma captura instantânea dos seus recursos, no formato RFC 3339. O valor não pode ser superior a 35 dias no passado. QuandoreadTime
não é especificado, é tirado um instantâneo na hora atual. -
BIGQUERY_PROJECT_ID
: O ID do projeto em que se encontra a tabela do BigQuery para a qual quer exportar. -
DATASET_ID
: O ID do conjunto de dados do BigQuery. -
TABLE_NAME
: A tabela do BigQuery para a qual está a exportar os metadados. Se não existir, é criado.
O par de chave-valor "force": true
substitui a tabela de destino, se existir.
Consulte a referência REST para ver todas as opções.
Exemplos de comandos
Execute um dos seguintes comandos para exportar os seus metadados resource
tal como estavam a 30 de janeiro de 2024 no projeto my-project
para a tabela do BigQuery my-table
.
curl (Linux, macOS ou 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 '{ "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "force": true } } }' \ https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "force": true } } } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets" | Select-Object -Expand Content
Exemplo de resposta
{ "name": "projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000", "metadata": { "@type": "type.googleapis.com/google.cloud.asset.v1.ExportAssetsRequest", "parent": "projects/000000000000", "readTime": "2024-01-30T00:00:00Z", "contentType": "RESOURCE", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "force": true } } } }
Ir
Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.
Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Java
Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.
Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.
Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente do Cloud Asset Inventory, consulte o artigo Bibliotecas de cliente do Cloud Asset Inventory.
Para se autenticar no Cloud Asset Inventory, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Exporte uma imagem instantânea de recursos para tabelas separadas para cada tipo de recurso
Pode exportar recursos para tabelas do BigQuery separadas para cada tipo de recurso com a flag --per-asset-type
na CLI gcloud e "separateTablesPerAssetType": true
em pedidos da API REST. Não é possível exportar o tipo de conteúdo RELATIONSHIP
desta forma.
Neste modo, o nome de cada tabela é TABLE_NAME
concatenado
com _
(sublinhado) e o nome do tipo de recurso. Os carateres não alfanuméricos são
substituídos por _
.
Se a exportação para qualquer tabela falhar, toda a operação de exportação falha e devolve o primeiro erro. Os resultados das exportações bem-sucedidas anteriores persistem.
Os seguintes tipos estão incluídos numa string JSON para resolver um problema de compatibilidade entre o Proto3 e os tipos do BigQuery.
google.protobuf.Timestamp
google.protobuf.Duration
google.protobuf.FieldMask
google.protobuf.ListValue
google.protobuf.Value
google.protobuf.Struct
google.api.*
gcloud
gcloud asset export \ --SCOPE \ --billing-project=BILLING_PROJECT_ID \ --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \ --content-type=CONTENT_TYPE \ --snapshot-time="SNAPSHOT_TIME" \ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \ --per-asset-type \ --output-bigquery-force
Indique os seguintes valores:
-
SCOPE
: use um dos seguintes valores:-
project=PROJECT_ID
, ondePROJECT_ID
é o ID do projeto que tem os metadados dos recursos que quer exportar. -
folder=FOLDER_ID
, ondeFOLDER_ID
é o ID da pasta que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud pasta
Google Cloud consola
Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.
CLI gcloud
Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"
Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag
--format
para ver mais informações sobre as pastas encontradas.O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, ondeORGANIZATION_ID
é o ID da organização que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud organização
Google Cloud consola
Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.
CLI gcloud
Pode obter o ID de uma Google Cloud organização com o seguinte comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: opcional. O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação. ASSET_TYPE_#
: opcional. Uma lista separada por vírgulas de tipos de recursos pesquisáveis. As expressões regulares compatíveis com RE2 são suportadas. Se a expressão regular não corresponder a nenhum tipo de recurso suportado, é devolvido um erroINVALID_ARGUMENT
. Quando--asset-types
não é especificado, são devolvidos todos os tipos de recursos.-
CONTENT_TYPE
: opcional. O tipo de conteúdo dos metadados que quer obter. Não é possível usar o tipo de conteúdoRELATIONSHIP
com--per-asset-type
.Quando
--content-type
não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem. -
SNAPSHOT_TIME
: opcional. A hora em que quer tirar uma captura instantânea dos seus recursos, no formato de data/hora do tópico gcloud. O valor não pode ser superior a 35 dias no passado. Quando--snapshot-time
não é especificado, é tirado um instantâneo na hora atual. -
BIGQUERY_PROJECT_ID
: O ID do projeto em que se encontra a tabela do BigQuery para a qual quer exportar. -
DATASET_ID
: O ID do conjunto de dados do BigQuery. -
TABLE_NAME
: O prefixo das tabelas do BigQuery para as quais está a exportar os metadados. Os nomes completos das tabelas são o prefixo concatenado com_
e o tipo de recurso.
A flag --output-bigquery-force
substitui a tabela de destino, se existir.
Consulte a referência da CLI gcloud para ver todas as opções.
Exemplo
Execute o seguinte comando para exportar os metadados do resource
tal como estavam a 30 de janeiro de 2024 no projeto my-project
para várias tabelas do BigQuery que tenham my-table
como prefixo.
gcloud asset export \ --project=my-project \ --content-type=resource \ --snapshot-time="2024-01-30" \ --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \ --per-asset-type \ --output-bigquery-force
REST
Método HTTP e URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Cabeçalhos:
X-Goog-User-Project: BILLING_PROJECT_ID
Corpo JSON do pedido:
{ "assetTypes": [ "ASSET_TYPE_1", "ASSET_TYPE_2", "..." ], "contentType": "CONTENT_TYPE", "readTime": "SNAPSHOT_TIME", "outputConfig": { "bigqueryDestination": { "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID", "table": "TABLE_NAME", "force": true, "separateTablesPerAssetType": true } } }
Indique os seguintes valores:
-
SCOPE_PATH
: use um dos seguintes valores:Os valores permitidos são:
-
projects/PROJECT_ID
, ondePROJECT_ID
é o ID do projeto que tem os metadados dos recursos que quer exportar. -
projects/PROJECT_NUMBER
, ondePROJECT_NUMBER
é o número do projeto que tem os metadados dos recursos que quer exportar.Como encontrar um Google Cloud número do projeto
Google Cloud consola
Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:
-
Aceda à página Boas-vindas na Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
-
Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.
São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.
CLI gcloud
Pode obter um Google Cloud número do projeto com o seguinte comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, ondeFOLDER_ID
é o ID da pasta que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud pasta
Google Cloud consola
Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.
CLI gcloud
Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"
Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag
--format
para ver mais informações sobre as pastas encontradas.O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, ondeORGANIZATION_ID
é o ID da organização que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud organização
Google Cloud consola
Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.
CLI gcloud
Pode obter o ID de uma Google Cloud organização com o seguinte comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: O ID do projeto em que o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação. ASSET_TYPE_#
: opcional. Uma matriz de tipos de recursos pesquisáveis. As expressões regulares compatíveis com RE2 são suportadas. Se a expressão regular não corresponder a nenhum tipo de recurso suportado, é devolvido um erroINVALID_ARGUMENT
. QuandoassetTypes
não é especificado, são devolvidos todos os tipos de recursos.-
CONTENT_TYPE
: opcional. O tipo de conteúdo dos metadados que quer obter. Não é possível usar o tipo de conteúdoRELATIONSHIP
com"separateTablesPerAssetType": true
.Quando
contentType
não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem. -
SNAPSHOT_TIME
: opcional. A hora em que quer tirar uma captura instantânea dos seus recursos, no formato RFC 3339. O valor não pode ser superior a 35 dias no passado. QuandoreadTime
não é especificado, é tirado um instantâneo na hora atual. -
BIGQUERY_PROJECT_ID
: O ID do projeto em que se encontra a tabela do BigQuery para a qual quer exportar. -
DATASET_ID
: O ID do conjunto de dados do BigQuery. -
TABLE_NAME
: O prefixo das tabelas do BigQuery para as quais está a exportar os metadados. Os nomes completos das tabelas são o prefixo concatenado com_
e o tipo de recurso.
O par de chave-valor "force": true
substitui a tabela de destino, se existir.
Exemplos de comandos
Execute um dos seguintes comandos para exportar os metadados de resource
tal como estavam a 30 de janeiro de 2024 no projeto my-project
para várias tabelas do BigQuery que têm my-table
como prefixo.
curl (Linux, macOS ou 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 '{ "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "force": true, "separateTablesPerAssetType": true } } }' \ https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "force": true, "separateTablesPerAssetType": true } } } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets" | Select-Object -Expand Content
Exporte um resumo de recursos para uma tabela particionada por colunas de unidades de tempo
Pode exportar recursos num projeto para tabelas particionadas por colunas de unidades de tempo.
A imagem instantânea exportada é armazenada numa tabela do BigQuery denominada
TABLE_NAME
com granularidade diária e duas colunas de data/hora adicionais, readTime
e requestTime
, uma das quais especifica como a coluna de partição com o valor PARTITION_KEY
.
Para exportar recursos num projeto para tabelas particionadas, faça um dos seguintes pedidos.
gcloud
gcloud asset export \ --SCOPE \ --billing-project=BILLING_PROJECT_ID \ --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \ --content-type=CONTENT_TYPE \ --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \ --snapshot-time="SNAPSHOT_TIME" \ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \ --partition-key=PARTITION_KEY \ --output-bigquery-force
Indique os seguintes valores:
-
SCOPE
: use um dos seguintes valores:-
project=PROJECT_ID
, ondePROJECT_ID
é o ID do projeto que tem os metadados dos recursos que quer exportar. -
folder=FOLDER_ID
, ondeFOLDER_ID
é o ID da pasta que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud pasta
Google Cloud consola
Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.
CLI gcloud
Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"
Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag
--format
para ver mais informações sobre as pastas encontradas.O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, ondeORGANIZATION_ID
é o ID da organização que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud organização
Google Cloud consola
Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.
CLI gcloud
Pode obter o ID de uma Google Cloud organização com o seguinte comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: opcional. O ID do projeto no qual o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação. ASSET_TYPE_#
: opcional. Uma lista separada por vírgulas de tipos de recursos pesquisáveis. As expressões regulares compatíveis com RE2 são suportadas. Se a expressão regular não corresponder a nenhum tipo de recurso suportado, é devolvido um erroINVALID_ARGUMENT
. Quando--asset-types
não é especificado, são devolvidos todos os tipos de recursos.CONTENT_TYPE
: opcional. O tipo de conteúdo dos metadados que quer obter. Quando--content-type
não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.-
RELATIONSHIP_TYPE_#
: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definirCONTENT_TYPE
comoRELATIONSHIP
para que isto funcione. -
SNAPSHOT_TIME
: opcional. A hora em que quer tirar uma captura instantânea dos seus recursos, no formato de data/hora do tópico gcloud. O valor não pode ser superior a 35 dias no passado. Quando--snapshot-time
não é especificado, é tirado um instantâneo na hora atual. -
BIGQUERY_PROJECT_ID
: O ID do projeto em que se encontra a tabela do BigQuery para a qual quer exportar. -
DATASET_ID
: O ID do conjunto de dados do BigQuery. -
TABLE_NAME
: A tabela do BigQuery para a qual está a exportar os metadados. Se não existir, é criado. -
PARTITION_KEY
: a coluna da chave de partição quando exporta para tabelas particionadas do BigQuery. Os valores válidos sãoread-time
erequest-time
.
A flag --output-bigquery-force
substitui os dados na partição correspondente na tabela de destino. Os dados em partições diferentes permanecem intactos.
Se --output-bigquery-force
não for especificado, os dados exportados são anexados à partição correspondente.
A operação de exportação falha se uma atualização do esquema ou uma tentativa de anexar dados falhar. Isto inclui se a tabela de destino já existir e não tiver o esquema que a exportação espera.
Consulte a referência da CLI gcloud para ver todas as opções.
Exemplo
Execute o seguinte comando para exportar os seus metadados do resource
tal como estavam a 30 de janeiro de 2024 no projeto my-project
para a tabela do BigQuery my-table
.
gcloud asset export \ --project=projects/my-project \ --content-type=resource \ --snapshot-time="2024-01-30" \ --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \ --partition-key=my-partition-key \ --output-bigquery-force
REST
Método HTTP e URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Cabeçalhos:
X-Goog-User-Project: BILLING_PROJECT_ID
Corpo JSON do pedido:
{ "assetTypes": [ "ASSET_TYPE_1", "ASSET_TYPE_2", "..." ], "contentType": "CONTENT_TYPE", "relationshipTypes": [ "RELATIONSHIP_TYPE_1", "RELATIONSHIP_TYPE_2", "..." ], "readTime": "SNAPSHOT_TIME", "outputConfig": { "bigqueryDestination": { "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID", "table": "TABLE_NAME", "partitionSpec": { "partitionKey": "PARTITION_KEY" }, "force": true, } } }
Indique os seguintes valores:
-
SCOPE_PATH
: use um dos seguintes valores:Os valores permitidos são:
-
projects/PROJECT_ID
, ondePROJECT_ID
é o ID do projeto que tem os metadados dos recursos que quer exportar. -
projects/PROJECT_NUMBER
, ondePROJECT_NUMBER
é o número do projeto que tem os metadados dos recursos que quer exportar.Como encontrar um Google Cloud número do projeto
Google Cloud consola
Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:
-
Aceda à página Boas-vindas na Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
-
Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.
São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.
CLI gcloud
Pode obter um Google Cloud número do projeto com o seguinte comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, ondeFOLDER_ID
é o ID da pasta que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud pasta
Google Cloud consola
Para encontrar o ID de uma Google Cloud pasta, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Pesquise o nome da pasta. O ID da pasta é apresentado junto ao nome da pasta.
CLI gcloud
Pode obter o ID de uma Google Cloud pasta localizada ao nível da organização com o seguinte 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)"
Onde TOP_LEVEL_FOLDER_NAME é uma correspondência de string parcial ou completa para o nome da pasta. Remova a flag
--format
para ver mais informações sobre as pastas encontradas.O comando anterior não devolve os IDs das subpastas dentro das pastas. Para tal, execute o seguinte comando com o ID de uma pasta de nível superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, ondeORGANIZATION_ID
é o ID da organização que tem os metadados dos recursos que quer exportar.Como encontrar o ID de uma Google Cloud organização
Google Cloud consola
Para encontrar o ID de uma Google Cloud organização, conclua os seguintes passos:
-
Aceda à Google Cloud consola.
- Clique na caixa de lista do comutador na barra de menu.
- Selecione a sua organização na caixa de lista.
- Clique no separador Tudo. O ID da organização é apresentado junto ao nome da organização.
CLI gcloud
Pode obter o ID de uma Google Cloud organização com o seguinte comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: O ID do projeto em que o agente de serviço do Cloud Asset Inventory predefinido tem autorizações para gerir os seus conjuntos de dados e tabelas do BigQuery. Leia mais sobre como definir o projeto de faturação. ASSET_TYPE_#
: opcional. Uma matriz de tipos de recursos pesquisáveis. As expressões regulares compatíveis com RE2 são suportadas. Se a expressão regular não corresponder a nenhum tipo de recurso suportado, é devolvido um erroINVALID_ARGUMENT
. QuandoassetTypes
não é especificado, são devolvidos todos os tipos de recursos.CONTENT_TYPE
: opcional. O tipo de conteúdo dos metadados que quer obter. QuandocontentType
não é especificado, apenas são devolvidas informações básicas, como os nomes dos recursos, a última vez que os recursos foram atualizados e a que projetos, pastas e organizações pertencem.-
RELATIONSHIP_TYPE_#
: opcional. Requer acesso ao nível Premium ou Enterprise do Security Command Center, ou ao Gemini Cloud Assist. Uma lista separada por vírgulas dos tipos de relações de recursos que quer obter. Tem de definirCONTENT_TYPE
comoRELATIONSHIP
para que isto funcione. -
SNAPSHOT_TIME
: opcional. A hora em que quer tirar uma captura instantânea dos seus recursos, no formato RFC 3339. O valor não pode ser superior a 35 dias no passado. QuandoreadTime
não é especificado, é tirado um instantâneo na hora atual. -
BIGQUERY_PROJECT_ID
: O ID do projeto em que se encontra a tabela do BigQuery para a qual quer exportar. -
DATASET_ID
: O ID do conjunto de dados do BigQuery. -
TABLE_NAME
: A tabela do BigQuery para a qual está a exportar os metadados. Se não existir, é criado. -
PARTITION_KEY
: a coluna da chave de partição quando exporta para tabelas particionadas do BigQuery. Os valores válidos sãoREAD_TIME
eREQUEST_TIME
.
O par de chave-valor "force": true
substitui os dados na partição correspondente na tabela de destino. Os dados em partições diferentes permanecem intactos.
Se force
não estiver definido ou estiver definido como false
, os dados exportados são anexados à partição correspondente.
A operação de exportação falha se uma atualização do esquema ou uma tentativa de anexar dados falhar. Isto inclui se a tabela de destino já existir e não tiver o esquema que a exportação espera.
Exemplos de comandos
Execute um dos seguintes comandos para exportar os seus metadados resource
tal como estavam a 30 de janeiro de 2024 no projeto my-project
para a tabela do BigQuery my-table
.
curl (Linux, macOS ou 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 '{ "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "partitionSpec": { "partitionKey": "my-partition-key" }, "force": true, } } }' \ https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "partitionSpec": { "partitionKey": "my-partition-key" }, "force": true, } } } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets" | Select-Object -Expand Content
Verifique o estado de uma exportação
As exportações demoram algum tempo a concluir. Para verificar se uma exportação está concluída, pode consultar a operação através do respetivo ID da operação.
Tenha em atenção que, mesmo que a exportação esteja concluída, alguém pode ter feito outro pedido de exportação para o mesmo destino como uma operação diferente. Podem ser feitos novos pedidos de exportação para o mesmo destino após a conclusão de um pedido anterior ou se tiverem decorrido mais de 15 minutos. Os pedidos de exportação feitos fora destas condições são rejeitados pelo Cloud Asset Inventory.
gcloud
Para ver o estado da exportação, siga estas instruções:
Obtenha o
OPERATION_PATH
, que inclui o ID da operação, na resposta ao seu pedido de exportação. O elementoOPERATION_PATH
é apresentado na resposta à exportação, que está formatada da seguinte forma:projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
Para verificar o estado da exportação, execute o seguinte comando com o parâmetro
OPERATION_PATH
:gcloud asset operations describe OPERATION_PATH
REST
Para ver o estado da exportação, siga estas instruções:
Obtenha o
OPERATION_PATH
, que inclui o ID da operação, na resposta ao seu pedido de exportação. O elementoOPERATION_PATH
é apresentado como o valor do camponame
na resposta à exportação, que está formatada da seguinte forma:projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
Para verificar o estado da exportação, faça o seguinte pedido.
REST
Método HTTP e URL:
GET https://cloudasset.googleapis.com/v1/OPERATION_PATH
Exemplos de comandos
curl (Linux, macOS ou Cloud Shell)
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://cloudasset.googleapis.com/v1/OPERATION_PATH
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://cloudasset.googleapis.com/v1/OPERATION_PATH" | Select-Object -Expand Content
Veja uma imagem instantânea de um recurso no BigQuery
Consola
Aceda à página BigQuery Studio na Google Cloud consola.
Para apresentar as tabelas e as vistas no conjunto de dados, abra o painel de navegação. Na secção Recursos, selecione o seu projeto para o expandir e, em seguida, selecione um conjunto de dados.
Na lista, selecione a tabela.
Selecione Detalhes e tome nota do valor em Número de linhas. Pode precisar deste valor para controlar o ponto de partida dos seus resultados através da CLI gcloud ou da API REST.
Para ver um conjunto de dados de amostra, selecione Pré-visualizar.
REST
Para procurar os dados da tabela, ligue para
tabledata.list
. No parâmetro tableId
, especifique o nome da tabela.
Pode configurar os seguintes parâmetros opcionais para controlar o resultado.
maxResults
é o número máximo de resultados a devolver.selectedFields
é uma lista de colunas separadas por vírgulas a devolver; se não for especificado, são devolvidas todas as colunas.startIndex
é o índice baseado em zero da linha inicial a ler.
Os valores são devolvidos envolvidos num objeto JSON que tem de analisar, conforme descrito na documentação de referência tabledata.list
.
Consultar uma imagem instantânea de um recurso no BigQuery
Depois de exportar a sua imagem instantânea para o BigQuery, pode executar consultas nos metadados dos seus recursos.
Por predefinição, o BigQuery executa tarefas de consulta interativas ou a pedido, o que significa que a consulta é executada assim que possível. As consultas interativas contam para o seu limite de taxa concorrente e limite diário.
Os resultados da consulta são guardados numa tabela temporária ou permanente. Pode optar por anexar ou substituir dados numa tabela existente ou criar uma nova tabela, se não existir nenhuma com o mesmo nome.
Para executar uma consulta interativa que escreve o resultado numa tabela temporária, conclua os seguintes passos.
Consola
Aceda à página BigQuery Studio na Google Cloud consola.
Selecione
Compor nova consulta.Na área de texto do editor de consultas, introduza uma consulta SQL do BigQuery válida.
Opcional: para alterar a localização de tratamento de dados, conclua os passos seguintes.
Selecione Mais e, de seguida, Definições de consulta.
Em Localização de processamento, selecione Selecionar automaticamente e, de seguida, escolha a localização dos seus dados.
Para atualizar as definições da consulta, selecione Guardar.
Selecione Executar.
REST
Para iniciar uma nova tarefa, chame o método
jobs.insert
. No recurso job, defina os seguintes parâmetros.No campo
configuration
, defina o campoquery
como um JobConfigurationQuery que descreve a tarefa de consulta do BigQuery.No campo
jobReference
, defina o campolocation
adequadamente para o seu trabalho.
Para sondar os resultados, chame
getQueryResults
. A sondagem atéjobComplete
é igual atrue
. Pode verificar se existem erros e avisos na listaerrors
.
Exemplos adicionais de consultas SQL
Esta secção fornece exemplos de consultas SQL para analisar os metadados dos seus recursos depois de os exportar para o BigQuery. Consulte a sintaxe de consulta SQL padrão para mais informações.
Consultar colunas disponíveis diretamente
Para encontrar a quantidade de cada tipo de recurso, execute a seguinte consulta:
SELECT asset_type, COUNT(*) AS asset_count
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
GROUP BY asset_type
ORDER BY asset_count DESC
Trabalhe com campos repetidos
Para encontrar políticas de gestão de identidade e de acesso (IAM) que concedam acesso a contas do Gmail, execute a seguinte consulta. O BigQuery usa UNNEST
para
reduzir
campos repetidos numa tabela
que pode consultar diretamente:
SELECT name, asset_type, bindings.role
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
JOIN UNNEST(iam_policy.bindings) AS bindings
JOIN UNNEST(bindings.members) AS principals
WHERE principals like "%@gmail.com"
Para encontrar uma organização, uma pasta ou um projeto que permita a criação através de um endereço IP público, execute a seguinte consulta. Esta consulta é útil porque permitir endereços IP públicos com instâncias do Cloud SQL pode introduzir vulnerabilidades, a menos que o SSL ou um proxy esteja configurado:
SELECT name
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
JOIN UNNEST(org_policy) AS op
WHERE
op.constraint = "constraints/sql.restrictPublicIp"
AND (op.boolean_policy IS NULL OR op.boolean_policy.enforced = FALSE);
Para encontrar uma organização, uma pasta ou um projeto no mesmo perímetro de serviço do VPC Service Controls de um projeto, execute a seguinte consulta:
SELECT service_perimeter.title, service_perimeter.status.resources
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
CROSS JOIN UNNEST(service_perimeter.status.resources) as resource
WHERE resource = "projects/PROJECT_ID";
Trabalhe com strings JSON
Para encontrar regras de firewall abertas, execute a seguinte consulta. Saiba mais sobre as funções JSON usadas no BigQuery.
CREATE TEMP FUNCTION json2array(json STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
return JSON.parse(json).map(x=>JSON.stringify(x));
""";
SELECT firewall.name, firewall.resource.parent, JSON_EXTRACT(firewall.resource.data, '$.sourceRanges') AS sourceRanges
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME` AS firewall
JOIN UNNEST(json2array(JSON_EXTRACT(firewall.resource.data, '$.sourceRanges'))) AS source_ranges
WHERE asset_type="compute.googleapis.com/Firewall" AND JSON_EXTRACT(firewall.resource.data, '$.sourceRanges') IS NOT NULL AND JSON_EXTRACT_SCALAR(source_ranges, '$') = "0.0.0.0/0"
Ao separar as tabelas para cada tipo de recurso, pode encontrar regras de firewall abertas com uma consulta mais fácil e rápida.
SELECT firewall.name, firewall.resource.parent, sourceRanges
FROM `PROJECT_ID.DATASET_ID.STRUCTURED_INSTANCE_TABLE_NAME` AS firewall
JOIN UNNEST(firewall.resource.data.sourceRanges) AS sourceRanges
WHERE sourceRanges = "0.0.0.0/0";
Junte tabelas de diferentes tipos de recursos
Para juntar tabelas de diferentes tipos de recursos, execute a seguinte consulta. O exemplo seguinte mostra como encontrar todas as sub-redes que não têm nenhuma VM anexada.
Primeiro, a consulta encontra todas as subredes. Em seguida, nessa lista, seleciona as sub-redes cujos valores de selfLink
não estão presentes.
CREATE TEMP FUNCTION json2array(json STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
return JSON.parse(json).map(x=>JSON.stringify(x));
""";
SELECT name, JSON_EXTRACT(subnetwork.resource.data, '$.selfLink') AS selflink
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME` AS subnetwork
WHERE asset_type = "compute.googleapis.com/Subnetwork" AND (JSON_EXTRACT(subnetwork.resource.data, '$.selfLink') NOT IN
(SELECT DISTINCT JSON_EXTRACT(network_interfaces, '$.subnetwork')
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME` as instance
JOIN UNNEST(json2array(JSON_EXTRACT(instance.resource.data, '$.networkInterfaces'))) AS network_interfaces
WHERE asset_type ="compute.googleapis.com/Instance"
AND JSON_EXTRACT(instance.resource.data, '$.networkInterfaces') IS NOT NULL
)) IS NULL
Ao separar tabelas para cada tipo de recurso, pode encontrar todas as sub-redes que não têm nenhuma VM associada com uma consulta mais fácil e rápida.
SELECT name, subnetwork.resource.data.selfLink
FROM `PROJECT_ID.DATASET_ID.STRUCTURED_SUBNETWORK_TABLE_NAME` AS subnetwork
WHERE
(
subnetwork.resource.data.selfLink
NOT IN (
SELECT DISTINCT networkInterface.subnetwork
FROM `PROJECT_ID.DATASET_ID.STRUCTURED_INSTANCE_TABLE_NAME` as instance
JOIN
UNNEST(instance.resource.data.networkInterfaces) AS networkInterface
WHERE
networkInterface IS NOT NULL
)
) IS NULL;
Encontre clusters do Dataproc vulneráveis devido ao CVE-2021-44228
CREATE TEMP FUNCTION vulnerable_version(imageVersion STRING)
RETURNS BOOL
LANGUAGE js AS r"""
const version_regexp = /(?<major>\d+)(?:\.)(?<minor>\d+)(?:\.)?(?<sub>\d+)?/g;
let match = version_regexp.exec(imageVersion);
if(match.groups.major < 1){
return true;
}
if (match.groups.major == 1){
if (match.groups.minor < 3){
return true;
}
if(match.groups.minor == 3 && match.groups.sub < 95){
return true;
}
if(match.groups.minor == 4 && match.groups.sub < 77){
return true;
}
if(match.groups.minor == 5 && match.groups.sub < 53){
return true;
}
}
if (match.groups.major == 2 && match.groups.minor == 0 && match.groups.sub < 27){
return true;
}
return false;
""";
SELECT
c.name,
c.resource.data.projectId AS project_id,
c.resource.data.clusterName AS cluster_name,
c.resource.data.config.softwareConfig.imageVersion AS image_version,
c.resource.data.status.state AS cluster_state,
vulnerable_version(c.resource.data.config.softwareConfig.imageVersion) AS is_vulnerable
FROM
`PROJECT_ID.DATASET_ID.TABLE_NAME_PREFIX_dataproc_googleapis_com_Cluster` c
INNER JOIN `PROJECT_ID.DATASET_ID.TABLE_NAME_PREFIX_cloudresourcemanager_googleapis_com_Project` p
ON p.resource.data.projectId = c.resource.data.projectId
WHERE
c.resource.data.config.softwareConfig.imageVersion IS NOT NULL
AND c.resource.data.status.state = "RUNNING"
AND p.resource.data.lifecycleState = "ACTIVE";