Interroger des composants avec SQL

Vous pouvez interroger les composants de votre projet, dossier ou organisation à l'aide d'un dialecte compatible avec BigQuery SQL.

Avant de commencer

  1. Activez l'API Cloud Asset Inventory dans le projet à partir duquel vous exécutez les commandes inventaire des éléments cloud.

    Activer l'API Cloud Asset Inventory

  2. 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 Autorisations.

Limites

Tables que vous pouvez interroger

Vous pouvez interroger les tables suivantes :

  • Pour les types de contenu RESOURCE, les noms de table dans l'ensemble de données correspondent au nom du type d'élément, en supposant que le type d'élément existe. Par exemple, la table compute_googleapis_com_Instance contient les métadonnées des instances Compute Engine.

  • Pour les types de contenu autres que RESOURCE, les noms de tables de l'ensemble de données correspondent aux noms de types de contenu RPC/REST. Par exemple, ACCESS_POLICY.

  • Pour interroger les métadonnées standards de ressources pour tous les types de ressources, utilisez le nom de table STANDARD_METADATA. Cela inclut tous les champs, à l'exception de resource.DATA, qui est spécifique à chaque type de ressource.

Interroger les métadonnées des composants

Console

Pour interroger les métadonnées des composants de votre projet, dossier ou organisation, procédez comme suit :

  1. Dans la console Google Cloud , accédez à l'onglet Requête sur les éléments sur la page Inventaire des éléments.

    Accéder à la requête sur un élément

    Si l'onglet Requête d'élément ne s'affiche pas, vous devez avoir accès au niveau Premium ou Enterprise de Security Command Center ou à Gemini Cloud Assist.

  2. Passez au projet, au dossier ou à l'organisation que vous souhaitez interroger.
  3. Cliquez sur l'onglet Requête sur les composants.
  4. Pour interroger les métadonnées d'un élément, utilisez un exemple de requête ou créez la vôtre :

    • Pour utiliser un exemple, cliquez sur une entrée de l'onglet Bibliothèque de requêtes pour prévisualiser la requête. Cliquez sur Appliquer pour copier cet exemple dans la zone Modifier la requête, puis modifiez la requête ou cliquez sur Exécuter pour l'exécuter.
    • Pour créer votre propre requête, saisissez le texte de la requête directement dans la zone Modifier la requête, puis cliquez sur Exécuter pour l'exécuter. Pour vous aider à écrire votre propre requête, vous pouvez cliquer sur une table dans le volet Sélectionner une table pour prévisualiser son schéma et son contenu. Pour savoir comment construire une requête, consultez la section Syntaxe des requêtes.

    Les métadonnées des composants correspondant à la requête s'affichent dans l'onglet Résultat de la requête.

  5. Facultatif : Pour télécharger les ensembles de résultats de la requête au format CSV, cliquez sur Exporter.

    La taille maximale du fichier CSV est de 2 Mo. Si la demande de téléchargement échoue parce que la taille du fichier dépasse cette limite, un message s'affiche avec des instructions pour exporter tous les résultats.

gcloud

gcloud asset query \
    --SCOPE \
    --statement="SQL_SELECT_QUERY" \
    --timeout="TIMEOUTs"

Indiquez les valeurs suivantes :

  • SCOPE : utilisez l'une des valeurs suivantes :

    • project=PROJECT_ID, où PROJECT_ID est l'ID du projet contenant les composants que vous souhaitez interroger.
    • folder=FOLDER_ID, où FOLDER_ID correspond à l'ID du dossier contenant les composants que vous souhaitez interroger.

      Trouver l'ID d'un dossier Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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)"

      TOP_LEVEL_FOLDER_NAME est une correspondance de chaîne partielle ou complète pour le nom du dossier. Supprimez l'option --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 premier niveau :

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID correspond à l'ID de l'organisation qui possède les composants sur lesquels vous souhaitez effectuer des requêtes.

      Trouver l'ID d'une organisation Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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 organisation Google Cloud à l'aide de la commande suivante :

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY : requête SQL SELECT.
  • TIMEOUT : facultatif. Durée maximale, en secondes, pendant laquelle un client doit attendre la fin de la requête avant de continuer. Utilisez des délais d'attente pour exécuter votre requête de manière asynchrone et récupérer les résultats ultérieurement avec des références de job.

