Questo documento mostra come esportare uno snapshot della risorsa dalla tua organizzazione, cartella o progetto in una tabella BigQuery, quindi eseguire l'analisi dei dati sul tuo inventario. BigQuery offre un'esperienza simile a SQL per consentire agli utenti di analizzare i dati e produrre informazioni significative senza l'utilizzo di script personalizzati.
Prima di iniziare
Abilita l'API Cloud Asset Inventory nel progetto da cui stai eseguendo i comandi di Cloud Asset Inventory.
Assicurati che il tuo account disponga del ruolo corretto per chiamare l'API Cloud Asset Inventory. Per le singole autorizzazioni per ogni tipo di chiamata, consulta Autorizzazioni.
Crea un set di dati BigQuery in cui eseguire l'esportazione, se non ne hai già uno.
Limitazioni
Quando esporti i dati delle tabelle BigQuery, non tutti i campi sono supportati da Cloud Asset Inventory.
I campi delle risorse che cambiano di frequente, come
numBytes
,numLongTermBytes
,numPhysicalBytes
enumRows
, potrebbero essere esportati con un valorenull
.L'esportazione in tabelle BigQuery clusterizzate non è supportata.
Le tabelle BigQuery criptate con chiavi Cloud Key Management Service (Cloud KMS) personalizzate non sono supportate.
L'aggiunta dell'output dell'esportazione a una tabella esistente non è supportata, a meno che non esporti in una tabella partizionata. La tabella di destinazione deve essere vuota o devi sovrascriverla. Per sovrascriverlo, utilizza il flag
--output-bigquery-force
con l'interfaccia alla gcloud CLI o"force": true
con l'API REST.I tipi di risorse di Google Kubernetes Engine (GKE), ad eccezione di
container.googleapis.com/Cluster
econtainer.googleapis.com/NodePool
, non sono supportati durante l'esportazione in tabelle separate per ogni tipo di risorsa.Cloud Asset Inventory rifiuta le richieste di esportazione se una richiesta precedente alla stessa destinazione è stata avviata meno di 15 minuti fa ed è ancora in esecuzione. Tuttavia, se il completamento di un'esportazione richiede più di 15 minuti, viene contrassegnata come completata e sono consentite nuove richieste di esportazione nella stessa destinazione.
Il tipo di contenuto
ACCESS_POLICY
può essere esportato solo a livello di organizzazione.Se la tabella in cui stai eseguendo l'esportazione esiste già ed è in corso di esportazione, viene restituito un errore
400
.
Schemi BigQuery utilizzati per l'esportazione
Ogni tabella BigQuery è definita da uno schema che descrive i nomi delle colonne, i tipi di dati e altre informazioni. L'impostazione del tipo di contenuti per un'esportazione determina lo schema della tabella:
Risorsa o non specificata:se imposti il tipo di contenuto su
RESOURCE
o non lo specifichi e imposti il flagper-asset-type
sufalse
o non lo utilizzi, crei una tabella BigQuery con lo schema seguente.Schema delle risorse
[ { "name": "name", "type": "STRING", "mode": "NULLABLE" }, { "name": "asset_type", "type": "STRING", "mode": "NULLABLE" }, { "name": "resource", "type": "RECORD", "mode": "NULLABLE", "fields": [ { "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": "ancestors", "type": "STRING", "mode": "REPEATED" }, { "name": "update_time", "type": "TIMESTAMP", "mode": "NULLABLE" } ]
La colonna
resource.data
è costituita dai metadati della risorsa rappresentati come stringa JSON.Quando imposti il tipo di contenuto su
RESOURCE
o non lo imposti e imposti il flagper-asset-type
sutrue
, crei tabelle separate per ogni tipo di risorsa. Lo schema di ogni tabella include colonne di tipo RECORD mappate ai campi nidificati nel campoResource.data
del tipo di asset (fino ai 15 livelli nidificati supportati da BigQuery). Per le tabelle di esempio, consulta export-assets-examples nella console Google Cloud .Criterio IAM: quando imposti il tipo di contenuto su
IAM_POLICY
nell'API REST o suiam-policy
nella gcloud CLI, crei una tabella BigQuery con lo schema seguente.Schema dei criteri IAM
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "version", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "name": "role", "mode": "NULLABLE", "type": "STRING" }, { "name": "members", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "expression", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "location", "mode": "NULLABLE", "type": "STRING" } ], "name": "condition", "mode": "NULLABLE", "type": "RECORD" } ], "name": "bindings", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "name": "service", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "log_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "exempted_members", "mode": "REPEATED", "type": "STRING" } ], "name": "audit_log_configs", "mode": "REPEATED", "type": "RECORD" } ], "name": "audit_configs", "mode": "REPEATED", "type": "RECORD" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" } ], "name": "iam_policy", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Criteri dell'organizzazione:quando imposti il tipo di contenuto su
ORG_POLICY
nell'API REST o suorg-policy
in gcloud CLI, crei una tabella BigQuery con lo schema seguente.Schema dei criteri dell'organizzazione
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "version", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "constraint", "mode": "NULLABLE", "type": "STRING" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "fields": [ { "name": "allowed_values", "mode": "REPEATED", "type": "STRING" }, { "name": "denied_values", "mode": "REPEATED", "type": "STRING" }, { "name": "all_values", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "suggested_value", "mode": "NULLABLE", "type": "STRING" }, { "name": "inherit_from_parent", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "list_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "enforced", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "boolean_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "_present", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "restore_default", "mode": "NULLABLE", "type": "RECORD" } ], "name": "org_policy", "mode": "REPEATED", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Norme VPCSC: quando imposti il tipo di contenuto su
ACCESS_POLICY
nell'API REST o suaccess-policy
nella gcloud CLI, crei una tabella BigQuery con lo schema seguente.Schema dei criteri VPCSC
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "parent", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "scopes", "mode": "REPEATED", "type": "STRING" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" } ], "name": "access_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "fields": [ { "name": "ip_subnetworks", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "require_screenlock", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_encryption_statuses", "mode": "REPEATED", "type": "INTEGER" }, { "fields": [ { "name": "os_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "minimum_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "require_verified_chrome_os", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "os_constraints", "mode": "REPEATED", "type": "RECORD" }, { "name": "allowed_device_management_levels", "mode": "REPEATED", "type": "INTEGER" }, { "name": "require_admin_approval", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "require_corp_owned", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "device_policy", "mode": "NULLABLE", "type": "RECORD" }, { "name": "required_access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "negate", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "members", "mode": "REPEATED", "type": "STRING" }, { "name": "regions", "mode": "REPEATED", "type": "STRING" } ], "name": "conditions", "mode": "REPEATED", "type": "RECORD" }, { "name": "combining_function", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "basic", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "expression", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "location", "mode": "NULLABLE", "type": "STRING" } ], "name": "expr", "mode": "NULLABLE", "type": "RECORD" } ], "name": "custom", "mode": "NULLABLE", "type": "RECORD" } ], "name": "access_level", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "perimeter_type", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "name": "access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "restricted_services", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "enable_restriction", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_services", "mode": "REPEATED", "type": "STRING" } ], "name": "vpc_accessible_services", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "fields": [ { "name": "access_level", "mode": "NULLABLE", "type": "STRING" }, { "name": "resource", "mode": "NULLABLE", "type": "STRING" } ], "name": "sources", "mode": "REPEATED", "type": "RECORD" }, { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "ingress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "resources", "mode": "REPEATED", "type": "STRING" } ], "name": "ingress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "ingress_policies", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "egress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "external_resources", "mode": "REPEATED", "type": "STRING" } ], "name": "egress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "egress_policies", "mode": "REPEATED", "type": "RECORD" } ], "name": "status", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "name": "access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "restricted_services", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "enable_restriction", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_services", "mode": "REPEATED", "type": "STRING" } ], "name": "vpc_accessible_services", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "fields": [ { "name": "access_level", "mode": "NULLABLE", "type": "STRING" }, { "name": "resource", "mode": "NULLABLE", "type": "STRING" } ], "name": "sources", "mode": "REPEATED", "type": "RECORD" }, { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "ingress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "resources", "mode": "REPEATED", "type": "STRING" } ], "name": "ingress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "ingress_policies", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "egress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "external_resources", "mode": "REPEATED", "type": "STRING" } ], "name": "egress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "egress_policies", "mode": "REPEATED", "type": "RECORD" } ], "name": "spec", "mode": "NULLABLE", "type": "RECORD" }, { "name": "use_explicit_dry_run_spec", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "service_perimeter", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Inventario delle istanze OSConfig: quando imposti il tipo di contenuto su
OS_INVENTORY
nell'API REST o suos-inventory
nella gcloud CLI, crei una tabella BigQuery con lo schema seguente.Schema dell'inventario del sistema operativo
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "hostname", "mode": "NULLABLE", "type": "STRING" }, { "name": "long_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "short_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "kernel_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "kernel_release", "mode": "NULLABLE", "type": "STRING" }, { "name": "osconfig_agent_version", "mode": "NULLABLE", "type": "STRING" } ], "name": "os_info", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "key", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "origin_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "create_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "name": "type", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "yum_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "apt_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "googet_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "patch_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "category", "mode": "NULLABLE", "type": "STRING" }, { "name": "severity", "mode": "NULLABLE", "type": "STRING" }, { "name": "summary", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_patch", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "name", "mode": "NULLABLE", "type": "STRING" } ], "name": "categories", "mode": "REPEATED", "type": "RECORD" }, { "name": "kb_article_ids", "mode": "REPEATED", "type": "STRING" }, { "name": "support_url", "mode": "NULLABLE", "type": "STRING" }, { "name": "more_info_urls", "mode": "REPEATED", "type": "STRING" }, { "name": "update_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "revision_number", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "last_deployment_change_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "wua_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "caption", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "hot_fix_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "install_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "qfe_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "cos_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "display_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "display_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "publisher", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "year", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "month", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "day", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "install_date", "mode": "NULLABLE", "type": "RECORD" }, { "name": "help_link", "mode": "NULLABLE", "type": "STRING" } ], "name": "windows_application", "mode": "NULLABLE", "type": "RECORD" } ], "name": "installed_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "yum_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "apt_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "googet_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "patch_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "category", "mode": "NULLABLE", "type": "STRING" }, { "name": "severity", "mode": "NULLABLE", "type": "STRING" }, { "name": "summary", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_patch", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "name", "mode": "NULLABLE", "type": "STRING" } ], "name": "categories", "mode": "REPEATED", "type": "RECORD" }, { "name": "kb_article_ids", "mode": "REPEATED", "type": "STRING" }, { "name": "support_url", "mode": "NULLABLE", "type": "STRING" }, { "name": "more_info_urls", "mode": "REPEATED", "type": "STRING" }, { "name": "update_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "revision_number", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "last_deployment_change_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "wua_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "caption", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "hot_fix_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "install_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "qfe_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "cos_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "display_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "display_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "publisher", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "year", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "month", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "day", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "install_date", "mode": "NULLABLE", "type": "RECORD" }, { "name": "help_link", "mode": "NULLABLE", "type": "STRING" } ], "name": "windows_application", "mode": "NULLABLE", "type": "RECORD" } ], "name": "available_package", "mode": "NULLABLE", "type": "RECORD" } ], "name": "value", "mode": "NULLABLE", "type": "RECORD" } ], "name": "items", "mode": "REPEATED", "type": "RECORD" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "os_inventory", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Relazione:quando imposti il tipo di contenuto su
RELATIONSHIP
nell'API REST o surelationship
in gcloud CLI, crei una tabella BigQuery con lo schema seguente.Schema delle relazioni
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "asset", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "relationship_type", "mode": "NULLABLE", "type": "STRING" } ], "name": "related_asset", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Esportare uno snapshot di una risorsa
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
Fornisci i seguenti valori:
-
SCOPE
: utilizza uno dei seguenti valori:-
project=PROJECT_ID
, dovePROJECT_ID
è ID del progetto contenente i metadati della risorsa che vuoi esportare. -
folder=FOLDER_ID
, doveFOLDER_ID
è ID della cartella contenente i metadati della risorsa che vuoi esportare.Come trovare l'ID di una cartella Google Cloud
Google Cloud console
Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"
dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag
--format
per visualizzare ulteriori informazioni sulle cartelle trovate.Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il seguente comando utilizzando l'ID di una cartella di primo livello:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, doveORGANIZATION_ID
è l'ID dell'organizzazione che contiene i metadati della risorsa che vuoi esportare.Come trovare l'ID di un'organizzazione Google Cloud
Google Cloud console
Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: facoltativo. L'ID progetto in cui si trova l'agente di servizio dell'Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i set di dati e le tabelle BigQuery. Scopri di più sulla configurazione del progetto di fatturazione. ASSET_TYPE_#
: facoltativo. Un elenco separato da virgole di tipi di asset disponibili per la ricerca. Sono supportate le espressioni regolari compatibili con RE2. Se l'espressione regolare non corrisponde a nessun tipo di asset supportato, viene restituito un erroreINVALID_ARGUMENT
. Se--asset-types
non è specificato, vengono restituiti tutti i tipi di asset.CONTENT_TYPE
: facoltativo. Il tipo di contenuti dei metadati che vuoi recuperare. Quando--content-type
non è specificato, vengono restituite solo informazioni di base, ad esempio i nomi degli asset, l'ultima volta che gli asset sono stati aggiornati e a quali progetti, cartelle e organizzazioni appartengono.-
RELATIONSHIP_TYPE_#
: facoltativo. Richiede l'accesso al livello Premium o Enterprise di Security Command Center o Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazioni tra asset che vuoi recuperare. Affinché la procedura funzioni, devi impostareCONTENT_TYPE
suRELATIONSHIP
. -
SNAPSHOT_TIME
: facoltativo. L'ora in cui vuoi acquisire uno snapshot dei tuoi asset, nel formato data e ora dell'argomento gcloud. Il valore non deve risalire a più di 35 giorni fa. Quando--snapshot-time
non è specificato, viene acquisita un'istantanea al momento corrente. -
BIGQUERY_PROJECT_ID
: l'ID del progetto in cui si trova la tabella BigQuery in cui vuoi eseguire l'esportazione. -
DATASET_ID
: l'ID del set di dati BigQuery. -
TABLE_NAME
: la tabella BigQuery in cui stai esportando i metadati. Se non esiste, viene creato.
Il flag --output-bigquery-force
sovrascrive la tabella di destinazione, se esistente.
Consulta il riferimento all'interfaccia a riga di comando gcloud per tutte le opzioni.
Esempio
Esegui il seguente comando per esportare i metadati di resource
così come erano il 30 gennaio 2024 nel progetto my-project
nella tabella 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
Risposta di esempio
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
Metodo HTTP e URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Intestazioni:
X-Goog-User-Project: BILLING_PROJECT_ID
Corpo JSON della richiesta:
{ "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 } } }
Fornisci i seguenti valori:
-
SCOPE_PATH
: utilizza uno dei seguenti valori:I valori consentiti sono:
-
projects/PROJECT_ID
, dovePROJECT_ID
è ID del progetto contenente i metadati della risorsa che vuoi esportare. -
projects/PROJECT_NUMBER
, dovePROJECT_NUMBER
è il numero del progetto contenente i metadati della risorsa che vuoi esportare.Come trovare il numero di un progetto Google Cloud
Google Cloud console
Per trovare il numero di un progetto Google Cloud , svolgi i seguenti passaggi:
-
Vai alla pagina Ti diamo il benvenuto nella console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
-
Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Ti diamo il benvenuto.
Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.
Interfaccia a riga di comando gcloud
Puoi recuperare il numero di un progetto Google Cloud con il seguente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, doveFOLDER_ID
è ID della cartella contenente i metadati della risorsa che vuoi esportare.Come trovare l'ID di una cartella Google Cloud
Google Cloud console
Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"
dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag
--format
per visualizzare ulteriori informazioni sulle cartelle trovate.Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il seguente comando utilizzando l'ID di una cartella di primo livello:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, doveORGANIZATION_ID
è l'ID dell'organizzazione che contiene i metadati della risorsa che vuoi esportare.Come trovare l'ID di un'organizzazione Google Cloud
Google Cloud console
Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: l'ID progetto in cui si trova l'agente del servizio di Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i set di dati e le tabelle BigQuery. Scopri di più sulla configurazione del progetto di fatturazione. CONTENT_TYPE
: il tipo di contenuto dei metadati che vuoi recuperare. Se non viene specificatocontentType
, vengono restituite solo informazioni di base, ad esempio i nomi degli asset, l'ultima volta che gli asset sono stati aggiornati e a quali progetti, cartelle e organizzazioni appartengono.-
RELATIONSHIP_TYPE_#
: facoltativo. Richiede l'accesso al livello Premium o Enterprise di Security Command Center o Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazioni tra asset che vuoi recuperare. Affinché la procedura funzioni, devi impostareCONTENT_TYPE
suRELATIONSHIP
. -
SNAPSHOT_TIME
: facoltativo. L'ora in cui vuoi acquisire uno snapshot dei tuoi asset, in formato RFC 3339. Il valore non deve risalire a più di 35 giorni fa. SereadTime
non è specificato, viene acquisita un'istantanea al momento corrente. -
BIGQUERY_PROJECT_ID
: l'ID del progetto in cui si trova la tabella BigQuery in cui vuoi eseguire l'esportazione. -
DATASET_ID
: l'ID del set di dati BigQuery. -
TABLE_NAME
: la tabella BigQuery in cui stai esportando i metadati. Se non esiste, viene creato.
La coppia chiave-valore "force": true
sovrascrive la tabella di destinazione, se esistente.
Consulta il riferimento REST per tutte le opzioni.
Esempi di comandi
Esegui uno dei seguenti comandi per esportare i metadati di resource
così come erano il 30 gennaio 2024 nel progetto my-project
nella tabella BigQuery my-table
.
curl (Linux, macOS o Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "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
Risposta di esempio
{ "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 } } } }
Vai
Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.
Per autenticarti a Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Java
Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.
Per autenticarti a Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.
Per autenticarti a Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per scoprire come installare e utilizzare la libreria client per Cloud Asset Inventory, consulta Librerie client di Cloud Asset Inventory.
Per autenticarti a Cloud Asset Inventory, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Esportare uno snapshot di asset in tabelle separate per ogni tipo di asset
Puoi esportare gli asset in tabelle BigQuery separate per ogni tipo di asset con il flag --per-asset-type
nella gcloud CLI e "separateTablesPerAssetType": true
nelle richieste dell'API REST.
In questa modalità, il nome di ogni tabella viene TABLE_NAME
concatenato
con _
(underscore) e il nome del tipo di risorsa. I caratteri non alfanumerici vengono sostituiti con _
.
Se l'esportazione in una tabella non va a buon fine, l'intera operazione di esportazione non va a buon fine e viene restituito il primo errore. I risultati delle esportazioni riuscite precedenti rimangono invariati.
I seguenti tipi sono compressi in una stringa JSON per superare un problema di compatibilità tra Proto3 e tipi 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 \ --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \ --snapshot-time="SNAPSHOT_TIME" \ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \ --per-asset-type \ --output-bigquery-force
Fornisci i seguenti valori:
-
SCOPE
: utilizza uno dei seguenti valori:-
project=PROJECT_ID
, dovePROJECT_ID
è ID del progetto contenente i metadati della risorsa che vuoi esportare. -
folder=FOLDER_ID
, doveFOLDER_ID
è ID della cartella contenente i metadati della risorsa che vuoi esportare.Come trovare l'ID di una cartella Google Cloud
Google Cloud console
Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"
dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag
--format
per visualizzare ulteriori informazioni sulle cartelle trovate.Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il seguente comando utilizzando l'ID di una cartella di primo livello:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, doveORGANIZATION_ID
è l'ID dell'organizzazione che contiene i metadati della risorsa che vuoi esportare.Come trovare l'ID di un'organizzazione Google Cloud
Google Cloud console
Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: facoltativo. L'ID progetto in cui si trova l'agente di servizio dell'Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i set di dati e le tabelle BigQuery. Scopri di più sulla configurazione del progetto di fatturazione. ASSET_TYPE_#
: facoltativo. Un elenco separato da virgole di tipi di asset disponibili per la ricerca. Sono supportate le espressioni regolari compatibili con RE2. Se l'espressione regolare non corrisponde a nessun tipo di asset supportato, viene restituito un erroreINVALID_ARGUMENT
. Quando--asset-types
non è specificato, vengono restituiti tutti i tipi di asset.CONTENT_TYPE
: facoltativo. Il tipo di contenuto dei metadati che vuoi recuperare. Se--content-type
non è specificato, vengono restituite solo informazioni di base, ad esempio i nomi degli asset, l'ultima volta che gli asset sono stati aggiornati e a quali progetti, cartelle e organizzazioni appartengono.-
RELATIONSHIP_TYPE_#
: facoltativo. Richiede l'accesso al livello Premium o Enterprise di Security Command Center o Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazioni tra asset che vuoi recuperare. Affinché la procedura funzioni, devi impostareCONTENT_TYPE
suRELATIONSHIP
. -
SNAPSHOT_TIME
: facoltativo. L'ora in cui vuoi acquisire uno snapshot dei tuoi asset, nel formato data e ora dell'argomento gcloud. Il valore non deve risalire a più di 35 giorni fa. Quando--snapshot-time
non è specificato, viene acquisita un'istantanea al momento corrente. -
BIGQUERY_PROJECT_ID
: l'ID del progetto in cui si trova la tabella BigQuery in cui vuoi eseguire l'esportazione. -
DATASET_ID
: l'ID del set di dati BigQuery. -
TABLE_NAME
: la tabella BigQuery in cui stai esportando i metadati. Se non esiste, viene creato.
Il flag --output-bigquery-force
sovrascrive la tabella di destinazione, se esistente.
Consulta il riferimento all'interfaccia a riga di comando gcloud per tutte le opzioni.
Esempio
Esegui il seguente comando per esportare i metadati di resource
così come erano il 30 gennaio 2024 nel progetto my-project
in più tabelle BigQuery che hanno my-table
come prefisso.
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
Metodo HTTP e URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Intestazioni:
X-Goog-User-Project: BILLING_PROJECT_ID
Corpo JSON della richiesta:
{ "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, "separateTablesPerAssetType": true } } }
Fornisci i seguenti valori:
-
SCOPE_PATH
: utilizza uno dei seguenti valori:I valori consentiti sono:
-
projects/PROJECT_ID
, dovePROJECT_ID
è ID del progetto contenente i metadati della risorsa che vuoi esportare. -
projects/PROJECT_NUMBER
, dovePROJECT_NUMBER
è il numero del progetto contenente i metadati della risorsa che vuoi esportare.Come trovare il numero di un progetto Google Cloud
Google Cloud console
Per trovare il numero di un progetto Google Cloud , svolgi i seguenti passaggi:
-
Vai alla pagina Ti diamo il benvenuto nella console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
-
Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Ti diamo il benvenuto.
Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.
Interfaccia a riga di comando gcloud
Puoi recuperare il numero di un progetto Google Cloud con il seguente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, doveFOLDER_ID
è ID della cartella contenente i metadati della risorsa che vuoi esportare.Come trovare l'ID di una cartella Google Cloud
Google Cloud console
Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"
dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag
--format
per visualizzare ulteriori informazioni sulle cartelle trovate.Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il seguente comando utilizzando l'ID di una cartella di primo livello:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, doveORGANIZATION_ID
è l'ID dell'organizzazione che contiene i metadati della risorsa che vuoi esportare.Come trovare l'ID di un'organizzazione Google Cloud
Google Cloud console
Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: l'ID progetto in cui si trova l'agente del servizio di Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i set di dati e le tabelle BigQuery. Scopri di più sulla configurazione del progetto di fatturazione. CONTENT_TYPE
: il tipo di contenuto dei metadati che vuoi recuperare. Se non viene specificatocontentType
, vengono restituite solo informazioni di base, ad esempio i nomi degli asset, l'ultima volta che gli asset sono stati aggiornati e a quali progetti, cartelle e organizzazioni appartengono.-
RELATIONSHIP_TYPE_#
: facoltativo. Richiede l'accesso al livello Premium o Enterprise di Security Command Center o Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazioni tra asset che vuoi recuperare. Affinché la procedura funzioni, devi impostareCONTENT_TYPE
suRELATIONSHIP
. -
SNAPSHOT_TIME
: facoltativo. L'ora in cui vuoi acquisire uno snapshot dei tuoi asset, in formato RFC 3339. Il valore non deve risalire a più di 35 giorni fa. SereadTime
non è specificato, viene acquisita un'istantanea al momento corrente. -
BIGQUERY_PROJECT_ID
: l'ID del progetto in cui si trova la tabella BigQuery in cui vuoi eseguire l'esportazione. -
DATASET_ID
: l'ID del set di dati BigQuery. -
TABLE_NAME
: la tabella BigQuery in cui stai esportando i metadati. Se non esiste, viene creato.
La coppia chiave-valore "force": true
sovrascrive la tabella di destinazione, se esistente.
Esempi di comandi
Esegui uno dei seguenti comandi per esportare i metadati di resource
così come erano il 30 gennaio 2024 nel progetto my-project
in più tabelle BigQuery che hanno my-table
come prefisso.
curl (Linux, macOS o Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "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
Esportare un'istantanea di un asset in una tabella partizionata per colonne di unità di tempo
Puoi esportare gli asset di un progetto in
tabelle partizionate con colonne di unità di tempo.
Lo snapshot esportato viene archiviato in una tabella BigQuery denominata
TABLE_NAME
con granularità giornaliera e due colonne aggiuntive
con timestamp, readTime
e requestTime
, una delle quali specificata come colonna
di partizione con il valore PARTITION_KEY
.
Per esportare gli asset di un progetto in tabelle partizionate, effettua una delle seguenti richieste.
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
Fornisci i seguenti valori:
-
SCOPE
: utilizza uno dei seguenti valori:-
project=PROJECT_ID
, dovePROJECT_ID
è ID del progetto contenente i metadati della risorsa che vuoi esportare. -
folder=FOLDER_ID
, doveFOLDER_ID
è ID della cartella contenente i metadati della risorsa che vuoi esportare.Come trovare l'ID di una cartella Google Cloud
Google Cloud console
Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"
dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag
--format
per visualizzare ulteriori informazioni sulle cartelle trovate.Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il seguente comando utilizzando l'ID di una cartella di primo livello:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, doveORGANIZATION_ID
è l'ID dell'organizzazione che contiene i metadati della risorsa che vuoi esportare.Come trovare l'ID di un'organizzazione Google Cloud
Google Cloud console
Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: facoltativo. L'ID progetto in cui si trova l'agente di servizio dell'Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i set di dati e le tabelle BigQuery. Scopri di più sulla configurazione del progetto di fatturazione. ASSET_TYPE_#
: facoltativo. Un elenco separato da virgole di tipi di asset disponibili per la ricerca. Sono supportate le espressioni regolari compatibili con RE2. Se l'espressione regolare non corrisponde a nessun tipo di asset supportato, viene restituito un erroreINVALID_ARGUMENT
. Quando--asset-types
non è specificato, vengono restituiti tutti i tipi di asset.CONTENT_TYPE
: facoltativo. Il tipo di contenuto dei metadati che vuoi recuperare. Se--content-type
non è specificato, vengono restituite solo informazioni di base, ad esempio i nomi degli asset, l'ultima volta che gli asset sono stati aggiornati e a quali progetti, cartelle e organizzazioni appartengono.-
RELATIONSHIP_TYPE_#
: facoltativo. Richiede l'accesso al livello Premium o Enterprise di Security Command Center o Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazioni tra asset che vuoi recuperare. Affinché la procedura funzioni, devi impostareCONTENT_TYPE
suRELATIONSHIP
. -
SNAPSHOT_TIME
: facoltativo. L'ora in cui vuoi acquisire uno snapshot dei tuoi asset, nel formato data e ora dell'argomento gcloud. Il valore non deve risalire a più di 35 giorni fa. Quando--snapshot-time
non è specificato, viene acquisita un'istantanea al momento corrente. -
BIGQUERY_PROJECT_ID
: l'ID del progetto in cui si trova la tabella BigQuery in cui vuoi eseguire l'esportazione. -
DATASET_ID
: l'ID del set di dati BigQuery. -
TABLE_NAME
: la tabella BigQuery in cui stai esportando i metadati. Se non esiste, viene creato. -
PARTITION_KEY
: la colonna della chiave di partizione quando viene eseguita l'esportazione in tabelle partizionate di BigQuery. I valori validi sonoread-time
erequest-time
.
Il flag --output-bigquery-force
sovrascrive i dati nella partizione corrispondente della tabella di destinazione. I dati in partizioni diverse rimangono invariati.
Se --output-bigquery-force
non è specificato, i dati esportati vengono aggiunti alla
partizione corrispondente.
L'operazione di esportazione non va a buon fine se un aggiornamento dello schema o il tentativo di accodare i dati non va a buon fine. ad esempio se la tabella di destinazione esiste già e non ha lo schema previsto dall'esportazione.
Consulta il riferimento all'interfaccia a riga di comando gcloud per tutte le opzioni.
Esempio
Esegui il seguente comando per esportare i metadati di resource
così come erano il 30 gennaio 2024 nel progetto my-project
nella tabella 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
Metodo HTTP e URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Intestazioni:
X-Goog-User-Project: BILLING_PROJECT_ID
Corpo JSON della richiesta:
{ "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, } } }
Fornisci i seguenti valori:
-
SCOPE_PATH
: utilizza uno dei seguenti valori:I valori consentiti sono:
-
projects/PROJECT_ID
, dovePROJECT_ID
è ID del progetto contenente i metadati della risorsa che vuoi esportare. -
projects/PROJECT_NUMBER
, dovePROJECT_NUMBER
è il numero del progetto contenente i metadati della risorsa che vuoi esportare.Come trovare il numero di un progetto Google Cloud
Google Cloud console
Per trovare il numero di un progetto Google Cloud , svolgi i seguenti passaggi:
-
Vai alla pagina Ti diamo il benvenuto nella console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
-
Seleziona la tua organizzazione dalla casella di elenco, quindi cerca il nome del progetto. Il nome, il numero e l'ID progetto vengono visualizzati vicino all'intestazione Ti diamo il benvenuto.
Vengono visualizzate fino a 4000 risorse. Se non vedi il progetto che stai cercando, vai alla pagina Gestisci risorse e filtra l'elenco utilizzando il nome del progetto.
Interfaccia a riga di comando gcloud
Puoi recuperare il numero di un progetto Google Cloud con il seguente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, doveFOLDER_ID
è ID della cartella contenente i metadati della risorsa che vuoi esportare.Come trovare l'ID di una cartella Google Cloud
Google Cloud console
Per trovare l'ID di una cartella Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Cerca il nome della cartella. L'ID cartella viene visualizzato accanto al nome della cartella.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di una cartella Google Cloud che si trova a livello di organizzazione con il seguente 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)"
dove TOP_LEVEL_FOLDER_NAME è una corrispondenza parziale o completa della stringa per il nome della cartella. Rimuovi il flag
--format
per visualizzare ulteriori informazioni sulle cartelle trovate.Il comando precedente non restituisce gli ID delle sottocartelle all'interno delle cartelle. Per farlo, esegui il seguente comando utilizzando l'ID di una cartella di primo livello:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, doveORGANIZATION_ID
è l'ID dell'organizzazione che contiene i metadati della risorsa che vuoi esportare.Come trovare l'ID di un'organizzazione Google Cloud
Google Cloud console
Per trovare l'ID di un'organizzazione Google Cloud , segui questi passaggi:
-
Vai alla console Google Cloud .
- Fai clic sulla casella di elenco selettore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella di elenco.
- Fai clic sulla scheda Tutti. L'ID organizzazione viene visualizzato accanto al nome dell'organizzazione.
Interfaccia a riga di comando gcloud
Puoi recuperare l'ID di un'organizzazione Google Cloud con il seguente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: l'ID progetto in cui si trova l'agente del servizio di Cloud Asset Inventory predefinito che dispone delle autorizzazioni per gestire i set di dati e le tabelle BigQuery. Scopri di più sulla configurazione del progetto di fatturazione. CONTENT_TYPE
: il tipo di contenuto dei metadati che vuoi recuperare. Se non viene specificatocontentType
, vengono restituite solo informazioni di base, ad esempio i nomi degli asset, l'ultima volta che gli asset sono stati aggiornati e a quali progetti, cartelle e organizzazioni appartengono.-
RELATIONSHIP_TYPE_#
: facoltativo. Richiede l'accesso al livello Premium o Enterprise di Security Command Center o Gemini Cloud Assist. Un elenco separato da virgole di tipi di relazioni tra asset che vuoi recuperare. Affinché la procedura funzioni, devi impostareCONTENT_TYPE
suRELATIONSHIP
. -
SNAPSHOT_TIME
: facoltativo. L'ora in cui vuoi acquisire uno snapshot dei tuoi asset, in formato RFC 3339. Il valore non deve risalire a più di 35 giorni fa. SereadTime
non è specificato, viene acquisita un'istantanea al momento corrente. -
BIGQUERY_PROJECT_ID
: l'ID del progetto in cui si trova la tabella BigQuery in cui vuoi eseguire l'esportazione. -
DATASET_ID
: l'ID del set di dati BigQuery. -
TABLE_NAME
: la tabella BigQuery in cui stai esportando i metadati. Se non esiste, viene creato. -
PARTITION_KEY
: la colonna della chiave di partizione quando viene eseguita l'esportazione in tabelle partizionate di BigQuery. I valori validi sonoREAD_TIME
eREQUEST_TIME
.
La coppia chiave-valore "force": true
sovrascrive i dati nella partizione corrispondente della tabella di destinazione. I dati in partizioni diverse rimangono invariati.
Se force
non è impostato o è impostato su false
, i dati esportati vengono aggiunti alla
partizione corrispondente.
L'operazione di esportazione non va a buon fine se un aggiornamento dello schema o il tentativo di accodare i dati non va a buon fine. ad esempio se la tabella di destinazione esiste già e non ha lo schema previsto dall'esportazione.
Esempi di comandi
Esegui uno dei seguenti comandi per esportare i metadati di resource
così come erano il 30 gennaio 2024 nel progetto my-project
nella tabella BigQuery my-table
.
curl (Linux, macOS o Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "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
Controllare lo stato di un'esportazione
Il completamento delle esportazioni richiede del tempo. Per verificare se un'esportazione è stata completata, puoi eseguire una query sull'operazione utilizzando il relativo ID.
Tieni presente che, anche se l'esportazione è stata completata, qualcuno potrebbe aver effettuato un'altra richiesta di esportazione nella stessa destinazione per un'operazione diversa. È possibile effettuare nuove richieste di esportazione verso la stessa destinazione al termine di una richiesta precedente o se sono trascorsi più di 15 minuti. Le richieste di esportazione effettuate al di fuori di queste condizioni vengono rifiutate da Cloud Asset Inventory.
gcloud
Per visualizzare lo stato dell'esportazione, segui le istruzioni riportate di seguito:
Recupera
OPERATION_PATH
, che include l'ID operazione, dalla risposta alla richiesta di esportazione. Il valoreOPERATION_PATH
viene mostrato nella risposta all'esportazione, che ha il seguente formato:projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
Per controllare lo stato dell'esportazione, esegui il seguente comando con
OPERATION_PATH
:gcloud asset operations describe OPERATION_PATH
REST
Per visualizzare lo stato dell'esportazione, segui le istruzioni riportate di seguito:
Recupera
OPERATION_PATH
, che include l'ID operazione, dalla risposta alla richiesta di esportazione.OPERATION_PATH
viene visualizzato come valore del camponame
nella risposta all'esportazione, che è formattato come segue:projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
Per controllare lo stato dell'esportazione, effettua la seguente richiesta.
REST
Metodo HTTP e URL:
GET https://cloudasset.googleapis.com/v1/OPERATION_PATH
Esempi di comandi
curl (Linux, macOS o 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
Visualizzare uno snapshot della risorsa in BigQuery
Console
Vai alla pagina BigQuery Studio nella console Google Cloud .
Per visualizzare le tabelle e le viste nel set di dati, apri il riquadro di navigazione. Nella sezione Risorse, seleziona il progetto per espanderlo, quindi seleziona un set di dati.
Seleziona la tabella dall'elenco.
Seleziona Dettagli e prendi nota del valore in Numero di righe. Potresti avere bisogno di questo valore per controllare il punto di partenza dei risultati utilizzando l'interfaccia a riga di comando gcloud o l'API REST.
Per visualizzare un set di dati di esempio, seleziona Anteprima.
REST
Per sfogliare i dati della tabella, chiama
tabledata.list
. Nel parametro tableId
, specifica il nome della tabella.
Puoi configurare i seguenti parametri facoltativi per controllare l'output.
maxResults
è il numero massimo di risultati da restituire.selectedFields
è un elenco di colonne da restituire separate da virgole. Se non specificato, vengono restituite tutte le colonne.startIndex
è l'indice a partire da zero della riga iniziale da leggere.
I valori vengono restituiti racchiusi in un oggetto JSON che devi analizzare, come descritto nella documentazione di riferimento di tabledata.list
.
Esegui una query su uno snapshot della risorsa in BigQuery
Dopo aver esportato lo snapshot in BigQuery, puoi eseguire query sui metadati delle risorse.
Per impostazione predefinita, BigQuery esegue job di query interattive o on demand, il che significa che la query viene eseguita il prima possibile. Le query interactive vengono conteggiate ai fini del limite di frequenza simultanea e del limite giornaliero.
I risultati della query vengono salvati in una tabella temporanea o permanente. Puoi scegliere di accodare o sovrascrivere i dati in una tabella esistente o di creare una nuova tabella, se non ne esiste una con lo stesso nome.
Per eseguire una query interattiva che scriva l'output in una tabella temporanea, compila i seguenti passaggi.
Console
Vai alla pagina BigQuery Studio nella console Google Cloud .
Seleziona
Crea nuova query.Nell'area di testo Editor query, inserisci una query SQL di BigQuery valida.
(Facoltativo) Per modificare la località di trattamento dei dati, completa i seguenti passaggi.
Seleziona Altro e poi Impostazioni query.
In Località di elaborazione, seleziona Selezione automatica, quindi scegli la località dei dati.
Per aggiornare le impostazioni della query, seleziona Salva.
Seleziona Esegui.
REST
Per avviare un nuovo job, chiama il metodo
jobs.insert
. Nella risorsa job, imposta i seguenti parametri.Nel campo
configuration
, imposta il campoquery
su una JobConfigurationQuery che descrive il job di query BigQuery.Nel campo
jobReference
, imposta il campolocation
in modo appropriato per il tuo job.
Per eseguire il polling per i risultati, chiama
getQueryResults
. Esegui il sondaggio finchéjobComplete
non è uguale atrue
. Puoi verificare la presenza di errori e avvisi nell'elencoerrors
.
Altri esempi di query SQL
Questa sezione fornisce esempi di query SQL per analizzare i metadati delle risorse dopo che li hai esportati in BigQuery. Per ulteriori informazioni, consulta la sintassi delle query SQL standard.
Esegui query direttamente sulle colonne disponibili
Per trovare la quantità di ogni tipo di asset, esegui la seguente query:
SELECT asset_type, COUNT(*) AS asset_count
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
GROUP BY asset_type
ORDER BY asset_count DESC
Lavorare con i campi ripetuti
Per trovare i criteri IAM (Identity and Access Management) che concedono l'accesso agli account Gmail, esegui la seguente query. BigQuery utilizza UNNEST
per appiattire i campi ripetuti in una tabella su cui puoi eseguire query direttamente:
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"
Per trovare un'organizzazione, una cartella o un progetto che consenta la creazione utilizzando un indirizzo IP pubblico, esegui la seguente query. Questa query è utile perché consentire gli indirizzi IP pubblici con le istanze Cloud SQL può introdurre vulnerabilità, a meno che non sia configurato SSL o un proxy:
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);
Per trovare un'organizzazione, una cartella o un progetto nello stesso perimetro di servizio di Controlli di servizio VPC di un progetto, esegui la seguente query:
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";
Lavorare con le stringhe JSON
Per trovare le regole firewall aperte, esegui la seguente query. Scopri di più sulle funzioni JSON utilizzate in 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"
Se separate le tabelle per ogni tipo di risorsa, potete trovare le regole firewall aperte con una query più semplice e veloce.
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";
Unisci tabelle di diversi tipi di risorse
Per unire tabelle di diversi tipi di risorse, esegui la seguente query. L'esempio seguente mostra come trovare tutte le subnet senza VM collegate.
Innanzitutto, la query trova tutte le sottoreti. Poi, da questo elenco, seleziona le sottoreti i cui valori selfLink
non sono presenti.
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
Se separate le tabelle per ogni tipo di risorsa, potete trovare tutte le subnet senza VM collegate con una query più semplice e veloce.
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;
Trovare i cluster Dataproc vulnerabili a causa di 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";