Interroger des composants avec SQL

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

Avant de commencer

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

    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 la section Autorisations.

Limites

Tables que vous pouvez interroger

Vous pouvez interroger les tables suivantes:

  • Pour les types de contenu RESOURCE, les noms de table de l'ensemble de données correspondent au nom du type d'élément, en supposant que ce 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 table de l'ensemble de données correspondent aux noms de type 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 d'un élément

Console

Pour interroger les métadonnées des éléments 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 de la page Inventaire des éléments.

    Accéder à "Requête sur un élément"

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

  2. Accédez 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-en une:

    • Pour utiliser un exemple, cliquez sur une entrée dans 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 à rédiger 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 créer 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 requête de téléchargement échoue, car la taille du fichier dépasse cette limite, un message s'affiche avec des instructions pour exporter les résultats complets.

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 est l'ID du dossier contenant les composants que vous souhaitez interroger.

      Trouver l'ID d'un Google Cloud dossier

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la 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 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 composants que vous souhaitez interroger.

      Trouver l'ID d'une Google Cloud organisation

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: requête SELECT SQL.
  • 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 avant expiration 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 tâches.

Consultez la documentation de référence de la gcloud CLI pour 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 la 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 tâche et indique si la tâche est terminée (done: true). Si la tâche est terminée, l'objet queryResult est renseigné avec les données appropriées, et les résultats sont listés par la suite.

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 incomplète

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 la tâche n'est pas terminée (done: false). Ces types de réponses contiennent une référence de tâche et un objet queryResult non renseigné:

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 plus tard, 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 est le numéro du projet contenant les éléments que vous souhaitez interroger.

      Trouver un Google Cloud numéro de projet

      Console Google Cloud

      Pour trouver un numéro de projet Google Cloud , procédez comme suit:

      1. Accédez à la page Bienvenue dans la console Google Cloud.

        Accéder à "Bienvenue"

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. 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 composants que vous souhaitez interroger.

      Trouver l'ID d'un Google Cloud dossier

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la 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 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 composants que vous souhaitez interroger.

      Trouver l'ID d'une Google Cloud organisation

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: requête SELECT SQL.
  • 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 avant expiration 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 tâches.
  • 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. Lorsque pageToken n'est pas spécifié, la première page est renvoyée. Les pages suivantes peuvent être appelées en utilisant l'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'éléments 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 la 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 tâche et indique si la tâche est terminée ("done": true). Si la tâche est terminée, 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 réduire 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 réduire au maximum les réponses.

{
  "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 incomplète

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 la tâche n'est pas terminée ("done": false). Ces types de réponses contiennent une référence de tâche 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 plus tard, une fois le job terminé et les données disponibles.

Récupérer les résultats de requête plus tard

Pour récupérer ultérieurement 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 est l'ID du dossier contenant les composants que vous souhaitez interroger.

      Trouver l'ID d'un Google Cloud dossier

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la 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 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 composants que vous souhaitez interroger.

      Trouver l'ID d'une Google Cloud organisation

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

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

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

Exemple

Exécutez la commande suivante pour obtenir les résultats d'une requête précédemment exécutée 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 est le numéro du projet contenant les éléments que vous souhaitez interroger.

      Trouver un Google Cloud numéro de projet

      Console Google Cloud

      Pour trouver un numéro de projet Google Cloud , procédez comme suit:

      1. Accédez à la page Bienvenue dans la console Google Cloud.

        Accéder à "Bienvenue"

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. 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 composants que vous souhaitez interroger.

      Trouver l'ID d'un Google Cloud dossier

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la 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 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 composants que vous souhaitez interroger.

      Trouver l'ID d'une Google Cloud organisation

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE: valeur de référence de l'offre d'emploi 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. Lorsque pageToken n'est pas spécifié, la première page est renvoyée. Les pages suivantes peuvent être appelées en utilisant l'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 précédemment exécutée.

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 de la requête 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'effectuer 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 est l'ID du projet contenant les métadonnées des éléments que vous souhaitez exporter avec une requête SQL.
    • folder=FOLDER_ID, où FOLDER_ID est l'ID du dossier contenant les métadonnées des éléments que vous souhaitez exporter avec une requête SQL.

      Trouver l'ID d'un Google Cloud dossier

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la 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 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 des éléments que vous souhaitez exporter avec une requête SQL.

      Trouver l'ID d'une Google Cloud organisation

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: requête SELECT SQL.
  • 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 d'éléments 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 est l'ID du projet contenant les métadonnées des éléments que vous souhaitez exporter avec une requête SQL.
    • projects/PROJECT_NUMBER, où PROJECT_NUMBER est le numéro du projet contenant les métadonnées des éléments que vous souhaitez exporter avec une requête SQL.

      Trouver un Google Cloud numéro de projet

      Console Google Cloud

      Pour trouver un numéro de projet Google Cloud , procédez comme suit:

      1. Accédez à la page Bienvenue dans la console Google Cloud.

        Accéder à "Bienvenue"

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. 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 des éléments que vous souhaitez exporter avec une requête SQL.

      Trouver l'ID d'un Google Cloud dossier

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la 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 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 des éléments que vous souhaitez exporter avec une requête SQL.

      Trouver l'ID d'une Google Cloud organisation

      Console Google Cloud

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

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur la liste déroulante Basculateur dans la barre de menu.
      3. Sélectionnez votre organisation dans la 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 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.

  • SQL_SELECT_QUERY: requête SELECT SQL.
  • 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 d'éléments 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 afin de vous aider à créer vos propres requêtes.

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

Renvoyer également leur name et la date de leur création.

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

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 publics

Renvoyer é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%'