Consultez la documentation de référence de gcloud CLI pour connaître toutes les options.

Exemple

Exécutez la commande suivante pour obtenir les noms et les types d'assets des deux premières instances Compute Engine du projet my-project.

gcloud asset query \
    --project=my-project \
    --statement="
      SELECT
        name, assetType
      FROM
        compute_googleapis_com_Instance
      LIMIT 2"

Réponse de tâche terminée

L'exemple suivant montre une réponse à l'exemple de requête précédent. La réponse contient une référence de job et vous indique si le job est terminé (done: true). Si le job est terminé, l'objet queryResult est rempli avec les données appropriées, et les résultats sont listés ensuite.

done: true
jobReference: 0000000000000000000000000000000000000000000000000000000000000000
queryResult:
  nextPageToken: ''
  totalRows: '2'

name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1
assetType: compute.googleapis.com/Instance

name: //compute.googleapis.com/projects/my-project/zones/us-central1-c/instances/instance-2
assetType: compute.googleapis.com/Instance

Réponse de tâche inachevée

Si vous définissez un délai avant expiration dans votre requête, la requête est exécutée de manière asynchrone et vous recevez une réponse indiquant que le job n'est pas terminé (done: false). Ces types de réponses contiennent une référence de job et un objet queryResult non rempli :

done: false
jobReference: 0000000000000000000000000000000000000000000000000000000000000000
queryResult:
  nextPageToken: ''
  totalRows: '0'

Vous pouvez utiliser la valeur jobReference pour récupérer les résultats de la requête ultérieurement, une fois le job terminé et les données disponibles.

REST

Méthode HTTP et URL :

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets

Corps JSON de la requête :

{
  "statement": "SQL_SELECT_QUERY",
  "timeout": "TIMEOUTs",
  "pageSize": "PAGE_SIZE",
  "pageToken": "PAGE_TOKEN"
}

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 composants que vous souhaitez interroger.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER correspond au numéro du projet contenant les composants que vous souhaitez interroger.

      Trouver le numéro d'un projet Google Cloud

      ConsoleGoogle Cloud

      Pour trouver le numéro d'un projet Google Cloud , procédez comme suit :

      1. Accédez à la page d'accueil de la console Google Cloud .

        Accéder à la page d'accueil

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de 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 sont affichées. Si vous ne voyez pas le projet que vous recherchez, accédez à la page Gérer les ressources et filtrez la liste à l'aide du nom de ce projet.

      CLI gcloud

      Vous pouvez récupérer un numéro de projet Google Cloud avec la commande suivante :

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID correspond à l'ID du dossier contenant les composants que vous souhaitez interroger.

      Trouver l'ID d'un dossier Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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)"

      TOP_LEVEL_FOLDER_NAME est une correspondance de chaîne partielle ou complète pour le nom du dossier. Supprimez l'option --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 premier niveau :

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation qui possède les composants que vous souhaitez interroger.

      Trouver l'ID d'une organisation Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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 organisation Google Cloud à l'aide de la commande suivante :

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY : requête SQL SELECT.
  • TIMEOUT : facultatif. Durée maximale, en secondes, pendant laquelle un client doit attendre la fin de la requête avant de continuer. Utilisez des délais d'attente pour exécuter votre requête de manière asynchrone et récupérer les résultats ultérieurement à l'aide de références de job.
  • PAGE_SIZE : facultatif. Nombre de résultats à renvoyer par page. Le maximum est de 500. Si la valeur est définie sur 0 ou sur une valeur négative, une valeur par défaut appropriée est sélectionnée. Un nextPageToken est renvoyé pour récupérer les résultats suivants.

  • PAGE_TOKEN : facultatif. Les réponses aux requêtes longues sont réparties sur plusieurs pages. Si pageToken n'est pas spécifié, la première page est renvoyée. Les pages suivantes peuvent être appelées en utilisant le nextPageToken de la réponse précédente comme valeur pageToken.

