En este documento, se muestra cómo exportar una instantánea de activos de tu organización, carpeta o proyecto a una tabla de BigQuery y, luego, ejecutar un análisis de datos en tu inventario. BigQuery brinda una experiencia similar a SQL para que los usuarios analicen datos y generen estadísticas significativas sin usar secuencias de comandos personalizadas.
Antes de comenzar
Habilita la API de Cloud Asset Inventory en el proyecto desde el que ejecutas los comandos de Cloud Asset Inventory.
Asegúrate de que tu cuenta tenga el rol correcto para llamar a la API de Cloud Asset Inventory. Para obtener información sobre los permisos individuales de cada tipo de llamada, consulta Permisos.
Crea un conjunto de datos de BigQuery para exportar los datos, si aún no tienes uno.
Limitaciones
Cuando se exportan datos de tablas de BigQuery, no todos los campos son compatibles con Cloud Asset Inventory.
Los campos de recursos que cambian con frecuencia, como
numBytes
,numLongTermBytes
,numPhysicalBytes
ynumRows
, se pueden exportar con un valor denull
.No se admite la exportación a tablas agrupadas de BigQuery.
No se admiten las tablas de BigQuery encriptadas con claves personalizadas de Cloud Key Management Service (Cloud KMS).
No se admite agregar los resultados de las exportaciones a una tabla existente, a menos que exportes a una tabla particionada. La tabla de destino debe estar vacía o debes reemplazarla. Para reemplazarla, usa la marca
--output-bigquery-force
con gcloud CLI o"force": true
con la API de REST.Los tipos de recursos de Google Kubernetes Engine (GKE), excepto
container.googleapis.com/Cluster
ycontainer.googleapis.com/NodePool
, no se admiten cuando se exportan a tablas separadas para cada tipo de recurso.Cloud Asset Inventory rechaza las solicitudes de exportación si una solicitud anterior al mismo destino comenzó hace menos de 15 minutos y aún se está ejecutando. Sin embargo, si una exportación tarda más de 15 minutos en completarse, se marca como finalizada y se permiten nuevas solicitudes de exportación al mismo destino.
El tipo de contenido
ACCESS_POLICY
solo se puede exportar a nivel de la organización.Si la tabla a la que exportas ya existe y está en proceso de exportación, se devuelve un error
400
.
Esquemas de BigQuery que se usan para la exportación
A cada tabla de BigQuery se define en un esquema que describe los nombres de las columnas, los tipos de datos y otra información. Configurar el tipo de contenido para una exportación determina el esquema de tu tabla:
Recurso o no especificado: Cuando configuras el tipo de contenido como
RESOURCE
o no lo especificas, y configuras la marcaper-asset-type
comofalse
o no la usas, creas una tabla de BigQuery que tiene el siguiente esquema.Esquema de recursos
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "version", "type": "STRING" }, { "mode": "NULLABLE", "name": "discovery_document_uri", "type": "STRING" }, { "mode": "NULLABLE", "name": "discovery_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "resource_url", "type": "STRING" }, { "mode": "NULLABLE", "name": "parent", "type": "STRING" }, { "mode": "NULLABLE", "name": "data", "type": "STRING" }, { "mode": "NULLABLE", "name": "location", "type": "STRING" } ], "mode": "NULLABLE", "name": "resource", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
La columna
resource.data
son los metadatos de recursos representados como una cadena JSON.Cuando configuras el tipo de contenido como
RESOURCE
o no lo configuras, y estableces la marcaper-asset-type
entrue
, creas tablas separadas para cada tipo de activo. El esquema de cada tabla incluye columnas de tipo RECORD asignadas a los campos anidados en el campoResource.data
de ese tipo de activo (hasta los 15 niveles anidados que admite BigQuery). Para ver tablas de ejemplo, consulta export-assets-examples en la consola de Google Cloud .Política de IAM: Cuando configuras el tipo de contenido como
IAM_POLICY
en la API de REST oiam-policy
en gcloud CLI, creas una tabla de BigQuery que tiene el siguiente esquema.Esquema de políticas de IAM
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "version", "type": "INTEGER" }, { "fields": [ { "mode": "NULLABLE", "name": "role", "type": "STRING" }, { "mode": "REPEATED", "name": "members", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "expression", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "mode": "NULLABLE", "name": "location", "type": "STRING" } ], "mode": "NULLABLE", "name": "condition", "type": "RECORD" } ], "mode": "REPEATED", "name": "bindings", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "service", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "log_type", "type": "INTEGER" }, { "mode": "REPEATED", "name": "exempted_members", "type": "STRING" } ], "mode": "REPEATED", "name": "audit_log_configs", "type": "RECORD" } ], "mode": "REPEATED", "name": "audit_configs", "type": "RECORD" }, { "mode": "NULLABLE", "name": "etag", "type": "STRING" } ], "mode": "NULLABLE", "name": "iam_policy", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
Política de la organización: Cuando estableces el tipo de contenido en
ORG_POLICY
en la API de REST oorg-policy
en gcloud CLI, creas una tabla de BigQuery que tiene el siguiente esquema.Esquema de la política de la organización
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "version", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "constraint", "type": "STRING" }, { "mode": "NULLABLE", "name": "etag", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" }, { "fields": [ { "mode": "REPEATED", "name": "allowed_values", "type": "STRING" }, { "mode": "REPEATED", "name": "denied_values", "type": "STRING" }, { "mode": "NULLABLE", "name": "all_values", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "suggested_value", "type": "STRING" }, { "mode": "NULLABLE", "name": "inherit_from_parent", "type": "BOOLEAN" } ], "mode": "NULLABLE", "name": "list_policy", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "enforced", "type": "BOOLEAN" } ], "mode": "NULLABLE", "name": "boolean_policy", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "_present", "type": "BOOLEAN" } ], "mode": "NULLABLE", "name": "restore_default", "type": "RECORD" } ], "mode": "REPEATED", "name": "org_policy", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
Política de VPCSC: Cuando estableces el tipo de contenido en
ACCESS_POLICY
en la API de REST oaccess-policy
en gcloud CLI, creas una tabla de BigQuery que tiene el siguiente esquema.Esquema de la política de VPCSC
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "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" } ]
Inventario de instancias de OSConfig: Cuando configuras el tipo de contenido como
OS_INVENTORY
en la API de REST oos-inventory
en gcloud CLI, creas una tabla de BigQuery que tiene el siguiente esquema.Esquema de inventario del 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" } ]
Relación: Cuando configuras el tipo de contenido como
RELATIONSHIP
en la API de REST orelationship
en gcloud CLI, creas una tabla de BigQuery que tiene el siguiente esquema.Esquema de relación
[ { "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" } ]
Exporta una instantánea de activo
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
Ingresa los siguientes valores:
-
SCOPE
: Usa uno de los siguientes valores:-
project=PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del activo que deseas exportar. -
folder=FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una carpeta Google Cloud
Google Cloud console
Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de tu carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
gcloud CLI
Puedes recuperar el ID de una carpeta Google Cloud ubicada a nivel de la organización con el siguiente 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)"
En el ejemplo anterior, TOP_LEVEL_FOLDER_NAME es una coincidencia de cadena parcial o completa para el nombre de la carpeta. Quita la marca
--format
para ver más información sobre las carpetas encontradas.El comando anterior no devuelve los IDs de las subcarpetas dentro de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, dondeORGANIZATION_ID
es el ID de la organización que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una organización de Google Cloud
Google Cloud console
Para encontrar el ID de una organización Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.
gcloud CLI
Puedes recuperar el ID de una organización Google Cloud con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: Opcional Es el ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory que tiene permisos para administrar tus conjuntos de datos y tablas de BigQuery. Obtén más información para configurar el proyecto de facturación. ASSET_TYPE_#
: Opcional Es una lista separada por comas de tipos de recursos que se pueden buscar. Se admiten expresiones regulares compatibles con RE2. Si la expresión regular no coincide con ningún tipo de recurso admitido, se muestra un errorINVALID_ARGUMENT
. Cuando no se especifica--asset-types
, se muestran todos los tipos de recursos.CONTENT_TYPE
: Opcional Tipo de contenido de los metadatos que deseas recuperar. Cuando no se especifica--content-type
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y a qué proyectos, carpetas y organizaciones pertenecen.-
RELATIONSHIP_TYPE_#
: Opcional Requiere acceso al nivel Premium o Enterprise de Security Command Center, o a Gemini Cloud Assist. Es una lista separada por comas de los tipos de relaciones de activos que deseas recuperar. Debes establecerCONTENT_TYPE
enRELATIONSHIP
para que esto funcione. -
SNAPSHOT_TIME
: Opcional Fecha y hora en la que deseas tomar una instantánea de tus recursos, en formato de fecha y hora de gcloud topic. El valor no debe ser anterior a 35 días. Cuando no se especifica--snapshot-time
, se toma una instantánea a la hora actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que deseas exportar. -
DATASET_ID
: Es el ID del conjunto de datos de BigQuery. -
TABLE_NAME
: La tabla de BigQuery a la que exportarás tus metadatos. Si no existe, se crea.
La marca --output-bigquery-force
reemplaza la tabla de destino, si existe.
Consulta la referencia de la CLI de gcloud para ver todas las opciones.
Ejemplo
Ejecuta el siguiente comando para exportar los metadatos de resource
tal como estaban el 30 de enero de 2024 en el proyecto my-project
a la tabla de 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
Respuesta de ejemplo
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 y URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Encabezados:
X-Goog-User-Project: BILLING_PROJECT_ID
Cuerpo JSON de la solicitud:
{ "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 } } }
Ingresa los siguientes valores:
-
SCOPE_PATH
: Usa uno de los siguientes valores:Los valores permitidos son los siguientes:
-
projects/PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del activo que deseas exportar. -
projects/PROJECT_NUMBER
, dondePROJECT_NUMBER
es el número del proyecto que tiene los metadatos del activo que deseas exportar.Cómo encontrar un Google Cloud número de proyecto
Google Cloud console
Para encontrar el número de un proyecto Google Cloud , completa los siguientes pasos:
-
Ve a la página Bienvenida en la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
-
Selecciona tu organización en el cuadro de lista y, luego, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.
Se muestran hasta 4,000 recursos. Si no ves el proyecto que buscas, ve a la página Administrar recursos y filtra la lista con el nombre de ese proyecto.
gcloud CLI
Puedes recuperar un número de proyecto Google Cloud con el siguiente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una carpeta Google Cloud
Google Cloud console
Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de tu carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
gcloud CLI
Puedes recuperar el ID de una carpeta Google Cloud ubicada a nivel de la organización con el siguiente 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)"
En el ejemplo anterior, TOP_LEVEL_FOLDER_NAME es una coincidencia de cadena parcial o completa para el nombre de la carpeta. Quita la marca
--format
para ver más información sobre las carpetas encontradas.El comando anterior no devuelve los IDs de las subcarpetas dentro de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, dondeORGANIZATION_ID
es el ID de la organización que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una organización de Google Cloud
Google Cloud console
Para encontrar el ID de una organización Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.
gcloud CLI
Puedes recuperar el ID de una organización Google Cloud con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: Es el ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory que tiene permisos para administrar tus conjuntos de datos y tablas de BigQuery. Obtén más información para configurar el proyecto de facturación. ASSET_TYPE_#
: Opcional Es un array de tipos de recursos que se pueden buscar. Se admiten expresiones regulares compatibles con RE2. Si la expresión regular no coincide con ningún tipo de recurso admitido, se muestra un errorINVALID_ARGUMENT
. Cuando no se especificaassetTypes
, se muestran todos los tipos de recursos.CONTENT_TYPE
: Opcional Tipo de contenido de los metadatos que deseas recuperar. Cuando no se especificacontentType
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y a qué proyectos, carpetas y organizaciones pertenecen.-
RELATIONSHIP_TYPE_#
: Opcional Requiere acceso al nivel Premium o Enterprise de Security Command Center, o a Gemini Cloud Assist. Es una lista separada por comas de los tipos de relaciones de activos que deseas recuperar. Debes establecerCONTENT_TYPE
enRELATIONSHIP
para que esto funcione. -
SNAPSHOT_TIME
: Opcional La fecha y hora en la que deseas tomar una instantánea de tus activos, en formato RFC 3339. El valor no debe ser anterior a 35 días. Cuando no se especificareadTime
, se toma una instantánea en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que deseas exportar. -
DATASET_ID
: Es el ID del conjunto de datos de BigQuery. -
TABLE_NAME
: La tabla de BigQuery a la que exportarás tus metadatos. Si no existe, se crea.
El par clave-valor "force": true
reemplaza la tabla de destino si existe.
Consulta la referencia de REST para ver todas las opciones.
Ejemplos de comandos
Ejecuta uno de los siguientes comandos para exportar tus metadatos de resource
tal como estaban el 30 de enero de 2024 en el proyecto my-project
a la tabla de 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
Respuesta de ejemplo
{ "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 } } } }
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud Asset Inventory, consulta Bibliotecas cliente de Cloud Asset Inventory.
Para autenticarte en Cloud Asset Inventory, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud Asset Inventory, consulta Bibliotecas cliente de Cloud Asset Inventory.
Para autenticarte en Cloud Asset Inventory, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud Asset Inventory, consulta Bibliotecas cliente de Cloud Asset Inventory.
Para autenticarte en Cloud Asset Inventory, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud Asset Inventory, consulta Bibliotecas cliente de Cloud Asset Inventory.
Para autenticarte en Cloud Asset Inventory, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Exporta una instantánea de recursos a tablas separadas para cada tipo de recurso
Puedes exportar recursos a tablas de BigQuery separadas para cada tipo de recurso con la marca --per-asset-type
en gcloud CLI y "separateTablesPerAssetType": true
en las solicitudes de la API de REST. El tipo de contenido RELATIONSHIP
no se puede exportar de esta manera.
En este modo, el nombre de cada tabla es TABLE_NAME
concatenado con _
(guion bajo) y el nombre del tipo de activo. Los caracteres que no sean alfanuméricos se reemplazan por _
.
Si falla la exportación a cualquier tabla, fallará toda la operación de exportación y se mostrará el primer error. Se conservan los resultados de las exportaciones anteriores que se realizaron de forma correcta.
Los siguientes tipos se incluyen en una cadena JSON para superar un problema de compatibilidad entre Proto3 y los tipos de 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
Ingresa los siguientes valores:
-
SCOPE
: Usa uno de los siguientes valores:-
project=PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del activo que deseas exportar. -
folder=FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una carpeta Google Cloud
Google Cloud console
Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de tu carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
gcloud CLI
Puedes recuperar el ID de una carpeta Google Cloud ubicada a nivel de la organización con el siguiente 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)"
En el ejemplo anterior, TOP_LEVEL_FOLDER_NAME es una coincidencia de cadena parcial o completa para el nombre de la carpeta. Quita la marca
--format
para ver más información sobre las carpetas encontradas.El comando anterior no devuelve los IDs de las subcarpetas dentro de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, dondeORGANIZATION_ID
es el ID de la organización que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una organización de Google Cloud
Google Cloud console
Para encontrar el ID de una organización Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.
gcloud CLI
Puedes recuperar el ID de una organización Google Cloud con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: Opcional Es el ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory que tiene permisos para administrar tus conjuntos de datos y tablas de BigQuery. Obtén más información para configurar el proyecto de facturación. ASSET_TYPE_#
: Opcional Es una lista separada por comas de tipos de recursos que se pueden buscar. Se admiten expresiones regulares compatibles con RE2. Si la expresión regular no coincide con ningún tipo de recurso admitido, se muestra un errorINVALID_ARGUMENT
. Cuando no se especifica--asset-types
, se muestran todos los tipos de recursos.-
CONTENT_TYPE
: Opcional El tipo de contenido de los metadatos que deseas recuperar. El tipo de contenidoRELATIONSHIP
no se puede usar con--per-asset-type
.Cuando no se especifica
--content-type
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y a qué proyectos, carpetas y organizaciones pertenecen. -
SNAPSHOT_TIME
: Opcional Fecha y hora en la que deseas tomar una instantánea de tus recursos, en formato de fecha y hora de gcloud topic. El valor no debe ser anterior a 35 días. Cuando no se especifica--snapshot-time
, se toma una instantánea a la hora actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que deseas exportar. -
DATASET_ID
: Es el ID del conjunto de datos de BigQuery. -
TABLE_NAME
: Prefijo de las tablas de BigQuery a las que exportas tus metadatos. Los nombres completos de las tablas son el prefijo concatenado con_
y el tipo de activo.
La marca --output-bigquery-force
reemplaza la tabla de destino, si existe.
Consulta la referencia de la CLI de gcloud para ver todas las opciones.
Ejemplo
Ejecuta el siguiente comando para exportar tus metadatos de resource
tal como estaban el 30 de enero de 2024 en el proyecto my-project
a varias tablas de BigQuery que tienen my-table
como prefijo.
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 y URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Encabezados:
X-Goog-User-Project: BILLING_PROJECT_ID
Cuerpo JSON de la solicitud:
{ "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 } } }
Ingresa los siguientes valores:
-
SCOPE_PATH
: Usa uno de los siguientes valores:Los valores permitidos son los siguientes:
-
projects/PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del activo que deseas exportar. -
projects/PROJECT_NUMBER
, dondePROJECT_NUMBER
es el número del proyecto que tiene los metadatos del activo que deseas exportar.Cómo encontrar un Google Cloud número de proyecto
Google Cloud console
Para encontrar el número de un proyecto Google Cloud , completa los siguientes pasos:
-
Ve a la página Bienvenida en la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
-
Selecciona tu organización en el cuadro de lista y, luego, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.
Se muestran hasta 4,000 recursos. Si no ves el proyecto que buscas, ve a la página Administrar recursos y filtra la lista con el nombre de ese proyecto.
gcloud CLI
Puedes recuperar un número de proyecto Google Cloud con el siguiente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una carpeta Google Cloud
Google Cloud console
Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de tu carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
gcloud CLI
Puedes recuperar el ID de una carpeta Google Cloud ubicada a nivel de la organización con el siguiente 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)"
En el ejemplo anterior, TOP_LEVEL_FOLDER_NAME es una coincidencia de cadena parcial o completa para el nombre de la carpeta. Quita la marca
--format
para ver más información sobre las carpetas encontradas.El comando anterior no devuelve los IDs de las subcarpetas dentro de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, dondeORGANIZATION_ID
es el ID de la organización que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una organización de Google Cloud
Google Cloud console
Para encontrar el ID de una organización Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.
gcloud CLI
Puedes recuperar el ID de una organización Google Cloud con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: Es el ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory que tiene permisos para administrar tus conjuntos de datos y tablas de BigQuery. Obtén más información para configurar el proyecto de facturación. ASSET_TYPE_#
: Opcional Es un array de tipos de recursos que se pueden buscar. Se admiten expresiones regulares compatibles con RE2. Si la expresión regular no coincide con ningún tipo de recurso admitido, se muestra un errorINVALID_ARGUMENT
. Cuando no se especificaassetTypes
, se muestran todos los tipos de recursos.-
CONTENT_TYPE
: Opcional El tipo de contenido de los metadatos que deseas recuperar. El tipo de contenidoRELATIONSHIP
no se puede usar con"separateTablesPerAssetType": true
.Cuando no se especifica
contentType
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y a qué proyectos, carpetas y organizaciones pertenecen. -
SNAPSHOT_TIME
: Opcional La fecha y hora en la que deseas tomar una instantánea de tus activos, en formato RFC 3339. El valor no debe ser anterior a 35 días. Cuando no se especificareadTime
, se toma una instantánea en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que deseas exportar. -
DATASET_ID
: Es el ID del conjunto de datos de BigQuery. -
TABLE_NAME
: Prefijo de las tablas de BigQuery a las que exportas tus metadatos. Los nombres completos de las tablas son el prefijo concatenado con_
y el tipo de activo.
El par clave-valor "force": true
reemplaza la tabla de destino si existe.
Ejemplos de comandos
Ejecuta uno de los siguientes comandos para exportar tus metadatos de resource
tal como estaban el 30 de enero de 2024 en el proyecto my-project
a varias tablas de BigQuery que tienen my-table
como prefijo.
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
Exporta una instantánea de recursos a una tabla particionada por columnas de unidad de tiempo
Puedes exportar recursos en un proyecto a tablas particionadas por columnas de unidades de tiempo.
La instantánea exportada se almacena en una tabla de BigQuery llamada TABLE_NAME
con un nivel de detalle diario y dos columnas de marca de tiempo adicionales, readTime
y requestTime
, una de las cuales especificas como la columna de partición con el valor PARTITION_KEY
.
Para exportar activos en un proyecto a tablas particionadas, realiza una de las siguientes solicitudes.
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
Ingresa los siguientes valores:
-
SCOPE
: Usa uno de los siguientes valores:-
project=PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del activo que deseas exportar. -
folder=FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una carpeta Google Cloud
Google Cloud console
Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de tu carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
gcloud CLI
Puedes recuperar el ID de una carpeta Google Cloud ubicada a nivel de la organización con el siguiente 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)"
En el ejemplo anterior, TOP_LEVEL_FOLDER_NAME es una coincidencia de cadena parcial o completa para el nombre de la carpeta. Quita la marca
--format
para ver más información sobre las carpetas encontradas.El comando anterior no devuelve los IDs de las subcarpetas dentro de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, dondeORGANIZATION_ID
es el ID de la organización que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una organización de Google Cloud
Google Cloud console
Para encontrar el ID de una organización Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.
gcloud CLI
Puedes recuperar el ID de una organización Google Cloud con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: Opcional Es el ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory que tiene permisos para administrar tus conjuntos de datos y tablas de BigQuery. Obtén más información para configurar el proyecto de facturación. ASSET_TYPE_#
: Opcional Es una lista separada por comas de tipos de recursos que se pueden buscar. Se admiten expresiones regulares compatibles con RE2. Si la expresión regular no coincide con ningún tipo de recurso admitido, se muestra un errorINVALID_ARGUMENT
. Cuando no se especifica--asset-types
, se muestran todos los tipos de recursos.CONTENT_TYPE
: Opcional Tipo de contenido de los metadatos que deseas recuperar. Cuando no se especifica--content-type
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y a qué proyectos, carpetas y organizaciones pertenecen.-
RELATIONSHIP_TYPE_#
: Opcional Requiere acceso al nivel Premium o Enterprise de Security Command Center, o a Gemini Cloud Assist. Es una lista separada por comas de los tipos de relaciones de activos que deseas recuperar. Debes establecerCONTENT_TYPE
enRELATIONSHIP
para que esto funcione. -
SNAPSHOT_TIME
: Opcional Fecha y hora en la que deseas tomar una instantánea de tus recursos, en formato de fecha y hora de gcloud topic. El valor no debe ser anterior a 35 días. Cuando no se especifica--snapshot-time
, se toma una instantánea a la hora actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que deseas exportar. -
DATASET_ID
: Es el ID del conjunto de datos de BigQuery. -
TABLE_NAME
: La tabla de BigQuery a la que exportarás tus metadatos. Si no existe, se crea. -
PARTITION_KEY
: Es la columna de clave de partición cuando se exporta a tablas particionadas de BigQuery. Los valores válidos sonread-time
yrequest-time
.
La marca --output-bigquery-force
reemplaza los datos en la partición correspondiente de la tabla de destino. Los datos de las diferentes particiones permanecen intactos.
Si no se especifica --output-bigquery-force
, los datos exportados se agregan a la partición correspondiente.
La operación de exportación fallará si la actualización del esquema o el intento de adjuntar los datos fallan. Esto incluye los casos en los que la tabla de destino ya existe y no tiene el esquema que espera la exportación.
Consulta la referencia de la CLI de gcloud para ver todas las opciones.
Ejemplo
Ejecuta el siguiente comando para exportar los metadatos de resource
tal como estaban el 30 de enero de 2024 en el proyecto my-project
a la tabla de 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 y URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
Encabezados:
X-Goog-User-Project: BILLING_PROJECT_ID
Cuerpo JSON de la solicitud:
{ "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, } } }
Ingresa los siguientes valores:
-
SCOPE_PATH
: Usa uno de los siguientes valores:Los valores permitidos son los siguientes:
-
projects/PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del activo que deseas exportar. -
projects/PROJECT_NUMBER
, dondePROJECT_NUMBER
es el número del proyecto que tiene los metadatos del activo que deseas exportar.Cómo encontrar un Google Cloud número de proyecto
Google Cloud console
Para encontrar el número de un proyecto Google Cloud , completa los siguientes pasos:
-
Ve a la página Bienvenida en la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
-
Selecciona tu organización en el cuadro de lista y, luego, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Bienvenido.
Se muestran hasta 4,000 recursos. Si no ves el proyecto que buscas, ve a la página Administrar recursos y filtra la lista con el nombre de ese proyecto.
gcloud CLI
Puedes recuperar un número de proyecto Google Cloud con el siguiente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una carpeta Google Cloud
Google Cloud console
Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de tu carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
gcloud CLI
Puedes recuperar el ID de una carpeta Google Cloud ubicada a nivel de la organización con el siguiente 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)"
En el ejemplo anterior, TOP_LEVEL_FOLDER_NAME es una coincidencia de cadena parcial o completa para el nombre de la carpeta. Quita la marca
--format
para ver más información sobre las carpetas encontradas.El comando anterior no devuelve los IDs de las subcarpetas dentro de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, dondeORGANIZATION_ID
es el ID de la organización que tiene los metadatos del activo que deseas exportar.Cómo encontrar el ID de una organización de Google Cloud
Google Cloud console
Para encontrar el ID de una organización Google Cloud , completa los siguientes pasos:
-
Ve a la consola de Google Cloud .
- Haz clic en el cuadro de lista del conmutador en la barra de menú.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.
gcloud CLI
Puedes recuperar el ID de una organización Google Cloud con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: Es el ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory que tiene permisos para administrar tus conjuntos de datos y tablas de BigQuery. Obtén más información para configurar el proyecto de facturación. ASSET_TYPE_#
: Opcional Es un array de tipos de recursos que se pueden buscar. Se admiten expresiones regulares compatibles con RE2. Si la expresión regular no coincide con ningún tipo de recurso admitido, se muestra un errorINVALID_ARGUMENT
. Cuando no se especificaassetTypes
, se muestran todos los tipos de recursos.CONTENT_TYPE
: Opcional Tipo de contenido de los metadatos que deseas recuperar. Cuando no se especificacontentType
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y a qué proyectos, carpetas y organizaciones pertenecen.-
RELATIONSHIP_TYPE_#
: Opcional Requiere acceso al nivel Premium o Enterprise de Security Command Center, o a Gemini Cloud Assist. Es una lista separada por comas de los tipos de relaciones de activos que deseas recuperar. Debes establecerCONTENT_TYPE
enRELATIONSHIP
para que esto funcione. -
SNAPSHOT_TIME
: Opcional La fecha y hora en la que deseas tomar una instantánea de tus activos, en formato RFC 3339. El valor no debe ser anterior a 35 días. Cuando no se especificareadTime
, se toma una instantánea en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que deseas exportar. -
DATASET_ID
: Es el ID del conjunto de datos de BigQuery. -
TABLE_NAME
: La tabla de BigQuery a la que exportarás tus metadatos. Si no existe, se crea. -
PARTITION_KEY
: Es la columna de clave de partición cuando se exporta a tablas particionadas de BigQuery. Los valores válidos sonREAD_TIME
yREQUEST_TIME
.
El par clave-valor "force": true
reemplaza los datos de la partición correspondiente en la tabla de destino. Los datos de las diferentes particiones permanecen intactos.
Si force
no se configura o se establece en false
, los datos exportados se agregan a la partición correspondiente.
La operación de exportación fallará si la actualización del esquema o el intento de adjuntar los datos fallan. Esto incluye los casos en los que la tabla de destino ya existe y no tiene el esquema que espera la exportación.
Ejemplos de comandos
Ejecuta uno de los siguientes comandos para exportar tus metadatos de resource
tal como estaban el 30 de enero de 2024 en el proyecto my-project
a la tabla de 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
Cómo verificar el estado de una exportación
Las exportaciones tardan en completarse. Para verificar si se completó una exportación, puedes consultar la operación con su ID.
Ten en cuenta que, incluso si se completó tu exportación, es posible que otra persona haya realizado otra solicitud de exportación al mismo destino como una operación diferente. Se pueden realizar nuevas solicitudes de exportación al mismo destino después de que finalice una solicitud anterior o si transcurrieron más de 15 minutos. Cloud Asset Inventory rechaza las solicitudes de exportación realizadas fuera de estas condiciones.
gcloud
Para ver el estado de la exportación, completa las siguientes instrucciones:
Obtén el
OPERATION_PATH
, que incluye el ID de operación, de la respuesta a tu solicitud de exportación. ElOPERATION_PATH
se muestra en la respuesta a la exportación, que tiene el siguiente formato:projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
Para verificar el estado de la exportación, ejecuta el siguiente comando con
OPERATION_PATH
:gcloud asset operations describe OPERATION_PATH
REST
Para ver el estado de la exportación, completa las siguientes instrucciones:
Obtén el
OPERATION_PATH
, que incluye el ID de operación, de la respuesta a tu solicitud de exportación. ElOPERATION_PATH
se muestra como el valor del camponame
en la respuesta a la exportación, que tiene el siguiente formato:projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
Para verificar el estado de la exportación, realiza la siguiente solicitud.
REST
Método HTTP y URL:
GET https://cloudasset.googleapis.com/v1/OPERATION_PATH
Ejemplos de comandos
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
Cómo ver la instantánea de un activo en BigQuery
Console
Ve a la página de BigQuery Studio en la consola de Google Cloud .
Para mostrar las tablas y vistas en el conjunto de datos, abre el panel de navegación. En la sección Recursos, selecciona tu proyecto para expandirlo y, luego, selecciona un conjunto de datos.
En la lista, selecciona tu tabla.
Selecciona Detalles y anota el valor de Número de filas. Es posible que necesites este valor para controlar el punto de partida de tus resultados con gcloud CLI o la API de REST.
Para ver una muestra del conjunto de datos, selecciona Vista previa.
REST
Para explorar los datos de tu tabla, llama a tabledata.list
. En el parámetro tableId
, especifica el nombre de tu tabla.
Puedes configurar los siguientes parámetros opcionales para controlar el resultado.
maxResults
es la cantidad máxima de resultados que se mostrarán.selectedFields
es una lista de las columnas separadas por comas que se mostrarán, si no se especifica, se mostrarán todas las columnas.startIndex
es el índice basado en cero de la fila inicial que se leerá.
Los valores se muestran unidos en un objeto JSON que debes analizar, como se describe en la documentación de referencia de tabledata.list
.
Consulta una instantánea de recursos en BigQuery
Después de exportar la instantánea a BigQuery, puedes ejecutar consultas en los metadatos de tus activos.
De manera predeterminada, BigQuery ejecuta trabajos de consulta interactivos a pedido, lo que significa que la consulta se ejecuta en cuanto sea posible. Las consultas interactivas se toman en cuenta para tu límite de frecuencia simultánea y límite diario.
Los resultados de las consultas se almacenan en una tabla temporal o permanente. Puedes agregar o reemplazar datos en una tabla existente o crear una tabla nueva, si no existe una con el mismo nombre.
Para ejecutar una consulta interactiva que escribe el resultado en una tabla temporal, completa los siguientes pasos.
Console
Ve a la página de BigQuery Studio en la consola de Google Cloud .
Selecciona
Redactar consulta nueva.En el área de texto del Editor de consultas, ingresa una consulta de SQL de BigQuery válida.
Opcional: Para cambiar la ubicación de procesamiento de datos, completa los siguientes pasos.
Selecciona Más y, luego, Configuración de consulta.
En Ubicación de procesamiento, selecciona Selección automática y, luego, la ubicación de tus datos.
Para actualizar la configuración de la consulta, selecciona Guardar.
Selecciona Ejecutar.
REST
Para iniciar un trabajo nuevo, llama al método
jobs.insert
. En el recurso de trabajo, establece los siguientes parámetros.En el campo
configuration
, configura el campoquery
como una JobConfigurationQuery que describa el trabajo de consulta de BigQuery.En el campo
jobReference
, configura el campolocation
de forma adecuada para tu trabajo.
Para consultar los resultados, llama a
getQueryResults
. Busca hasta quejobComplete
sea igual atrue
. Puedes comprobar si hay errores y advertencias en la listaerrors
.
Ejemplos de consulta en SQL adicionales
En esta sección, se proporcionan ejemplos de consultas de SQL para analizar los metadatos de tus activos después de exportarlos a BigQuery. Consulta la sintaxis de consultas de SQL estándar para obtener más información.
Consulta directamente las columnas disponibles
Para encontrar la cantidad de cada tipo de recurso, ejecuta la siguiente consulta:
SELECT asset_type, COUNT(*) AS asset_count
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
GROUP BY asset_type
ORDER BY asset_count DESC
Trabaja con campos repetidos
Para encontrar las políticas de Identity and Access Management (IAM) que otorgan acceso a las cuentas de Gmail, ejecuta la siguiente consulta. BigQuery usa UNNEST
para compactar campos repetidos en una tabla que puedes consultar directamente:
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 una organización, una carpeta o un proyecto que permita crear con una dirección IP pública, ejecuta la siguiente consulta. Esta consulta es útil porque permitir direcciones IP públicas con instancias de Cloud SQL puede introducir vulnerabilidades, a menos que se configure 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);
Para buscar una organización, una carpeta o un proyecto en el mismo perímetro de servicio de Controles del servicio de VPC de un proyecto, ejecuta la siguiente 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";
Trabaja con cadenas JSON
Para encontrar reglas de firewall abiertas, ejecuta la siguiente consulta. Obtén más información sobre las funciones JSON que se usan en 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"
Si separas las tablas para cada tipo de recurso, puedes encontrar reglas de firewall abiertas con una consulta más fácil y 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";
Une tablas de diferentes tipos de recursos
Para unir tablas de diferentes tipos de recursos, ejecuta la siguiente consulta: En el siguiente ejemplo, se muestra cómo encontrar todas las subredes que no tienen una VM conectada.
Primero, la consulta encuentra todas las subredes. Luego, en esa lista, selecciona las subredes cuyos valores de selfLink
no están 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
Si separas las tablas para cada tipo de recurso, puedes encontrar todas las subredes que no tienen una VM adjunta con una consulta más fácil y 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;
Cómo encontrar clústeres de Dataproc vulnerables debido a 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";