En este documento se explica cómo exportar una instantánea de los recursos de tu organización, carpeta o proyecto a una tabla de BigQuery y, a continuación, analizar los datos de tu inventario. BigQuery ofrece a los usuarios una experiencia similar a SQL para analizar datos y obtener información valiosa sin necesidad de usar secuencias de comandos personalizadas.
Antes de empezar
Habilita la API Cloud Asset Inventory en el proyecto desde el que ejecutas los comandos de Cloud Asset Inventory.
Asegúrate de que tu cuenta tiene el rol correcto para llamar a la API Cloud Asset Inventory. Para ver los permisos individuales de cada tipo de llamada, consulta la sección Permisos.
Crea un conjunto de datos de BigQuery para exportar los datos (si aún no tienes ninguno).
Limitaciones
Al exportar datos de tablas de BigQuery, Cloud Asset Inventory no admite todos los campos.
Los campos de recursos que cambian con frecuencia, como
numBytes
,numLongTermBytes
,numPhysicalBytes
ynumRows
, se pueden exportar con el valornull
.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 añadir el resultado de la exportación a una tabla ya creada, a menos que exportes a una tabla particionada. La tabla de destino debe estar vacía o debes sobrescribirla. Para sobrescribirlo, usa la marca
--output-bigquery-force
con la CLI de gcloud o"force": true
con la API REST.Los tipos de recursos de Google Kubernetes Engine (GKE), excepto
container.googleapis.com/Cluster
ycontainer.googleapis.com/NodePool
, no se admiten al exportar a tablas independientes para cada tipo de recurso.Cloud Asset Inventory rechaza las solicitudes de exportación si se ha iniciado una solicitud anterior al mismo destino hace menos de 15 minutos y aún está en curso. Sin embargo, si una exportación tarda más de 15 minutos en completarse, se marcará como finalizada y se permitirán nuevas solicitudes de exportación al mismo destino.
El tipo de contenido
ACCESS_POLICY
solo se puede exportar a nivel de organización.Si la tabla a la que quieres exportar los datos ya existe y se está exportando, se devuelve un error
400
.
Carcasa
Los nombres de los campos usan convenciones de uso de mayúsculas y minúsculas diferentes en función del tipo de contenido solicitado y de la configuración de exportación:
En el caso del tipo de contenido
RESOURCE
, cuando exportas recursos a tablas por tipo de recurso, no hay espacios entre las palabras y la primera letra de cada palabra después de la primera se escribe en mayúscula. Por ejemplo,assetType
.En el resto de los tipos de contenido, el nombre del campo está en minúsculas y los espacios se sustituyen por guiones bajos. Por ejemplo,
asset_type
.
Esquemas de BigQuery usados para la exportación
Cada tabla de BigQuery se define mediante un esquema que describe los nombres de las columnas, los tipos de datos y otra información. Al definir el tipo de contenido de una exportación, se determina el esquema de la tabla:
Recurso o sin especificar: si asignas el valor
RESOURCE
o no especificas el tipo de contenido y asignas el valorfalse
o no usas la marcaper-asset-type
, se crea una tabla de BigQuery con 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
contiene los metadatos del recurso representados como una cadena JSON.Si asigna el valor
RESOURCE
al tipo de contenido o no lo asigna y define la marcaper-asset-type
comotrue
, se crearán tablas independientes para cada tipo de recurso. El esquema de cada tabla incluye columnas de tipo RECORD asignadas a los campos anidados del campoResource.data
de ese tipo de recurso (hasta los 15 niveles anidados que admite BigQuery). Para ver tablas de ejemplo, consulta export-assets-examples en la consola Google Cloud .Política de IAM: cuando asignas el tipo de contenido
IAM_POLICY
en la API REST oiam-policy
en la CLI de gcloud, creas una tabla de BigQuery que tiene el siguiente esquema.Esquema de la política 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 asignas el tipo de contenido
ORG_POLICY
en la API REST oorg-policy
en la CLI de gcloud, creas una tabla de BigQuery que tiene el siguiente esquema.Esquema de políticas de 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 asignas el tipo de contenido
ACCESS_POLICY
en la API REST oaccess-policy
en la CLI de gcloud, 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 asignas el tipo de contenido
OS_INVENTORY
en la API REST oos-inventory
en la CLI de gcloud, creas una tabla de BigQuery con el siguiente esquema.Esquema de inventario de 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 asignas el tipo de contenido
RELATIONSHIP
en la API REST orelationship
en la CLI de gcloud, 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" } ]
Exportar una vista general de un recurso
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
Proporciona 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 recurso que quieres exportar. -
folder=FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que contiene los metadatos del recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud carpeta
Google Cloud consola
Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
CLI de gcloud
Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de 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)"
Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del 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 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 recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud organización
Google Cloud consola
Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.
CLI de gcloud
Puedes obtener el ID de una Google Cloud organización con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: opcional. El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación. ASSET_TYPE_#
: opcional. 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 devuelve un errorINVALID_ARGUMENT
. Si no se especifica--asset-types
, se devuelven todos los tipos de recursos.CONTENT_TYPE
: opcional. El tipo de contenido de los metadatos que quieras obtener. Si 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 los proyectos, las carpetas y las organizaciones a los que pertenecen.-
RELATIONSHIP_TYPE_#
: opcional. Se requiere acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist. Lista separada por comas de tipos de relaciones de recursos que quieras obtener. Para que funcione, debes asignar el valorRELATIONSHIP
aCONTENT_TYPE
. -
SNAPSHOT_TIME
: opcional. La hora a la que quieres hacer una captura de tus recursos, en formato de fecha y hora de gcloud topic. El valor no debe ser de hace más de 35 días. Si no se especifica--snapshot-time
, se hace una captura en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que quieres exportar. -
DATASET_ID
: ID del conjunto de datos de BigQuery. -
TABLE_NAME
: la tabla de BigQuery a la que exporta los metadatos. Si no existe, se crea.
La marca --output-bigquery-force
sobrescribe la tabla de destino si ya 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 del 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 } } }
Proporciona los siguientes valores:
-
SCOPE_PATH
: usa uno de los siguientes valores:Los valores permitidos son:
-
projects/PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del recurso que quieres exportar. -
projects/PROJECT_NUMBER
, dondePROJECT_NUMBER
es el número del proyecto que tiene los metadatos del recurso que quieres exportar.Cómo encontrar el Google Cloud número de proyecto
Google Cloud consola
Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:
-
Ve a la página Bienvenida de la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
-
Selecciona tu organización en el cuadro de lista y, a continuación, 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 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.
CLI de gcloud
Puedes obtener un Google Cloud número de proyecto con el siguiente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que contiene los metadatos del recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud carpeta
Google Cloud consola
Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
CLI de gcloud
Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de 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)"
Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del 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 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 recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud organización
Google Cloud consola
Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.
CLI de gcloud
Puedes obtener el ID de una Google Cloud organización con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación. ASSET_TYPE_#
: opcional. Una matriz 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 devuelve un errorINVALID_ARGUMENT
. Si no se especificaassetTypes
, se devuelven todos los tipos de recursos.CONTENT_TYPE
: opcional. El tipo de contenido de los metadatos que quieras obtener. Si no se especificacontentType
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y los proyectos, las carpetas y las organizaciones a los que pertenecen.-
RELATIONSHIP_TYPE_#
: opcional. Se requiere acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist. Lista separada por comas de tipos de relaciones de recursos que quieras obtener. Para que funcione, debes asignar el valorRELATIONSHIP
aCONTENT_TYPE
. -
SNAPSHOT_TIME
: opcional. La hora a la que quieres hacer una instantánea de tus recursos, en formato RFC 3339. El valor no debe ser de hace más de 35 días. Si no se especificareadTime
, se hace una captura en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que quieres exportar. -
DATASET_ID
: ID del conjunto de datos de BigQuery. -
TABLE_NAME
: la tabla de BigQuery a la que exporta los metadatos. Si no existe, se crea.
El par clave-valor "force": true
sobrescribe 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 los metadatos de resource
tal como estaban el 30 de enero del 2024 en el proyecto my-project
a la tabla my-table
de BigQuery.
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 saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.
Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Java
Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.
Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Node.js
Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.
Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Python
Para saber cómo instalar y usar la biblioteca de cliente de Inventario de Recursos de Cloud, consulta Bibliotecas de cliente de Inventario de Recursos de Cloud.
Para autenticarte en Inventario de Recursos de Cloud, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Exportar una instantánea de recursos a tablas independientes para cada tipo de recurso
Puede exportar recursos a tablas de BigQuery independientes para cada tipo de recurso con la marca --per-asset-type
en la CLI de gcloud y "separateTablesPerAssetType": true
en las solicitudes de la API REST. El tipo de contenido RELATIONSHIP
no se puede exportar de esta forma.
En este modo, el nombre de cada tabla se TABLE_NAME
concatena
con _
(guion bajo) y el nombre del tipo de recurso. Los caracteres no alfanuméricos se sustituyen por _
.
Si falla la exportación a alguna tabla, toda la operación de exportación fallará y devolverá el primer error. Los resultados de las exportaciones anteriores que se hayan realizado correctamente se conservarán.
Los siguientes tipos se empaquetan en una cadena JSON para solucionar 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
Proporciona 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 recurso que quieres exportar. -
folder=FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que contiene los metadatos del recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud carpeta
Google Cloud consola
Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
CLI de gcloud
Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de 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)"
Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del 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 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 recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud organización
Google Cloud consola
Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.
CLI de gcloud
Puedes obtener el ID de una Google Cloud organización con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: opcional. El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación. ASSET_TYPE_#
: opcional. 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 devuelve un errorINVALID_ARGUMENT
. Si no se especifica--asset-types
, se devuelven todos los tipos de recursos.-
CONTENT_TYPE
: opcional. El tipo de contenido de los metadatos que quieras obtener. El tipo de contenidoRELATIONSHIP
no se puede usar con--per-asset-type
.Si 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 los proyectos, las carpetas y las organizaciones a los que pertenecen. -
SNAPSHOT_TIME
: opcional. La hora a la que quieres hacer una captura de tus recursos, en formato de fecha y hora de gcloud topic. El valor no debe ser de hace más de 35 días. Si no se especifica--snapshot-time
, se hace una captura en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que quieres exportar. -
DATASET_ID
: ID del conjunto de datos de BigQuery. -
TABLE_NAME
: prefijo de las tablas de BigQuery a las que exporta los metadatos. Los nombres completos de las tablas son el prefijo concatenado con_
y el tipo de recurso.
La marca --output-bigquery-force
sobrescribe la tabla de destino si ya 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 del 2024 en el proyecto my-project
a varias tablas de BigQuery que tengan 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 } } }
Proporciona los siguientes valores:
-
SCOPE_PATH
: usa uno de los siguientes valores:Los valores permitidos son:
-
projects/PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del recurso que quieres exportar. -
projects/PROJECT_NUMBER
, dondePROJECT_NUMBER
es el número del proyecto que tiene los metadatos del recurso que quieres exportar.Cómo encontrar el Google Cloud número de proyecto
Google Cloud consola
Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:
-
Ve a la página Bienvenida de la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
-
Selecciona tu organización en el cuadro de lista y, a continuación, 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 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.
CLI de gcloud
Puedes obtener un Google Cloud número de proyecto con el siguiente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que contiene los metadatos del recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud carpeta
Google Cloud consola
Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
CLI de gcloud
Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de 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)"
Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del 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 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 recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud organización
Google Cloud consola
Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.
CLI de gcloud
Puedes obtener el ID de una Google Cloud organización con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación. ASSET_TYPE_#
: opcional. Una matriz 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 devuelve un errorINVALID_ARGUMENT
. Si no se especificaassetTypes
, se devuelven todos los tipos de recursos.-
CONTENT_TYPE
: opcional. El tipo de contenido de los metadatos que quieras obtener. El tipo de contenidoRELATIONSHIP
no se puede usar con"separateTablesPerAssetType": true
.Si no se especifica
contentType
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y los proyectos, las carpetas y las organizaciones a los que pertenecen. -
SNAPSHOT_TIME
: opcional. La hora a la que quieres hacer una instantánea de tus recursos, en formato RFC 3339. El valor no debe ser de hace más de 35 días. Si no se especificareadTime
, se hace una captura en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que quieres exportar. -
DATASET_ID
: ID del conjunto de datos de BigQuery. -
TABLE_NAME
: prefijo de las tablas de BigQuery a las que exporta los metadatos. Los nombres completos de las tablas son el prefijo concatenado con_
y el tipo de recurso.
El par clave-valor "force": true
sobrescribe 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 del 2024 en el proyecto my-project
a varias tablas de BigQuery que tengan 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
Exportar una vista general de un recurso a una tabla con particiones por columnas de unidades de tiempo
Puedes exportar los recursos de 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 una granularidad diaria y dos columnas de marca de tiempo adicionales, readTime
y requestTime
. Una de ellas se especifica como columna de partición con el valor PARTITION_KEY
.
Para exportar recursos de un proyecto a tablas particionadas, haz 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
Proporciona 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 recurso que quieres exportar. -
folder=FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que contiene los metadatos del recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud carpeta
Google Cloud consola
Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
CLI de gcloud
Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de 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)"
Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del 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 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 recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud organización
Google Cloud consola
Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.
CLI de gcloud
Puedes obtener el ID de una Google Cloud organización con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: opcional. El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación. ASSET_TYPE_#
: opcional. 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 devuelve un errorINVALID_ARGUMENT
. Si no se especifica--asset-types
, se devuelven todos los tipos de recursos.CONTENT_TYPE
: opcional. El tipo de contenido de los metadatos que quieras obtener. Si 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 los proyectos, las carpetas y las organizaciones a los que pertenecen.-
RELATIONSHIP_TYPE_#
: opcional. Se requiere acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist. Lista separada por comas de tipos de relaciones de recursos que quieras obtener. Para que funcione, debes asignar el valorRELATIONSHIP
aCONTENT_TYPE
. -
SNAPSHOT_TIME
: opcional. La hora a la que quieres hacer una captura de tus recursos, en formato de fecha y hora de gcloud topic. El valor no debe ser de hace más de 35 días. Si no se especifica--snapshot-time
, se hace una captura en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que quieres exportar. -
DATASET_ID
: ID del conjunto de datos de BigQuery. -
TABLE_NAME
: la tabla de BigQuery a la que exporta los metadatos. Si no existe, se crea. -
PARTITION_KEY
: la columna de clave de partición al exportar a tablas particionadas de BigQuery. Los valores válidos sonread-time
yrequest-time
.
La marca --output-bigquery-force
sobrescribe los datos de la partición correspondiente de la tabla de destino. Los datos de las diferentes particiones se mantienen intactos.
Si no se especifica --output-bigquery-force
, los datos exportados se añaden a la partición correspondiente.
La operación de exportación falla si no se puede actualizar el esquema o si no se pueden añadir datos. Por ejemplo, si 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 del 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, } } }
Proporciona los siguientes valores:
-
SCOPE_PATH
: usa uno de los siguientes valores:Los valores permitidos son:
-
projects/PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto que tiene los metadatos del recurso que quieres exportar. -
projects/PROJECT_NUMBER
, dondePROJECT_NUMBER
es el número del proyecto que tiene los metadatos del recurso que quieres exportar.Cómo encontrar el Google Cloud número de proyecto
Google Cloud consola
Para encontrar un número de proyecto de Google Cloud , sigue estos pasos:
-
Ve a la página Bienvenida de la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
-
Selecciona tu organización en el cuadro de lista y, a continuación, 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 4000 recursos. Si no ves el proyecto que buscas, ve a la página Gestionar recursos y filtra la lista por el nombre de ese proyecto.
CLI de gcloud
Puedes obtener un Google Cloud número de proyecto con el siguiente comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, dondeFOLDER_ID
es el ID de la carpeta que contiene los metadatos del recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud carpeta
Google Cloud consola
Para encontrar el ID de una carpeta de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Busca el nombre de la carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.
CLI de gcloud
Puedes obtener el ID de una Google Cloud carpeta que se encuentre a nivel de 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)"
Donde TOP_LEVEL_FOLDER_NAME es una coincidencia parcial o completa de la cadena del 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 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 recurso que quieres exportar.Cómo encontrar el ID de una Google Cloud organización
Google Cloud consola
Para encontrar el ID de una organización de Google Cloud , sigue estos pasos:
-
Ve a la Google Cloud consola.
- En la barra de menús, haz clic en el cuadro de lista del selector.
- Selecciona tu organización en el cuadro de lista.
- Haz clic en la pestaña Todas. El ID de la organización se muestra junto al nombre de la organización.
CLI de gcloud
Puedes obtener el ID de una Google Cloud organización con el siguiente comando:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: El ID del proyecto en el que se encuentra el agente de servicio predeterminado de Cloud Asset Inventory, que tiene permisos para gestionar tus conjuntos de datos y tablas de BigQuery. Consulta más información sobre cómo definir el proyecto de facturación. ASSET_TYPE_#
: opcional. Una matriz 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 devuelve un errorINVALID_ARGUMENT
. Si no se especificaassetTypes
, se devuelven todos los tipos de recursos.CONTENT_TYPE
: opcional. El tipo de contenido de los metadatos que quieras obtener. Si no se especificacontentType
, solo se devuelve información básica, como los nombres de los recursos, la última vez que se actualizaron y los proyectos, las carpetas y las organizaciones a los que pertenecen.-
RELATIONSHIP_TYPE_#
: opcional. Se requiere acceso al nivel Premium o Enterprise de Security Command Center o a Gemini Cloud Assist. Lista separada por comas de tipos de relaciones de recursos que quieras obtener. Para que funcione, debes asignar el valorRELATIONSHIP
aCONTENT_TYPE
. -
SNAPSHOT_TIME
: opcional. La hora a la que quieres hacer una instantánea de tus recursos, en formato RFC 3339. El valor no debe ser de hace más de 35 días. Si no se especificareadTime
, se hace una captura en el momento actual. -
BIGQUERY_PROJECT_ID
: ID del proyecto en el que se encuentra la tabla de BigQuery que quieres exportar. -
DATASET_ID
: ID del conjunto de datos de BigQuery. -
TABLE_NAME
: la tabla de BigQuery a la que exporta los metadatos. Si no existe, se crea. -
PARTITION_KEY
: la columna de clave de partición al exportar a tablas particionadas de BigQuery. Los valores válidos sonREAD_TIME
yREQUEST_TIME
.
El par clave-valor "force": true
sobrescribe los datos de la partición correspondiente de la tabla de destino. Los datos de las diferentes particiones se mantienen intactos.
Si force
no se ha definido o se le ha asignado el valor false
, los datos exportados se añadirán a la partición correspondiente.
La operación de exportación falla si no se puede actualizar el esquema o si no se pueden añadir datos. Por ejemplo, si 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 los metadatos de resource
tal como estaban el 30 de enero del 2024 en el proyecto my-project
a la tabla my-table
de BigQuery.
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
Comprobar el estado de una exportación
Las exportaciones tardan en completarse. Para comprobar si una exportación se ha completado, puedes consultar la operación mediante su ID.
Ten en cuenta que, aunque se haya completado la exportación, es posible que alguien haya enviado otra solicitud de exportación al mismo destino como una operación diferente. Las nuevas solicitudes de exportación al mismo destino se pueden realizar una vez que se haya completado una solicitud anterior o si han transcurrido más de 15 minutos. El Inventario de Recursos de Cloud rechaza las solicitudes de exportación que no cumplan estas condiciones.
gcloud
Para ver el estado de la exportación, sigue estas instrucciones:
Obtén el
OPERATION_PATH
, que incluye el ID de la 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 comprobar 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, sigue estas instrucciones:
Obtén el
OPERATION_PATH
, que incluye el ID de la 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 comprobar el estado de tu exportación, haz 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
Ver una instantánea de un recurso en BigQuery
Consola
Ve a la página BigQuery Studio de la Google Cloud consola.
Para mostrar las tablas y las vistas del conjunto de datos, abre el panel de navegación. En la sección Recursos, selecciona tu proyecto para expandirlo y, a continuación, selecciona un conjunto de datos.
En la lista, selecciona la tabla.
Seleccione Detalles y anote el valor de Número de filas. Puede que necesites este valor para controlar el punto de partida de los resultados con la CLI de gcloud o la API REST.
Para ver un conjunto de datos de muestra, selecciona Vista previa.
REST
Para consultar los datos de la tabla, llama a
tabledata.list
. En el parámetro tableId
, especifica el nombre de la tabla.
Puedes configurar los siguientes parámetros opcionales para controlar la salida.
maxResults
es el número máximo de resultados que se devolverán.selectedFields
es una lista de columnas separadas por comas que se van a devolver. Si no se especifica, se devuelven todas las columnas.startIndex
es el índice basado en cero de la fila inicial que se va a leer.
Los valores se devuelven envueltos en un objeto JSON que debes analizar, tal como se describe en la tabledata.list
documentación de referencia.
Consultar una instantánea de un recurso en BigQuery
Una vez que haya exportado su instantánea a BigQuery, podrá ejecutar consultas en los metadatos de sus recursos.
De forma predeterminada, BigQuery ejecuta consultas interactivas o bajo demanda, lo que significa que la consulta se ejecuta lo antes posible. Las consultas interactivas se tienen en cuenta para tu límite de frecuencia simultánea y tu límite diario.
Los resultados de las consultas se guardan en una tabla temporal o permanente. Puede añadir o sobrescribir datos en una tabla que ya tenga o crear una nueva si no existe ninguna con el mismo nombre.
Para ejecutar una consulta interactiva que escriba el resultado en una tabla temporal, sigue estos pasos.
Consola
Ve a la página BigQuery Studio de la Google Cloud consola.
Selecciona
Redactar nueva consulta.En el área de texto Editor de consultas, introduce una consulta de SQL de BigQuery válida.
Opcional: Para cambiar la ubicación del tratamiento de datos, sigue estos pasos.
Selecciona Más y, a continuación, Configuración de la consulta.
En Ubicación de procesamiento, selecciona Selección automática y, a continuación, elige la ubicación de tus datos.
Para actualizar la configuración de la consulta, selecciona Guardar.
Selecciona Run (Ejecutar).
REST
Para iniciar un nuevo trabajo, llama al método
jobs.insert
. En el recurso de trabajo, define los siguientes parámetros.En el campo
configuration
, asigna al campoquery
el valor JobConfigurationQuery, que describe el trabajo de consulta de BigQuery.En el campo
jobReference
, define el campolocation
de forma adecuada para tu trabajo.
Para consultar los resultados, llama a
getQueryResults
. Encuesta hastajobComplete
es igual atrue
. Puedes consultar los errores y las advertencias en la listaerrors
.
Ejemplos adicionales de consultas de SQL
En esta sección se proporcionan consultas de SQL de ejemplo para analizar los metadatos de los recursos después de exportarlos a BigQuery. Consulta más información sobre la sintaxis de las consultas de SQL estándar.
Consultar directamente las columnas disponibles
Para ver 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
Trabajar con campos repetidos
Para encontrar las políticas de gestión de identidades y accesos (IAM) que conceden acceso a cuentas de Gmail, ejecuta la siguiente consulta. BigQuery usa UNNEST
para aplanar los 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 elementos 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 encontrar una organización, una carpeta o un proyecto en el mismo perímetro de servicio de Controles de 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";
Trabajar con cadenas JSON
Para encontrar reglas de cortafuegos abiertas, ejecuta la siguiente consulta. 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"
Al separar las tablas de cada tipo de recurso, puedes encontrar reglas de firewall abiertas con una consulta más sencilla 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";
Unir tablas de diferentes tipos de recursos
Para combinar 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 ninguna VM asociada.
En primer lugar, la consulta busca todas las subredes. A continuación, de 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 de cada tipo de recurso, podrás encontrar todas las subredes que no tengan ninguna VM asociada con una consulta más sencilla 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;
Buscar 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";