Consultez la documentation de référence REST pour toutes les options.

Exemples de commandes

Exécutez l'une des commandes suivantes pour obtenir les noms et les types d'assets des deux premières instances Compute Engine du projet my-project.

curl (Linux, macOS ou Cloud Shell)

curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "statement": "
              SELECT
                name, assetType
              FROM
                compute_googleapis_com_Instance
              LIMIT 2"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "statement": "
    SELECT
      name, assetType
    FROM
      compute_googleapis_com_Instance
    LIMIT 2"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content

Réponse de tâche terminée

L'exemple suivant montre une réponse à l'exemple de requête précédent. La réponse contient une référence de job et vous indique si le job est terminé ("done": true). Si le job est terminé, l'objet queryResult est renseigné avec les données appropriées.

Les résultats de la requête sont divisés en rows, un tableau contenant les métadonnées des éléments, et schema, un objet qui décrit le schéma de chaque élément du tableau rows. Cela permet de minimiser la duplication des noms et des types de champs dans les réponses volumineuses.

De même, f et v sont utilisés dans le tableau rows au lieu de fields et value pour que les réponses soient aussi courtes que possible.

{
  "jobReference": "0000000000000000000000000000000000000000000000000000000000000000",
  "done": true,
  "queryResult": {
    "rows": [
      {
        "f": [
          {
            "v": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1"
          },
          {
            "v": "compute.googleapis.com/Instance"
          }
        ]
      },
      {
        "f": [
          {
            "v": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-2"
          },
          {
            "v": "compute.googleapis.com/Instance"
          }
        ]
      }
    ],
    "schema": {
      "fields": [
        {
          "field": "name",
          "type": "STRING",
          "mode": "NULLABLE",
          "fields": []
        },
        {
          "field": "assetType",
          "type": "STRING",
          "mode": "NULLABLE",
          "fields": []
        }
      ]
    },
    "nextPageToken": "",
    "totalRows": "1"
  }
}

Réponse de tâche inachevée

Si vous définissez un délai avant expiration dans votre requête, la requête est exécutée de manière asynchrone et une réponse vous est envoyée pour indiquer que le job n'est pas terminé ("done": false). Ces types de réponses contiennent une référence de job et un objet queryResult non renseigné :

{
  "jobReference": "0000000000000000000000000000000000000000000000000000000000000000",
  "done": false,
  "queryResult": {
    "rows": [],
    "schema": {
      "fields": []
    },
    "nextPageToken": "",
    "totalRows": "0"
  }
}

Vous pouvez utiliser la valeur jobReference pour récupérer les résultats de la requête ultérieurement, une fois le job terminé et les données disponibles.

Récupérer les résultats de requête ultérieurement

Pour récupérer une requête qui a pris du temps à être traitée, effectuez l'une des requêtes suivantes.

gcloud

gcloud asset query \
    --SCOPE \
    --job-reference="JOB_REFERENCE"

Indiquez les valeurs suivantes :

  • SCOPE : utilisez l'une des valeurs suivantes :

    • project=PROJECT_ID, où PROJECT_ID est l'ID du projet contenant les composants que vous souhaitez interroger.
    • folder=FOLDER_ID, où FOLDER_ID correspond à l'ID du dossier contenant les composants que vous souhaitez interroger.

      Trouver l'ID d'un dossier Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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)"

      TOP_LEVEL_FOLDER_NAME est une correspondance de chaîne partielle ou complète pour le nom du dossier. Supprimez l'option --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 premier niveau :

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID correspond à l'ID de l'organisation qui possède les composants sur lesquels vous souhaitez effectuer des requêtes.

      Trouver l'ID d'une organisation Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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 organisation Google Cloud à l'aide de la commande suivante :

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE : valeur de référence du job renvoyée dans une réponse précédente.

