Ce document explique comment exporter un instantané d'éléments de votre organisation, de votre dossier ou de votre projet vers une table BigQuery, puis comment exécuter une analyse de données sur votre inventaire. BigQuery offre aux utilisateurs une expérience semblable à SQL pour analyser des données et produire des insights pertinents sans avoir à utiliser de scripts personnalisés.
Avant de commencer
Activez l'API Cloud Asset Inventory dans le projet à partir duquel vous exécutez les commandes Cloud Asset Inventory.
Assurez-vous que votre compte dispose du rôle approprié pour appeler l'API Cloud Asset Inventory. Pour connaître les autorisations individuelles pour chaque type d'appel, consultez la section Autorisations.
Créez un ensemble de données BigQuery vers lequel exporter les données, si vous n'en avez pas déjà un.
Limites
Lorsque vous exportez les données d'une table BigQuery, tous les champs ne sont pas compatibles avec l'inventaire des ressources Cloud.
Les champs d'éléments qui changent fréquemment, tels que
numBytes
,numLongTermBytes
,numPhysicalBytes
etnumRows
, peuvent être exportés avec une valeurnull
.L'exportation vers des tables en cluster BigQuery n'est pas possible.
Les tables BigQuery chiffrées avec des clés Cloud Key Management Service (Cloud KMS) personnalisées ne sont pas compatibles.
L'ajout du résultat de l'exportation à une table existante n'est pas possible, sauf si vous exportez vers une table partitionnée. La table de destination doit être vide ou vous devez l'écraser. Pour l'écraser, utilisez l'option
--output-bigquery-force
avec la CLI gcloud ou"force": true
avec l'API REST.Les types de ressources Google Kubernetes Engine (GKE), à l'exception de
container.googleapis.com/Cluster
etcontainer.googleapis.com/NodePool
, ne sont pas acceptés lors de l'exportation vers des tables distinctes pour chaque type de ressource.Cloud Asset Inventory rejette les requêtes d'exportation si une requête précédente vers la même destination a commencé il y a moins de 15 minutes et qu'elle est toujours en cours d'exécution. Toutefois, si une exportation a pris plus de 15 minutes, elle est marquée comme terminée et de nouvelles requêtes d'exportation vers la même destination sont autorisées.
Le type de contenu
ACCESS_POLICY
ne peut être exporté qu'au niveau de l'organisation.Si la table vers laquelle vous exportez des données existe déjà et est en cours d'exportation, une erreur
400
est renvoyée.
Schémas BigQuery utilisés pour l'exportation
Chaque table BigQuery est définie par un schéma qui décrit les noms de colonne, les types de données et d'autres informations. Définir le type de contenu pour une exportation détermine le schéma de votre table:
Ressource ou non spécifié:lorsque vous définissez le type de contenu sur
RESOURCE
ou que vous ne le spécifiez pas, et que vous définissez l'indicateurper-asset-type
surfalse
ou que vous ne l'utilisez pas, vous créez une table BigQuery dont le schéma est le suivant.Schéma de ressources
[ { "name": "name", "type": "STRING", "mode": "NULLABLE" }, { "name": "asset_type", "type": "STRING", "mode": "NULLABLE" }, { "name": "resource", "type": "RECORD", "mode": "NULLABLE", "fields": [ { "name": "version", "type": "STRING", "mode": "NULLABLE" }, { "name": "discovery_document_uri", "type": "STRING", "mode": "NULLABLE" }, { "name": "discovery_name", "type": "STRING", "mode": "NULLABLE" }, { "name": "resource_url", "type": "STRING", "mode": "NULLABLE" }, { "name": "parent", "type": "STRING", "mode": "NULLABLE" }, { "name": "data", "type": "STRING", "mode": "NULLABLE" }, { "name": "location", "type": "STRING", "mode": "NULLABLE" } ] }, { "name": "ancestors", "type": "STRING", "mode": "REPEATED" }, { "name": "update_time", "type": "TIMESTAMP", "mode": "NULLABLE" } ]
La colonne
resource.data
correspond aux métadonnées de la ressource représentées sous forme de chaîne JSON.Lorsque vous définissez le type de contenu sur
RESOURCE
ou ne le définissez pas, et que vous définissez l'indicateurper-asset-type
surtrue
, vous créez des tables distinctes pour chaque type d'élément. Le schéma de chaque table inclut des colonnes de type RECORD mises en correspondance avec les champs imbriqués du champResource.data
de ce type d'élément (jusqu'au niveau imbriqué 15 compatible avec BigQuery). Pour voir des exemples de tableaux, consultez export-assets-examples dans la console Google Cloud.Stratégie IAM:lorsque vous définissez le type de contenu sur
IAM_POLICY
dans l'API REST ou suriam-policy
dans la gcloud CLI, vous créez une table BigQuery dont le schéma est le suivant.Schéma de stratégie IAM
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "version", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "name": "role", "mode": "NULLABLE", "type": "STRING" }, { "name": "members", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "expression", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "location", "mode": "NULLABLE", "type": "STRING" } ], "name": "condition", "mode": "NULLABLE", "type": "RECORD" } ], "name": "bindings", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "name": "service", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "log_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "exempted_members", "mode": "REPEATED", "type": "STRING" } ], "name": "audit_log_configs", "mode": "REPEATED", "type": "RECORD" } ], "name": "audit_configs", "mode": "REPEATED", "type": "RECORD" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" } ], "name": "iam_policy", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Règle d'administration:lorsque vous définissez le type de contenu sur
ORG_POLICY
dans l'API REST ou surorg-policy
dans la CLI gcloud, vous créez une table BigQuery dont le schéma est le suivant.Schéma des règles d'administration
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "version", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "constraint", "mode": "NULLABLE", "type": "STRING" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "fields": [ { "name": "allowed_values", "mode": "REPEATED", "type": "STRING" }, { "name": "denied_values", "mode": "REPEATED", "type": "STRING" }, { "name": "all_values", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "suggested_value", "mode": "NULLABLE", "type": "STRING" }, { "name": "inherit_from_parent", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "list_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "enforced", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "boolean_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "_present", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "restore_default", "mode": "NULLABLE", "type": "RECORD" } ], "name": "org_policy", "mode": "REPEATED", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Stratégie VPCSC:lorsque vous définissez le type de contenu sur
ACCESS_POLICY
dans l'API REST ou suraccess-policy
dans la CLI gcloud, vous créez une table BigQuery dont le schéma est le suivant.Schéma de stratégie VPCSC
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "parent", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "scopes", "mode": "REPEATED", "type": "STRING" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" } ], "name": "access_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "fields": [ { "name": "ip_subnetworks", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "require_screenlock", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_encryption_statuses", "mode": "REPEATED", "type": "INTEGER" }, { "fields": [ { "name": "os_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "minimum_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "require_verified_chrome_os", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "os_constraints", "mode": "REPEATED", "type": "RECORD" }, { "name": "allowed_device_management_levels", "mode": "REPEATED", "type": "INTEGER" }, { "name": "require_admin_approval", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "require_corp_owned", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "device_policy", "mode": "NULLABLE", "type": "RECORD" }, { "name": "required_access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "negate", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "members", "mode": "REPEATED", "type": "STRING" }, { "name": "regions", "mode": "REPEATED", "type": "STRING" } ], "name": "conditions", "mode": "REPEATED", "type": "RECORD" }, { "name": "combining_function", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "basic", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "expression", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "location", "mode": "NULLABLE", "type": "STRING" } ], "name": "expr", "mode": "NULLABLE", "type": "RECORD" } ], "name": "custom", "mode": "NULLABLE", "type": "RECORD" } ], "name": "access_level", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "perimeter_type", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "name": "access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "restricted_services", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "enable_restriction", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_services", "mode": "REPEATED", "type": "STRING" } ], "name": "vpc_accessible_services", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "fields": [ { "name": "access_level", "mode": "NULLABLE", "type": "STRING" }, { "name": "resource", "mode": "NULLABLE", "type": "STRING" } ], "name": "sources", "mode": "REPEATED", "type": "RECORD" }, { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "ingress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "resources", "mode": "REPEATED", "type": "STRING" } ], "name": "ingress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "ingress_policies", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "egress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "external_resources", "mode": "REPEATED", "type": "STRING" } ], "name": "egress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "egress_policies", "mode": "REPEATED", "type": "RECORD" } ], "name": "status", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "name": "access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "restricted_services", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "enable_restriction", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_services", "mode": "REPEATED", "type": "STRING" } ], "name": "vpc_accessible_services", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "fields": [ { "name": "access_level", "mode": "NULLABLE", "type": "STRING" }, { "name": "resource", "mode": "NULLABLE", "type": "STRING" } ], "name": "sources", "mode": "REPEATED", "type": "RECORD" }, { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "ingress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "resources", "mode": "REPEATED", "type": "STRING" } ], "name": "ingress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "ingress_policies", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "egress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "external_resources", "mode": "REPEATED", "type": "STRING" } ], "name": "egress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "egress_policies", "mode": "REPEATED", "type": "RECORD" } ], "name": "spec", "mode": "NULLABLE", "type": "RECORD" }, { "name": "use_explicit_dry_run_spec", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "service_perimeter", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Inventaire des instances OSConfig:lorsque vous définissez le type de contenu sur
OS_INVENTORY
dans l'API REST ouos-inventory
dans l'interface de ligne de commande gcloud, vous créez une table BigQuery dont le schéma est le suivant.Schéma de l'inventaire de l'OS
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "hostname", "mode": "NULLABLE", "type": "STRING" }, { "name": "long_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "short_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "kernel_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "kernel_release", "mode": "NULLABLE", "type": "STRING" }, { "name": "osconfig_agent_version", "mode": "NULLABLE", "type": "STRING" } ], "name": "os_info", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "key", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "origin_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "create_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "name": "type", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "yum_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "apt_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "googet_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "patch_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "category", "mode": "NULLABLE", "type": "STRING" }, { "name": "severity", "mode": "NULLABLE", "type": "STRING" }, { "name": "summary", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_patch", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "name", "mode": "NULLABLE", "type": "STRING" } ], "name": "categories", "mode": "REPEATED", "type": "RECORD" }, { "name": "kb_article_ids", "mode": "REPEATED", "type": "STRING" }, { "name": "support_url", "mode": "NULLABLE", "type": "STRING" }, { "name": "more_info_urls", "mode": "REPEATED", "type": "STRING" }, { "name": "update_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "revision_number", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "last_deployment_change_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "wua_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "caption", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "hot_fix_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "install_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "qfe_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "cos_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "display_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "display_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "publisher", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "year", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "month", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "day", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "install_date", "mode": "NULLABLE", "type": "RECORD" }, { "name": "help_link", "mode": "NULLABLE", "type": "STRING" } ], "name": "windows_application", "mode": "NULLABLE", "type": "RECORD" } ], "name": "installed_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "yum_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "apt_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "googet_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "patch_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "category", "mode": "NULLABLE", "type": "STRING" }, { "name": "severity", "mode": "NULLABLE", "type": "STRING" }, { "name": "summary", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_patch", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "name", "mode": "NULLABLE", "type": "STRING" } ], "name": "categories", "mode": "REPEATED", "type": "RECORD" }, { "name": "kb_article_ids", "mode": "REPEATED", "type": "STRING" }, { "name": "support_url", "mode": "NULLABLE", "type": "STRING" }, { "name": "more_info_urls", "mode": "REPEATED", "type": "STRING" }, { "name": "update_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "revision_number", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "last_deployment_change_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "wua_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "caption", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "hot_fix_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "install_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "qfe_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "cos_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "display_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "display_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "publisher", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "year", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "month", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "day", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "install_date", "mode": "NULLABLE", "type": "RECORD" }, { "name": "help_link", "mode": "NULLABLE", "type": "STRING" } ], "name": "windows_application", "mode": "NULLABLE", "type": "RECORD" } ], "name": "available_package", "mode": "NULLABLE", "type": "RECORD" } ], "name": "value", "mode": "NULLABLE", "type": "RECORD" } ], "name": "items", "mode": "REPEATED", "type": "RECORD" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "os_inventory", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Relation:lorsque vous définissez le type de contenu sur
RELATIONSHIP
dans l'API REST ou surrelationship
dans la gcloud CLI, vous créez une table BigQuery dont le schéma est le suivant.Schéma de relation
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "asset", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "relationship_type", "mode": "NULLABLE", "type": "STRING" } ], "name": "related_asset", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
Exporter un instantané d'élément
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
Indiquez les valeurs suivantes :
-
SCOPE
: utilisez l'une des valeurs suivantes:-
project=PROJECT_ID
, oùPROJECT_ID
est l'ID du projet contenant les métadonnées des éléments que vous souhaitez exporter. -
folder=FOLDER_ID
, oùFOLDER_ID
est l'ID du dossier contenant les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'un Google Cloud dossier
Console Google Cloud
Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:
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)"
Où TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur
--format
pour afficher plus d'informations sur les dossiers trouvés.La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, oùORGANIZATION_ID
est l'ID de l'organisation qui possède les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'une Google Cloud organisation
Console Google Cloud
Pour trouver l'ID d'une Google Cloud organisation, procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'une Google Cloud organisation à l'aide de la commande suivante:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: facultatif. ID de projet dans lequel se trouve l'agent de service d'inventaire des ressources Cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et vos tables BigQuery. Découvrez comment définir le projet de facturation. ASSET_TYPE_#
: facultatif. Liste des types d'éléments pouvant faire l'objet d'une recherche séparés par une virgule. Les expressions régulières compatibles avec RE2 sont acceptées. Si l'expression régulière ne correspond à aucun type d'élément compatible, une erreurINVALID_ARGUMENT
est renvoyée. Lorsque--asset-types
n'est pas spécifié, tous les types d'assets sont renvoyés.CONTENT_TYPE
: facultatif. Type de contenu des métadonnées que vous souhaitez récupérer. Lorsque--content-type
n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.-
RELATIONSHIP_TYPE_#
: facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définirCONTENT_TYPE
surRELATIONSHIP
. -
SNAPSHOT_TIME
: facultatif. Heure à laquelle vous souhaitez prendre un instantané de vos éléments, au format gcloud topic datetime. La valeur ne doit pas remonter à plus de 35 jours. Lorsque--snapshot-time
n'est pas spécifié, un instantané est pris à l'heure actuelle. -
BIGQUERY_PROJECT_ID
: ID du projet dans lequel se trouve la table BigQuery que vous souhaitez exporter. -
DATASET_ID
: ID de l'ensemble de données BigQuery. -
TABLE_NAME
: table BigQuery vers laquelle vous exportez vos métadonnées. Si elle n'existe pas, elle est créée.
L'indicateur --output-bigquery-force
écrase la table de destination si elle existe.
Consultez la documentation de référence de la gcloud CLI pour toutes les options.
Exemple
Exécutez la commande suivante pour exporter vos métadonnées resource
telles qu'elles étaient le 30 janvier 2024 dans le projet my-project
vers la table 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
Exemple de réponse
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éthode HTTP et URL :
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
En-têtes:
X-Goog-User-Project: BILLING_PROJECT_ID
Corps JSON de la requête :
{ "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 } } }
Indiquez les valeurs suivantes :
-
SCOPE_PATH
: utilisez l'une des valeurs suivantes:Les valeurs autorisées sont les suivantes :
-
projects/PROJECT_ID
, oùPROJECT_ID
est l'ID du projet contenant les métadonnées des éléments que vous souhaitez exporter. -
projects/PROJECT_NUMBER
, oùPROJECT_NUMBER
est le numéro du projet contenant les métadonnées d'élément que vous souhaitez exporter.Trouver un Google Cloud numéro de projet
Console Google Cloud
Pour trouver un numéro de projet Google Cloud , procédez comme suit:
-
Accédez à la page Bienvenue dans la console Google Cloud.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
-
Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.
Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.
CLI gcloud
Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, oùFOLDER_ID
est l'ID du dossier contenant les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'un Google Cloud dossier
Console Google Cloud
Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:
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)"
Où TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur
--format
pour afficher plus d'informations sur les dossiers trouvés.La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, oùORGANIZATION_ID
est l'ID de l'organisation qui possède les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'une Google Cloud organisation
Console Google Cloud
Pour trouver l'ID d'une Google Cloud organisation, procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'une Google Cloud organisation à l'aide de la commande suivante:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: ID du projet dans lequel se trouve l'agent de service d'inventaire des ressources Cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et vos tables BigQuery. Découvrez comment définir le projet de facturation. CONTENT_TYPE
: type de contenu des métadonnées que vous souhaitez récupérer. LorsquecontentType
n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.-
RELATIONSHIP_TYPE_#
: facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définirCONTENT_TYPE
surRELATIONSHIP
. -
SNAPSHOT_TIME
: facultatif. Heure à laquelle vous souhaitez prendre un instantané de vos éléments, au format RFC 3339. La valeur ne doit pas remonter à plus de 35 jours. LorsquereadTime
n'est pas spécifié, un instantané est pris à l'heure actuelle. -
BIGQUERY_PROJECT_ID
: ID du projet dans lequel se trouve la table BigQuery que vous souhaitez exporter. -
DATASET_ID
: ID de l'ensemble de données BigQuery. -
TABLE_NAME
: table BigQuery vers laquelle vous exportez vos métadonnées. Si elle n'existe pas, elle est créée.
La paire clé-valeur "force": true
écrase la table de destination si elle existe.
Consultez la documentation de référence REST pour toutes les options.
Exemples de commandes
Exécutez l'une des commandes suivantes pour exporter vos métadonnées resource
telles qu'elles étaient le 30 janvier 2024 dans le projet my-project
vers la table BigQuery my-table
.
curl (Linux, macOS ou Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "force": true } } }' \ https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "force": true } } } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets" | Select-Object -Expand Content
Exemple de réponse
{ "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
Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, consultez la page Bibliothèques clientes Cloud Asset Inventory.
Pour vous authentifier auprès de Cloud Asset Inventory, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, consultez la page Bibliothèques clientes Cloud Asset Inventory.
Pour vous authentifier auprès de Cloud Asset Inventory, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, consultez la page Bibliothèques clientes Cloud Asset Inventory.
Pour vous authentifier auprès de Cloud Asset Inventory, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour savoir comment installer et utiliser la bibliothèque cliente pour Cloud Asset Inventory, consultez la page Bibliothèques clientes Cloud Asset Inventory.
Pour vous authentifier auprès de Cloud Asset Inventory, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Exporter un instantané d'élément vers des tables distinctes pour chaque type d'élément
Vous pouvez exporter des composants vers des tables BigQuery distinctes pour chaque type de composant à l'aide de l'option --per-asset-type
dans la CLI gcloud et de "separateTablesPerAssetType": true
dans les requêtes de l'API REST.
Dans ce mode, le nom de chaque table est TABLE_NAME
concaténé avec _
(trait de soulignement) et le nom du type d'élément. Les caractères non alphanumériques sont remplacés par _
.
Si l'exportation vers une table échoue, l'ensemble de l'opération d'exportation échoue et renvoie la première erreur. Les résultats des exportations précédentes réussies sont conservés.
Les types suivants sont regroupés dans une chaîne JSON pour résoudre un problème de compatibilité entre Proto3 et les types BigQuery.
google.protobuf.Timestamp
google.protobuf.Duration
google.protobuf.FieldMask
google.protobuf.ListValue
google.protobuf.Value
google.protobuf.Struct
google.api.*
gcloud
gcloud asset export \ --SCOPE \ --billing-project=BILLING_PROJECT_ID \ --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \ --content-type=CONTENT_TYPE \ --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \ --snapshot-time="SNAPSHOT_TIME" \ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \ --per-asset-type \ --output-bigquery-force
Indiquez les valeurs suivantes :
-
SCOPE
: utilisez l'une des valeurs suivantes:-
project=PROJECT_ID
, oùPROJECT_ID
est l'ID du projet contenant les métadonnées des éléments que vous souhaitez exporter. -
folder=FOLDER_ID
, oùFOLDER_ID
est l'ID du dossier contenant les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'un Google Cloud dossier
Console Google Cloud
Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:
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)"
Où TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur
--format
pour afficher plus d'informations sur les dossiers trouvés.La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, oùORGANIZATION_ID
est l'ID de l'organisation qui possède les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'une Google Cloud organisation
Console Google Cloud
Pour trouver l'ID d'une Google Cloud organisation, procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'une Google Cloud organisation à l'aide de la commande suivante:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: facultatif. ID de projet dans lequel se trouve l'agent de service d'inventaire des ressources Cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et vos tables BigQuery. Découvrez comment définir le projet de facturation. ASSET_TYPE_#
: facultatif. Liste des types d'éléments pouvant faire l'objet d'une recherche séparés par une virgule. Les expressions régulières compatibles avec RE2 sont acceptées. Si l'expression régulière ne correspond à aucun type d'élément compatible, une erreurINVALID_ARGUMENT
est renvoyée. Lorsque--asset-types
n'est pas spécifié, tous les types d'assets sont renvoyés.CONTENT_TYPE
: facultatif. Type de contenu des métadonnées que vous souhaitez récupérer. Lorsque--content-type
n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.-
RELATIONSHIP_TYPE_#
: facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définirCONTENT_TYPE
surRELATIONSHIP
. -
SNAPSHOT_TIME
: facultatif. Heure à laquelle vous souhaitez prendre un instantané de vos éléments, au format gcloud topic datetime. La valeur ne doit pas remonter à plus de 35 jours. Lorsque--snapshot-time
n'est pas spécifié, un instantané est pris à l'heure actuelle. -
BIGQUERY_PROJECT_ID
: ID du projet dans lequel se trouve la table BigQuery que vous souhaitez exporter. -
DATASET_ID
: ID de l'ensemble de données BigQuery. -
TABLE_NAME
: table BigQuery vers laquelle vous exportez vos métadonnées. Si elle n'existe pas, elle est créée.
L'indicateur --output-bigquery-force
écrase la table de destination si elle existe.
Consultez la documentation de référence de la gcloud CLI pour toutes les options.
Exemple
Exécutez la commande suivante pour exporter vos métadonnées resource
telles qu'elles étaient le 30 janvier 2024 dans le projet my-project
vers plusieurs tables BigQuery dont le préfixe est 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 \ --per-asset-type \ --output-bigquery-force
REST
Méthode HTTP et URL :
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
En-têtes:
X-Goog-User-Project: BILLING_PROJECT_ID
Corps JSON de la requête :
{ "contentType": "CONTENT_TYPE", "relationshipTypes": [ "RELATIONSHIP_TYPE_1", "RELATIONSHIP_TYPE_2", "..." ], "readTime": "SNAPSHOT_TIME", "outputConfig": { "bigqueryDestination": { "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID", "table": "TABLE_NAME", "force": true, "separateTablesPerAssetType": true } } }
Indiquez les valeurs suivantes :
-
SCOPE_PATH
: utilisez l'une des valeurs suivantes:Les valeurs autorisées sont les suivantes :
-
projects/PROJECT_ID
, oùPROJECT_ID
est l'ID du projet contenant les métadonnées des éléments que vous souhaitez exporter. -
projects/PROJECT_NUMBER
, oùPROJECT_NUMBER
est le numéro du projet contenant les métadonnées d'élément que vous souhaitez exporter.Trouver un Google Cloud numéro de projet
Console Google Cloud
Pour trouver un numéro de projet Google Cloud , procédez comme suit:
-
Accédez à la page Bienvenue dans la console Google Cloud.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
-
Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.
Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.
CLI gcloud
Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, oùFOLDER_ID
est l'ID du dossier contenant les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'un Google Cloud dossier
Console Google Cloud
Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:
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)"
Où TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur
--format
pour afficher plus d'informations sur les dossiers trouvés.La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, oùORGANIZATION_ID
est l'ID de l'organisation qui possède les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'une Google Cloud organisation
Console Google Cloud
Pour trouver l'ID d'une Google Cloud organisation, procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'une Google Cloud organisation à l'aide de la commande suivante:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: ID du projet dans lequel se trouve l'agent de service d'inventaire des ressources Cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et vos tables BigQuery. Découvrez comment définir le projet de facturation. CONTENT_TYPE
: type de contenu des métadonnées que vous souhaitez récupérer. LorsquecontentType
n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.-
RELATIONSHIP_TYPE_#
: facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définirCONTENT_TYPE
surRELATIONSHIP
. -
SNAPSHOT_TIME
: facultatif. Heure à laquelle vous souhaitez prendre un instantané de vos éléments, au format RFC 3339. La valeur ne doit pas remonter à plus de 35 jours. LorsquereadTime
n'est pas spécifié, un instantané est pris à l'heure actuelle. -
BIGQUERY_PROJECT_ID
: ID du projet dans lequel se trouve la table BigQuery que vous souhaitez exporter. -
DATASET_ID
: ID de l'ensemble de données BigQuery. -
TABLE_NAME
: table BigQuery vers laquelle vous exportez vos métadonnées. Si elle n'existe pas, elle est créée.
La paire clé-valeur "force": true
écrase la table de destination si elle existe.
Exemples de commandes
Exécutez l'une des commandes suivantes pour exporter vos métadonnées resource
telles qu'elles étaient le 30 janvier 2024 dans le projet my-project
vers plusieurs tables BigQuery dont le préfixe est my-table
.
curl (Linux, macOS ou Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "force": true, "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
Exporter un instantané d'élément vers une table partitionnée par colonne d'unité de temps
Vous pouvez exporter des éléments d'un projet vers des tables partitionnées par colonne d'unité temporelle.
L'instantané exporté est stocké dans une table BigQuery nommée TABLE_NAME
avec une précision quotidienne et deux colonnes d'horodatage supplémentaires, readTime
et requestTime
, dont l'une est spécifiée comme colonne de partition avec la valeur PARTITION_KEY
.
Pour exporter des éléments d'un projet vers des tables partitionnées, envoyez l'une des requêtes suivantes.
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
Indiquez les valeurs suivantes :
-
SCOPE
: utilisez l'une des valeurs suivantes:-
project=PROJECT_ID
, oùPROJECT_ID
est l'ID du projet contenant les métadonnées des éléments que vous souhaitez exporter. -
folder=FOLDER_ID
, oùFOLDER_ID
est l'ID du dossier contenant les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'un Google Cloud dossier
Console Google Cloud
Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:
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)"
Où TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur
--format
pour afficher plus d'informations sur les dossiers trouvés.La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
, oùORGANIZATION_ID
est l'ID de l'organisation qui possède les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'une Google Cloud organisation
Console Google Cloud
Pour trouver l'ID d'une Google Cloud organisation, procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'une Google Cloud organisation à l'aide de la commande suivante:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: facultatif. ID de projet dans lequel se trouve l'agent de service d'inventaire des ressources Cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et vos tables BigQuery. Découvrez comment définir le projet de facturation. ASSET_TYPE_#
: facultatif. Liste des types d'éléments pouvant faire l'objet d'une recherche séparés par une virgule. Les expressions régulières compatibles avec RE2 sont acceptées. Si l'expression régulière ne correspond à aucun type d'élément compatible, une erreurINVALID_ARGUMENT
est renvoyée. Lorsque--asset-types
n'est pas spécifié, tous les types d'assets sont renvoyés.CONTENT_TYPE
: facultatif. Type de contenu des métadonnées que vous souhaitez récupérer. Lorsque--content-type
n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.-
RELATIONSHIP_TYPE_#
: facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définirCONTENT_TYPE
surRELATIONSHIP
. -
SNAPSHOT_TIME
: facultatif. Heure à laquelle vous souhaitez prendre un instantané de vos éléments, au format gcloud topic datetime. La valeur ne doit pas remonter à plus de 35 jours. Lorsque--snapshot-time
n'est pas spécifié, un instantané est pris à l'heure actuelle. -
BIGQUERY_PROJECT_ID
: ID du projet dans lequel se trouve la table BigQuery que vous souhaitez exporter. -
DATASET_ID
: ID de l'ensemble de données BigQuery. -
TABLE_NAME
: table BigQuery vers laquelle vous exportez vos métadonnées. Si elle n'existe pas, elle est créée. -
PARTITION_KEY
: colonne de clé de partitionnement lors de l'exportation vers des tables partitionnées BigQuery. Les valeurs valides sontread-time
etrequest-time
.
L'indicateur --output-bigquery-force
écrase les données de la partition correspondante dans la table de destination. Les données de différentes partitions restent intactes.
Si --output-bigquery-force
n'est pas spécifié, les données exportées sont ajoutées à la partition correspondante.
L'opération d'exportation échoue si une mise à jour de schéma ou une tentative d'ajout de données échoue. Cela inclut si la table de destination existe déjà et ne dispose pas du schéma attendu par l'exportation.
Consultez la documentation de référence de la gcloud CLI pour toutes les options.
Exemple
Exécutez la commande suivante pour exporter vos métadonnées resource
telles qu'elles étaient le 30 janvier 2024 dans le projet my-project
vers la table 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éthode HTTP et URL :
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets
En-têtes:
X-Goog-User-Project: BILLING_PROJECT_ID
Corps JSON de la requête :
{ "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, } } }
Indiquez les valeurs suivantes :
-
SCOPE_PATH
: utilisez l'une des valeurs suivantes:Les valeurs autorisées sont les suivantes :
-
projects/PROJECT_ID
, oùPROJECT_ID
est l'ID du projet contenant les métadonnées des éléments que vous souhaitez exporter. -
projects/PROJECT_NUMBER
, oùPROJECT_NUMBER
est le numéro du projet contenant les métadonnées d'élément que vous souhaitez exporter.Trouver un Google Cloud numéro de projet
Console Google Cloud
Pour trouver un numéro de projet Google Cloud , procédez comme suit:
-
Accédez à la page Bienvenue dans la console Google Cloud.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
-
Sélectionnez votre organisation dans la liste, puis recherchez le nom de votre projet. Le nom, le numéro et l'ID du projet sont affichés près de l'en-tête Bienvenue.
Jusqu'à 4 000 ressources peuvent être affichées. Si le projet que vous recherchez ne s'affiche pas, accédez à la page Gérer les ressources et filtrez la liste en utilisant le nom de ce projet.
CLI gcloud
Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
-
folders/FOLDER_ID
, oùFOLDER_ID
est l'ID du dossier contenant les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'un Google Cloud dossier
Console Google Cloud
Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Recherchez le nom de votre dossier. L'ID du dossier s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'un dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:
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)"
Où TOP_LEVEL_FOLDER_NAME correspond à une correspondance partielle ou complète de la chaîne pour le nom du dossier. Supprimez l'indicateur
--format
pour afficher plus d'informations sur les dossiers trouvés.La commande précédente ne renvoie pas les ID des sous-dossiers dans les dossiers. Pour ce faire, exécutez la commande suivante à l'aide de l'ID d'un dossier de niveau supérieur:
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
, oùORGANIZATION_ID
est l'ID de l'organisation qui possède les métadonnées d'élément que vous souhaitez exporter.Trouver l'ID d'une Google Cloud organisation
Console Google Cloud
Pour trouver l'ID d'une Google Cloud organisation, procédez comme suit:
-
Accédez à Google Cloud Console.
- Cliquez sur la liste déroulante Basculateur dans la barre de menu.
- Sélectionnez votre organisation dans la liste.
- Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.
CLI gcloud
Vous pouvez récupérer l'ID d'une Google Cloud organisation à l'aide de la commande suivante:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
BILLING_PROJECT_ID
: ID du projet dans lequel se trouve l'agent de service d'inventaire des ressources Cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et vos tables BigQuery. Découvrez comment définir le projet de facturation. CONTENT_TYPE
: type de contenu des métadonnées que vous souhaitez récupérer. LorsquecontentType
n'est pas spécifié, seules les informations de base sont renvoyées, telles que les noms des composants, la dernière fois qu'ils ont été mis à jour, ainsi que les projets, les dossiers et les organisations auxquels ils appartiennent.-
RELATIONSHIP_TYPE_#
: facultatif. Nécessite un accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist. Liste des types de relations d'éléments que vous souhaitez récupérer, séparés par une virgule. Pour que cela fonctionne, vous devez définirCONTENT_TYPE
surRELATIONSHIP
. -
SNAPSHOT_TIME
: facultatif. Heure à laquelle vous souhaitez prendre un instantané de vos éléments, au format RFC 3339. La valeur ne doit pas remonter à plus de 35 jours. LorsquereadTime
n'est pas spécifié, un instantané est pris à l'heure actuelle. -
BIGQUERY_PROJECT_ID
: ID du projet dans lequel se trouve la table BigQuery que vous souhaitez exporter. -
DATASET_ID
: ID de l'ensemble de données BigQuery. -
TABLE_NAME
: table BigQuery vers laquelle vous exportez vos métadonnées. Si elle n'existe pas, elle est créée. -
PARTITION_KEY
: colonne de clé de partitionnement lors de l'exportation vers des tables partitionnées BigQuery. Les valeurs valides sontREAD_TIME
etREQUEST_TIME
.
La paire clé-valeur "force": true
écrase les données de la partition correspondante dans la table de destination. Les données de différentes partitions restent intactes.
Si force
n'est pas défini ou est défini sur false
, les données exportées sont ajoutées à la partition correspondante.
L'opération d'exportation échoue si une mise à jour de schéma ou une tentative d'ajout de données échoue. Cela inclut si la table de destination existe déjà et ne dispose pas du schéma attendu par l'exportation.
Exemples de commandes
Exécutez l'une des commandes suivantes pour exporter vos métadonnées resource
telles qu'elles étaient le 30 janvier 2024 dans le projet my-project
vers la table BigQuery my-table
.
curl (Linux, macOS ou Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "partitionSpec": { "partitionKey": "my-partition-key" }, "force": true, } } }' \ https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "contentType": "RESOURCE", "readTime": "2024-01-30T00:00:00Z", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "partitionSpec": { "partitionKey": "my-partition-key" }, "force": true, } } } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets" | Select-Object -Expand Content
Vérifier l'état d'une exportation
Les exportations prennent du temps. Pour vérifier si une exportation est terminée, vous pouvez interroger l'opération à l'aide de son ID d'opération.
Sachez que même si votre exportation est terminée, quelqu'un a peut-être envoyé une autre demande d'exportation vers la même destination pour une autre opération. Vous pouvez envoyer de nouvelles requêtes d'exportation vers la même destination une fois qu'une requête précédente est terminée ou si plus de 15 minutes se sont écoulées. Les requêtes d'exportation effectuées en dehors de ces conditions sont rejetées par l'inventaire des éléments cloud.
gcloud
Pour afficher l'état de votre exportation, procédez comme suit:
Obtenez le
OPERATION_PATH
, qui inclut l'ID d'opération, à partir de la réponse à votre requête d'exportation. L'OPERATION_PATH
s'affiche dans la réponse à l'exportation, au format suivant:projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
Pour vérifier l'état de l'exportation, exécutez la commande suivante avec l'ID d'opération
OPERATION_PATH
:gcloud asset operations describe OPERATION_PATH
REST
Pour afficher l'état de votre exportation, procédez comme suit:
Obtenez le
OPERATION_PATH
, qui inclut l'ID d'opération, à partir de la réponse à votre requête d'exportation. L'OPERATION_PATH
s'affiche sous la forme de la valeur du champname
dans la réponse à l'exportation, au format suivant:projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
Pour vérifier l'état de votre exportation, effectuez la requête suivante.
REST
Méthode HTTP et URL :
GET https://cloudasset.googleapis.com/v1/OPERATION_PATH
Exemples de commandes
curl (Linux, macOS ou Cloud Shell)
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://cloudasset.googleapis.com/v1/OPERATION_PATH
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://cloudasset.googleapis.com/v1/OPERATION_PATH" | Select-Object -Expand Content
Afficher un instantané d'élément dans BigQuery
Console
Accédez à la page BigQuery Studio de la console Google Cloud.
Pour afficher les tables et les vues de l'ensemble de données, ouvrez le panneau de navigation. Dans la section Ressources, sélectionnez votre projet pour le développer, puis sélectionnez un ensemble de données.
Dans la liste, sélectionnez votre table.
Sélectionnez Détails et notez la valeur indiquée pour le champ Nombre de lignes. Vous aurez peut-être besoin de cette valeur pour contrôler le point de départ de vos résultats à l'aide de la CLI gcloud ou de l'API REST.
Pour afficher un exemple d'ensemble de données, sélectionnez Aperçu.
REST
Pour parcourir les données d'une table, appelez tabledata.list
. Dans le paramètre tableId
, spécifiez le nom de votre table.
Vous pouvez configurer les paramètres facultatifs suivants pour contrôler la sortie.
maxResults
est le nombre maximal de résultats à renvoyer.selectedFields
est une liste de colonnes à renvoyer, séparées par une virgule. Si ce paramètre n'est pas spécifié, toutes les colonnes sont renvoyées.startIndex
est l'index basé sur zéro de la première ligne à lire.
Les valeurs renvoyées sont encapsulées dans un objet JSON que vous devez analyser, comme décrit dans la documentation de référence de tabledata.list
.
Interroger un instantané d'élément dans BigQuery
Après avoir exporté votre instantané vers BigQuery, vous pouvez exécuter des requêtes sur vos métadonnées d'éléments.
Par défaut (ou à la demande), BigQuery exécute des tâches de requête interactives, ce qui signifie que la requête est exécutée dès que possible. Les requêtes interactives sont comptabilisées dans votre limite de débit simultané et votre limite quotidienne.
Les résultats de requête sont enregistrés dans une table temporaire ou permanente. Vous pouvez choisir d'ajouter ou d'écraser les données dans une table existante, ou de créer une nouvelle table si aucune table portant le même nom n'existe.
Pour exécuter une requête interactive qui écrit les résultats dans une table temporaire, procédez comme suit :
Console
Accédez à la page BigQuery Studio de la console Google Cloud.
Sélectionnez
Saisir une nouvelle requête.Dans la zone de texte de l'éditeur de requête, saisissez une requête SQL BigQuery valide.
Facultatif : Pour modifier l'emplacement de traitement des données, procédez comme suit :
Sélectionnez Plus, puis Paramètres de requête.
Dans le champ Zone de traitement, sélectionnez Sélection automatique, puis l'emplacement de vos données.
Pour mettre à jour les paramètres de la requête, sélectionnez Enregistrer.
Sélectionnez Exécuter.
REST
Pour démarrer une nouvelle tâche, appelez la méthode
jobs.insert
. Dans la ressource de tâche, définissez les paramètres suivants.Dans le champ
configuration
, définissez le champquery
sur un objet JobConfigurationQuery qui décrit la tâche de requête BigQuery.Dans le champ
jobReference
, définissez le champlocation
de manière appropriée pour votre tâche.
Pour interroger les résultats, appelez
getQueryResults
jusqu'à ce quejobComplete
ait la valeurtrue
. Vous pouvez vérifier la présence d'erreurs et d'avertissements dans la listeerrors
.
Autres exemples de requêtes SQL
Cette section fournit des exemples de requêtes SQL permettant d'analyser vos métadonnées d'éléments après les avoir exportées vers BigQuery. Pour en savoir plus, consultez la syntaxe des requêtes en SQL standard.
Interroger directement les colonnes disponibles
Pour connaître la quantité de chaque type d'élément, exécutez la requête suivante :
SELECT asset_type, COUNT(*) AS asset_count
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
GROUP BY asset_type
ORDER BY asset_count DESC
Utiliser des champs répétés
Pour trouver les stratégies IAM (Identity and Access Management) qui accordent l'accès aux comptes Gmail, exécutez la requête suivante. BigQuery utilise UNNEST
pour aplatir les champs répétés dans une table que vous pouvez interroger directement:
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"
Pour rechercher une organisation, un dossier ou un projet qui autorise la création à l'aide d'une adresse IP publique, exécutez la requête suivante. Cette requête est utile, car autoriser des adresses IP publiques avec des instances Cloud SQL peut créer des failles, sauf si SSL ou un proxy est configuré:
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);
Pour rechercher une organisation, un dossier ou un projet dans le même périmètre de service VPC Service Controls d'un projet, exécutez la requête suivante:
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";
Utiliser des chaînes JSON
Pour trouver les règles de pare-feu ouvertes, exécutez la requête suivante. Obtenez davantage d'informations sur les fonctions JSON utilisées dans 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"
En séparant les tables pour chaque type de ressource, vous pouvez trouver les règles de pare-feu ouvertes à l'aide d'une requête plus simple et plus rapide.
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";
Joindre des tables de différents types de ressources
Pour joindre des tables de différents types de ressources, exécutez la requête suivante. L'exemple suivant montre comment rechercher tous les sous-réseaux qui ne sont associés à aucune VM.
La requête trouve tout d'abord tous les sous-réseaux. Ensuite, elle sélectionne dans cette liste les sous-réseaux pour lesquels les valeurs selfLink
ne sont pas présentes.
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
En séparant les tables par type de ressource, vous pouvez trouver tous les sous-réseaux qui ne sont associés à aucune VM à l'aide d'une requête plus simple et plus rapide.
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;
Rechercher des clusters Dataproc vulnérables en raison de 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";