Exemple

Exécutez la commande suivante pour obtenir les résultats d'une requête exécutée précédemment dans le projet my-project.

gcloud asset query \
    --project=my-project \
    --job-reference="0000000000000000000000000000000000000000000000000000000000000000"

REST

Méthode HTTP et URL :

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets

Corps JSON de la requête :

{
  "jobReference": "JOB_REFERENCE",
  "pageToken": "PAGE_TOKEN"
}

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 composants que vous souhaitez interroger.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER correspond au numéro du projet contenant les composants sur lesquels vous souhaitez effectuer des requêtes.

      Trouver le numéro d'un projet Google Cloud

      ConsoleGoogle Cloud

      Pour trouver le numéro d'un projet Google Cloud , procédez comme suit :

      1. Accédez à la page d'accueil de la console Google Cloud .

        Accéder à la page d'accueil

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de 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 sont affichées. Si vous ne voyez pas le projet que vous recherchez, accédez à la page Gérer les ressources et filtrez la liste à l'aide du nom de ce projet.

      CLI gcloud

      Vous pouvez récupérer un numéro de projet Google Cloud avec la commande suivante :

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID est l'ID du dossier contenant les composants que vous souhaitez interroger.

      Trouver l'ID d'un dossier Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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)"

      TOP_LEVEL_FOLDER_NAME est une correspondance de chaîne partielle ou complète pour le nom du dossier. Supprimez l'option --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 premier niveau :

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID est l'ID de l'organisation qui possède les composants que vous souhaitez interroger.

      Trouver l'ID d'une organisation Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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 organisation Google Cloud à l'aide de la commande suivante :

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE : valeur de référence du job renvoyée dans une réponse précédente.
  • PAGE_TOKEN : facultatif. Les réponses aux requêtes longues sont réparties sur plusieurs pages. Si pageToken n'est pas spécifié, la première page est renvoyée. Les pages suivantes peuvent être appelées en utilisant le nextPageToken de la réponse précédente comme valeur pageToken.

Exemples de commandes

Exécutez l'une des commandes suivantes pour obtenir les résultats d'une requête exécutée précédemment.

curl (Linux, macOS ou Cloud Shell)

curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "jobReference": "0000000000000000000000000000000000000000000000000000000000000000"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "jobReference": "0000000000000000000000000000000000000000000000000000000000000000"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content

Exporter les résultats de requête vers BigQuery

Les résultats des requêtes sont renvoyés sous forme de réponses de l'API Query Assets. Pour exporter les résultats vers votre propre table BigQuery, spécifiez une destination BigQuery dans la requête. Si vous n'en avez pas encore, vous devez créer un ensemble de données BigQuery avant d'envoyer ces requêtes.

gcloud

gcloud asset query \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --statement="SQL_SELECT_QUERY" \
    --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
    --write-disposition="WRITE_METHOD"

Indiquez les valeurs suivantes :

  • SCOPE : utilisez l'une des valeurs suivantes :

    • project=PROJECT_ID, où PROJECT_ID correspond à l'ID du projet contenant les métadonnées de l'élément que vous souhaitez exporter avec une requête SQL.
    • folder=FOLDER_ID, où FOLDER_ID correspond à l'ID du dossier contenant les métadonnées des composants que vous souhaitez exporter avec une requête SQL.

      Trouver l'ID d'un dossier Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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)"

      TOP_LEVEL_FOLDER_NAME est une correspondance de chaîne partielle ou complète pour le nom du dossier. Supprimez l'option --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 premier niveau :

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, où ORGANIZATION_ID correspond à l'ID de l'organisation qui possède les métadonnées de l'élément que vous souhaitez exporter avec une requête SQL.

      Trouver l'ID d'une organisation Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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 organisation Google Cloud à l'aide de la commande suivante :

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY : requête SQL SELECT.
  • 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.
  • WRITE_METHOD : spécifie le comportement si la table ou la partition de destination BigQuery existe déjà. Les valeurs suivantes sont acceptées :

    • write-empty : valeur par défaut. Si la table existante contient des données, une erreur de doublon est renvoyée dans le résultat de la tâche.
    • write-append : ajoute des données à la table ou à la dernière partition.
    • write-truncate : écrase la table entière ou toutes les données des partitions.

Exemple

Exécutez la commande suivante pour obtenir les noms et les types de ressources des deux premières instances Compute Engine du projet my-project, puis exportez les résultats vers la table BigQuery my-table du projet my-project, en écrasant l'intégralité de la table si elle existe déjà.

gcloud asset query \
  --project=my-project \
  --statement="
    SELECT
      name, assetType
    FROM
      compute_googleapis_com_Instance
    LIMIT 2" \
  --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \
  --write-disposition="write-truncate"

REST

Méthode HTTP et URL :

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets

En-têtes :

X-Goog-User-Project: BILLING_PROJECT_ID

Corps JSON de la requête :

{
  "statement": "SQL_SELECT_QUERY",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID",
      "table": "TABLE_NAME",
      "writeDisposition": "WRITE_METHOD"
    }
  },
  "pageSize": "PAGE_SIZE"
}

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 correspond à l'ID du projet contenant les métadonnées de l'élément que vous souhaitez exporter avec une requête SQL.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER correspond au numéro du projet contenant les métadonnées des éléments que vous souhaitez exporter avec une requête SQL.

      Trouver le numéro d'un projet Google Cloud

      ConsoleGoogle Cloud

      Pour trouver le numéro d'un projet Google Cloud , procédez comme suit :

      1. Accédez à la page d'accueil de la console Google Cloud .

        Accéder à la page d'accueil

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de 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 sont affichées. Si vous ne voyez pas le projet que vous recherchez, accédez à la page Gérer les ressources et filtrez la liste à l'aide du nom de ce projet.

      CLI gcloud

      Vous pouvez récupérer un numéro de projet Google Cloud avec la commande suivante :

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, où FOLDER_ID correspond à l'ID du dossier contenant les métadonnées des composants que vous souhaitez exporter avec une requête SQL.

      Trouver l'ID d'un dossier Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'un dossier Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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)"

      TOP_LEVEL_FOLDER_NAME est une correspondance de chaîne partielle ou complète pour le nom du dossier. Supprimez l'option --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 premier niveau :

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, où ORGANIZATION_ID correspond à l'ID de l'organisation qui possède les métadonnées de l'élément que vous souhaitez exporter avec une requête SQL.

      Trouver l'ID d'une organisation Google Cloud

      ConsoleGoogle Cloud

      Pour trouver l'ID d'une organisation Google Cloud , procédez comme suit :

      1. Accédez à la console Google Cloud .

        Accéder à la console Google Cloud

      2. Cliquez sur la zone de liste du sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone de liste.
      4. 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 organisation Google Cloud à 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 inventaire des éléments cloud par défaut, qui dispose des autorisations nécessaires pour gérer vos ensembles de données et tables BigQuery. En savoir plus sur la définition du projet de facturation

  • SQL_SELECT_QUERY : requête SQL SELECT.
  • 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.
  • WRITE_METHOD : spécifie le comportement si la table ou la partition de destination BigQuery existe déjà. Les valeurs suivantes sont acceptées :

    • WRITE_EMPTY : valeur par défaut. Si la table existante contient des données, une erreur de doublon est renvoyée dans le résultat de la tâche.
    • WRITE_APPEND : ajoute des données à la table ou à la dernière partition.
    • WRITE_TRUNCATE : écrase la table entière ou toutes les données des partitions.
  • PAGE_SIZE : facultatif. Nombre de résultats à renvoyer par page. Le maximum est de 500. Si la valeur est définie sur 0 ou sur une valeur négative, une valeur par défaut appropriée est sélectionnée. Un nextPageToken est renvoyé pour récupérer les résultats suivants.

Exemples de commandes

Exécutez l'une des commandes suivantes pour obtenir les noms et les types de ressources des deux premières instances Compute Engine du projet my-project, puis exportez les résultats vers la table BigQuery my-table du projet my-project, en écrasant l'intégralité de la table si elle existe déjà.

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 '{
            "statement": "
              SELECT
                name, assetType
              FROM
                compute_googleapis_com_Instance
              LIMIT 2",
            "outputConfig": {
              "bigqueryDestination": {
                "dataset": "projects/my-project/datasets/my-dataset",
                "table": "my-table",
                "writeDisposition": "WRITE_TRUNCATE"
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "statement": "
    SELECT
      name, assetType
    FROM
      compute_googleapis_com_Instance
    LIMIT 2",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/my-project/datasets/my-dataset",
      "table": "my-table",
      "writeDisposition": "WRITE_TRUNCATE"
    }
  }
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content

Autres exemples de requêtes SQL

Les exemples de code suivants présentent des requêtes SQL spécifiques que vous pouvez utiliser pour rechercher des composants. Ils vous aideront à créer vos propres requêtes.

Instances de VM Compute Engine dans une région spécifique

De plus, renvoie leur name et la date de création.

SELECT
  name,
  resource.DATA.creationTimestamp
FROM
  compute_googleapis_com_Instance
WHERE
  resource.location LIKE '%asia%'

Détails d'une application exécutée dans un pod Kubernetes

Renvoie l'espace de noms, la version et le code temporel de l'application ingress-nginx. En savoir plus sur les fonctions JSON utilisées dans BigQuery

SELECT
  name AS pod_name,
  JSON_EXTRACT_SCALAR(resource.data.metadata, '$.namespace') AS namespace,
  resource.data.metadata.creationTimestamp AS creation_time,
  JSON_EXTRACT_SCALAR(resource.data.metadata.labels, "$['app.kubernetes.io/name']") AS app_label,
  resource.data.metadata.labels['app.kubernetes.io/version'] AS version
FROM
  k8s_io_Pod
WHERE
  JSON_EXTRACT_SCALAR(resource.data.metadata, '$.namespace') = "default"
  AND JSON_EXTRACT_SCALAR(resource.data.metadata.labels, "$['app.kubernetes.io/name']") = "ingress-nginx"

Nombre d'ensembles de données BigQuery dans chaque projet

  SELECT
    ancestor AS project,
    COUNT(*)
  FROM
    bigquery_googleapis_com_Dataset
  CROSS JOIN
    UNNEST (ancestors) AS ancestor
  WHERE
    ancestor LIKE '%project%'
  GROUP BY
    ancestor
  ORDER BY
    2 DESC

Nombre d'instances de VM Compute Engine dans chaque région

SELECT
  resource.location,
  COUNT(*)
FROM
  compute_googleapis_com_Instance
GROUP BY
  resource.location

Nom et assetType de toutes les ressources d'une région

SELECT
  name,
  assetType
FROM
  STANDARD_METADATA
WHERE
  resource.location LIKE '%asia%'

Buckets Cloud Storage accessibles publiquement

Rendez-lui également son name.

SELECT
  name
FROM
  IAM_POLICY
CROSS JOIN
  UNNEST(iamPolicy.bindings) AS binding
WHERE
  ('allUsers' IN UNNEST(binding.members)
  OR 'allAuthenticatedUsers' IN UNNEST(binding.members))
  AND assetType = 'storage.googleapis.com/Bucket'

Sous-réseaux sans instances de VM associées

SELECT
  subnetwork_table.name
FROM
  compute_googleapis_com_Subnetwork AS subnetwork_table
LEFT JOIN (
  SELECT
    interface.subnetwork AS subnetwork
  FROM
    compute_googleapis_com_Instance
  CROSS JOIN
    UNNEST(resource.DATA.networkInterfaces) AS interface) AS instance_table
ON
  SUBSTR(subnetwork_table.name, 25) = SUBSTR(instance_table.subnetwork,38)
WHERE
  instance_table.subnetwork IS NULL
  AND NOT subnetwork_table.name LIKE '%default%'