Assets mit SQL abfragen

Sie können Assets in Ihrem Projekt, Ordner oder Ihrer Organisation mit einem BigQuery-SQL-kompatiblen Dialekt abfragen.

Hinweise

  1. Aktivieren Sie die Cloud Asset Inventory API in dem Projekt, in dem Sie Cloud Asset Inventory-Befehle ausführen.

    Cloud Asset Inventory API aktivieren

  2. Prüfen Sie, ob Ihr Konto die richtige Rolle zum Aufrufen der Cloud Asset Inventory API hat. Informationen zu den einzelnen Berechtigungen für die einzelnen Anruftypen finden Sie unter Berechtigungen.

Beschränkungen

Abfragbare Tabellen

Sie können die folgenden Tabellen abfragen:

  • Bei RESOURCE-Inhaltstypen entsprechen die Tabellennamen im Dataset dem Namen des Asset-Typs, sofern dieser vorhanden ist. Die Tabelle compute_googleapis_com_Instance enthält beispielsweise Metadaten zu Compute Engine-Instanzen.

  • Bei anderen Inhaltstypen als RESOURCE entsprechen die Tabellennamen im Dataset den RPC-/REST-Inhaltstypnamen. Beispiel: ACCESS_POLICY

  • Wenn Sie Standard-Metadaten von Ressourcen über Ressourcentypen hinweg abfragen möchten, verwenden Sie den Tabellennamen STANDARD_METADATA. Das umfasst alle Felder mit Ausnahme von resource.DATA, das für jeden Ressourcentyp spezifisch ist.

Asset-Metadaten abfragen

Console

So fragen Sie die Asset-Metadaten für Ihr Projekt, Ihren Ordner oder Ihre Organisation ab:

  1. Rufen Sie in der Google Cloud Console auf der Seite Asset Inventory den Tab Asset-Abfrage auf.

    Zur Asset-Abfrage

    Wenn der Tab Asset-Abfrage nicht angezeigt wird, benötigen Sie Zugriff auf die Security Command Center Premium- oder Enterprise-Stufe oder Gemini Cloud Assist.

  2. Wechseln Sie zu dem Projekt, Ordner oder der Organisation, die Sie abfragen möchten.
  3. Klicken Sie auf den Tab Asset-Abfrage.
  4. Wenn Sie Asset-Metadaten abfragen möchten, können Sie entweder eine Beispielabfrage verwenden oder eine eigene erstellen:

    • Wenn Sie ein Beispiel verwenden möchten, klicken Sie auf dem Tab Abfragebibliothek auf einen Eintrag, um eine Vorschau der Abfrage aufzurufen. Klicken Sie auf Übernehmen, um das Beispiel in das Feld Abfrage bearbeiten zu kopieren. Bearbeiten Sie dann die Abfrage oder klicken Sie auf Ausführen, um sie auszuführen.
    • Wenn Sie eine eigene Abfrage erstellen möchten, geben Sie den Abfragetext direkt in das Feld Abfrage bearbeiten ein und klicken Sie dann auf Ausführen. Wenn Sie eine eigene Abfrage schreiben möchten, können Sie auf eine Tabelle im Bereich Tabelle auswählen klicken, um sich eine Vorschau des Schemas und des Inhalts anzeigen zu lassen. Informationen zum Erstellen einer Abfrage finden Sie unter Abfragesyntax.

    Die Asset-Metadaten, die mit der Abfrage übereinstimmen, werden auf dem Tab Abfrageergebnis angezeigt.

  5. Optional: Wenn Sie die Abfrageergebnismengen im CSV-Format herunterladen möchten, klicken Sie auf Exportieren.

    Die CSV-Datei darf höchstens 2 MB groß sein. Wenn die Downloadanfrage fehlschlägt, weil die Dateigröße dieses Limit überschreitet, wird eine Meldung mit einer Anleitung zum Exportieren der vollständigen Ergebnisse angezeigt.

gcloud

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

Geben Sie folgende Werte an:

  • SCOPE: Verwenden Sie einen der folgenden Werte:

    • project=PROJECT_ID, wobei PROJECT_ID die ID des Projekts mit den Assets ist, die Sie abfragen möchten.
    • folder=FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Assets ist, die Sie abfragen möchten.

      ID eines Google Cloud Ordners finden

      Google Cloud console

      So finden Sie die ID eines Google Cloud -Ordners:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Suchen Sie nach dem Namen des Ordners. Die Ordner-ID wird neben dem Ordnernamen angezeigt.

      gcloud-CLI

      Sie können die ID eines Google Cloud -Ordners auf Organisationsebene mit dem folgenden Befehl abrufen:

      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)"

      Dabei ist TOP_LEVEL_FOLDER_NAME eine teilweise oder vollständige Stringübereinstimmung für den Namen des Ordners. Entfernen Sie das Flag --format, um weitere Informationen zu den gefundenen Ordnern zu sehen.

      Der vorherige Befehl gibt nicht die IDs von Unterordnern in Ordnern zurück. Führen Sie dazu den folgenden Befehl mit der ID eines Ordners der obersten Ebene aus:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, wobei ORGANIZATION_ID die ID der Organisation ist, die die Assets enthält, die Sie abfragen möchten.

      ID einer Google Cloud Organisation finden

      Google Cloud console

      So finden Sie die ID einer Google Cloud -Organisation:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Klicken Sie auf den Tab Alle. Die Organisations-ID wird neben dem Namen der Organisation angezeigt.

      gcloud-CLI

      Sie können die ID einer Google Cloud Organisation mit dem folgenden Befehl abrufen:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: Eine SQL-SELECT Abfrage.
  • TIMEOUT: Optional. Die maximale Zeit in Sekunden, die ein Client warten sollte, bis die Abfrage abgeschlossen ist, bevor er fortfährt. Verwenden Sie Zeitüberschreitungen, um Ihre Abfrage asynchron auszuführen und die Ergebnisse später mit Jobreferenzen abzurufen.

Alle Optionen finden Sie in der Referenz zur gcloud CLI.

Beispiel

Führen Sie den folgenden Befehl aus, um die Namen und Asset-Typen der ersten beiden Compute Engine-Instanzen im Projekt my-project abzurufen.

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

Antwort auf abgeschlossenen Job

Das folgende Beispiel zeigt eine Antwort auf die vorherige Beispielanfrage. Die Antwort enthält eine Jobreferenz und gibt an, ob der Job abgeschlossen ist (done: true). Wenn der Job abgeschlossen ist, wird das Objekt queryResult mit den entsprechenden Daten gefüllt und die Ergebnisse werden danach aufgeführt.

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

Antwort auf einen unvollendeten Auftrag

Wenn Sie in Ihrer Anfrage ein Zeitlimit festlegen, wird die Abfrage asynchron ausgeführt und Sie erhalten eine Antwort, die angibt, dass der Job noch nicht abgeschlossen ist (done: false). Diese Art von Antworten enthält eine Jobreferenz und ein nicht ausgefülltes queryResult-Objekt:

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

Mit dem Wert jobReference können Sie die Abfrageergebnisse später abrufen, nachdem der Job abgeschlossen und die Daten verfügbar sind.

REST

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Geben Sie folgende Werte an:

  • SCOPE_PATH: Verwenden Sie einen der folgenden Werte:

    Zulässige Werte:

    • projects/PROJECT_ID, wobei PROJECT_ID die ID des Projekts mit den Assets ist, die Sie abfragen möchten.
    • projects/PROJECT_NUMBER, wobei PROJECT_NUMBER die Nummer des Projekts ist, das die Assets enthält, die Sie abfragen möchten.

      Google Cloud Projektnummer finden

      Google Cloud console

      So finden Sie die Projektnummer eines Google Cloud -Projekts:

      1. Rufen Sie in der Google Cloud Console die Seite Willkommen auf.

        Zur Begrüßungsseite

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus und suchen Sie dann nach Ihrem Projektnamen. Der Projektname, die Projektnummer und die Projekt-ID werden in der Nähe der Überschrift Willkommen angezeigt.

        Es werden bis zu 4.000 Ressourcen angezeigt. Wenn Sie das gewünschte Projekt nicht sehen, rufen Sie die Seite Ressourcen verwalten auf und filtern Sie die Liste nach dem Namen des Projekts.

      gcloud-CLI

      Sie können eine Google Cloud Projektnummer mit dem folgenden Befehl abrufen:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Assets ist, die Sie abfragen möchten.

      ID eines Google Cloud Ordners finden

      Google Cloud console

      So finden Sie die ID eines Google Cloud -Ordners:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Suchen Sie nach dem Namen des Ordners. Die Ordner-ID wird neben dem Ordnernamen angezeigt.

      gcloud-CLI

      Sie können die ID eines Google Cloud -Ordners auf Organisationsebene mit dem folgenden Befehl abrufen:

      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)"

      Dabei ist TOP_LEVEL_FOLDER_NAME eine teilweise oder vollständige Stringübereinstimmung für den Namen des Ordners. Entfernen Sie das Flag --format, um weitere Informationen zu den gefundenen Ordnern zu sehen.

      Der vorherige Befehl gibt nicht die IDs von Unterordnern in Ordnern zurück. Führen Sie dazu den folgenden Befehl mit der ID eines Ordners der obersten Ebene aus:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, wobei ORGANIZATION_ID die ID der Organisation ist, die die Assets enthält, die Sie abfragen möchten.

      ID einer Google Cloud Organisation finden

      Google Cloud console

      So finden Sie die ID einer Google Cloud -Organisation:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Klicken Sie auf den Tab Alle. Die Organisations-ID wird neben dem Namen der Organisation angezeigt.

      gcloud-CLI

      Sie können die ID einer Google Cloud Organisation mit dem folgenden Befehl abrufen:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: Eine SQL-SELECT Abfrage.
  • TIMEOUT: Optional. Die maximale Zeit in Sekunden, die ein Client warten sollte, bis die Abfrage abgeschlossen ist, bevor er fortfährt. Verwenden Sie Zeitüberschreitungen, um Ihre Abfrage asynchron auszuführen und die Ergebnisse später mit Jobreferenzen abzurufen.
  • PAGE_SIZE: Optional. Die Anzahl der Ergebnisse, die pro Seite zurückgegeben werden sollen. Der Maximalwert beträgt 500. Wenn der Wert auf 0 oder einen negativen Wert festgelegt ist, wird ein geeigneter Standardwert ausgewählt. Es wird ein nextPageToken zurückgegeben, um nachfolgende Ergebnisse abzurufen.

  • PAGE_TOKEN: Optional. Lange Antworten auf Anfragen werden auf mehrere Seiten aufgeteilt. Wenn pageToken nicht angegeben ist, wird die erste Seite zurückgegeben. Nachfolgende Seiten können aufgerufen werden, indem Sie nextPageToken aus der vorherigen Antwort als pageToken-Wert verwenden.

Alle Optionen finden Sie in der REST-Referenz.

Beispiele für Befehle

Führen Sie einen der folgenden Befehle aus, um die Namen und Asset-Typen der ersten beiden Compute Engine-Instanzen im Projekt my-project abzurufen.

curl (Linux, macOS oder 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

Antwort auf abgeschlossenen Job

Das folgende Beispiel zeigt eine Antwort auf die vorherige Beispielanfrage. Die Antwort enthält eine Jobreferenz und gibt an, ob der Job abgeschlossen ist ("done": true). Wenn der Job abgeschlossen ist, wird das queryResult-Objekt mit den entsprechenden Daten gefüllt.

Die Abfrageergebnisse werden in rows, ein Array mit Asset-Metadaten, und schema, ein Objekt, das das Schema für jedes Asset im rows-Array beschreibt, aufgeteilt. So wird die Duplizierung von Feldnamen und -typen in großen Antworten minimiert.

Ebenso werden f und v im Array rows anstelle von fields und value verwendet, um die Antworten so klein wie möglich zu halten.

{
  "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"
  }
}

Antwort auf einen unvollendeten Auftrag

Wenn Sie in Ihrer Anfrage ein Zeitlimit festlegen, wird die Abfrage asynchron ausgeführt und Sie erhalten eine Antwort, die angibt, dass der Job noch nicht abgeschlossen ist ("done": false). Diese Art von Antworten enthält eine Jobreferenz und ein nicht ausgefülltes queryResult-Objekt:

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

Mit dem Wert jobReference können Sie die Abfrageergebnisse später abrufen, nachdem der Job abgeschlossen und die Daten verfügbar sind.

Abfrageergebnisse später abrufen

Wenn Sie eine Anfrage, deren Bearbeitung Zeit in Anspruch genommen hat, später abrufen möchten, senden Sie eine der folgenden Anfragen.

gcloud

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

Geben Sie folgende Werte an:

  • SCOPE: Verwenden Sie einen der folgenden Werte:

    • project=PROJECT_ID, wobei PROJECT_ID die ID des Projekts mit den Assets ist, die Sie abfragen möchten.
    • folder=FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Assets ist, die Sie abfragen möchten.

      ID eines Google Cloud Ordners finden

      Google Cloud console

      So finden Sie die ID eines Google Cloud -Ordners:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Suchen Sie nach dem Namen des Ordners. Die Ordner-ID wird neben dem Ordnernamen angezeigt.

      gcloud-CLI

      Sie können die ID eines Google Cloud -Ordners auf Organisationsebene mit dem folgenden Befehl abrufen:

      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)"

      Dabei ist TOP_LEVEL_FOLDER_NAME eine teilweise oder vollständige Stringübereinstimmung für den Namen des Ordners. Entfernen Sie das Flag --format, um weitere Informationen zu den gefundenen Ordnern zu sehen.

      Der vorherige Befehl gibt nicht die IDs von Unterordnern in Ordnern zurück. Führen Sie dazu den folgenden Befehl mit der ID eines Ordners der obersten Ebene aus:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, wobei ORGANIZATION_ID die ID der Organisation ist, die die Assets enthält, die Sie abfragen möchten.

      ID einer Google Cloud Organisation finden

      Google Cloud console

      So finden Sie die ID einer Google Cloud -Organisation:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Klicken Sie auf den Tab Alle. Die Organisations-ID wird neben dem Namen der Organisation angezeigt.

      gcloud-CLI

      Sie können die ID einer Google Cloud Organisation mit dem folgenden Befehl abrufen:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE: Der Job-Referenzwert, der in einer vorherigen Antwort zurückgegeben wurde.

Beispiel

Führen Sie den folgenden Befehl aus, um die Ergebnisse einer zuvor ausgeführten Abfrage im Projekt my-project abzurufen.

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

REST

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Geben Sie folgende Werte an:

  • SCOPE_PATH: Verwenden Sie einen der folgenden Werte:

    Zulässige Werte:

    • projects/PROJECT_ID, wobei PROJECT_ID die ID des Projekts mit den Assets ist, die Sie abfragen möchten.
    • projects/PROJECT_NUMBER, wobei PROJECT_NUMBER die Nummer des Projekts mit den Assets ist, die Sie abfragen möchten.

      Google Cloud Projektnummer finden

      Google Cloud console

      So finden Sie die Projektnummer eines Google Cloud -Projekts:

      1. Rufen Sie in der Google Cloud Console die Seite Willkommen auf.

        Zur Begrüßungsseite

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus und suchen Sie dann nach Ihrem Projektnamen. Der Projektname, die Projektnummer und die Projekt-ID werden in der Nähe der Überschrift Willkommen angezeigt.

        Es werden bis zu 4.000 Ressourcen angezeigt. Wenn Sie das gewünschte Projekt nicht sehen, rufen Sie die Seite Ressourcen verwalten auf und filtern Sie die Liste nach dem Namen des Projekts.

      gcloud-CLI

      Sie können eine Google Cloud Projektnummer mit dem folgenden Befehl abrufen:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Assets ist, die Sie abfragen möchten.

      ID eines Google Cloud Ordners finden

      Google Cloud console

      So finden Sie die ID eines Google Cloud -Ordners:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Suchen Sie nach dem Namen des Ordners. Die Ordner-ID wird neben dem Ordnernamen angezeigt.

      gcloud-CLI

      Sie können die ID eines Google Cloud -Ordners auf Organisationsebene mit dem folgenden Befehl abrufen:

      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)"

      Dabei ist TOP_LEVEL_FOLDER_NAME eine teilweise oder vollständige Stringübereinstimmung für den Namen des Ordners. Entfernen Sie das Flag --format, um weitere Informationen zu den gefundenen Ordnern zu sehen.

      Der vorherige Befehl gibt nicht die IDs von Unterordnern in Ordnern zurück. Führen Sie dazu den folgenden Befehl mit der ID eines Ordners der obersten Ebene aus:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, wobei ORGANIZATION_ID die ID der Organisation ist, die die Assets enthält, die Sie abfragen möchten.

      ID einer Google Cloud Organisation finden

      Google Cloud console

      So finden Sie die ID einer Google Cloud -Organisation:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Klicken Sie auf den Tab Alle. Die Organisations-ID wird neben dem Namen der Organisation angezeigt.

      gcloud-CLI

      Sie können die ID einer Google Cloud Organisation mit dem folgenden Befehl abrufen:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • JOB_REFERENCE: Der Job-Referenzwert, der in einer vorherigen Antwort zurückgegeben wurde.
  • PAGE_TOKEN: Optional. Lange Antworten auf Anfragen werden auf mehrere Seiten aufgeteilt. Wenn pageToken nicht angegeben ist, wird die erste Seite zurückgegeben. Nachfolgende Seiten können aufgerufen werden, indem Sie nextPageToken aus der vorherigen Antwort als pageToken-Wert verwenden.

Beispiele für Befehle

Führen Sie einen der folgenden Befehle aus, um die Ergebnisse einer zuvor ausgeführten Abfrage abzurufen.

curl (Linux, macOS oder 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

Abfrageergebnisse nach BigQuery exportieren

Abfrageergebnisse werden als Query Assets API-Antworten zurückgegeben. Wenn Sie die Ergebnisse in Ihre eigene BigQuery-Tabelle exportieren möchten, geben Sie im Antrag ein BigQuery-Ziel an. Falls Sie noch keines haben, müssen Sie ein BigQuery-Dataset erstellen, bevor Sie diese Anfragen stellen.

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"

Geben Sie folgende Werte an:

  • SCOPE: Verwenden Sie einen der folgenden Werte:

    • project=PROJECT_ID, wobei PROJECT_ID die ID des Projekts ist, das die Asset-Metadaten enthält, die Sie mit einer SQL-Abfrage exportieren möchten.
    • folder=FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Asset-Metadaten ist, die Sie mit einer SQL-Abfrage exportieren möchten.

      ID eines Google Cloud Ordners finden

      Google Cloud console

      So finden Sie die ID eines Google Cloud -Ordners:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Suchen Sie nach dem Namen des Ordners. Die Ordner-ID wird neben dem Ordnernamen angezeigt.

      gcloud-CLI

      Sie können die ID eines Google Cloud -Ordners auf Organisationsebene mit dem folgenden Befehl abrufen:

      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)"

      Dabei ist TOP_LEVEL_FOLDER_NAME eine teilweise oder vollständige Stringübereinstimmung für den Namen des Ordners. Entfernen Sie das Flag --format, um weitere Informationen zu den gefundenen Ordnern zu sehen.

      Der vorherige Befehl gibt nicht die IDs von Unterordnern in Ordnern zurück. Führen Sie dazu den folgenden Befehl mit der ID eines Ordners der obersten Ebene aus:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, wobei ORGANIZATION_ID die ID der Organisation ist, die die Asset-Metadaten enthält, die Sie mit einer SQL-Abfrage exportieren möchten.

      ID einer Google Cloud Organisation finden

      Google Cloud console

      So finden Sie die ID einer Google Cloud -Organisation:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Klicken Sie auf den Tab Alle. Die Organisations-ID wird neben dem Namen der Organisation angezeigt.

      gcloud-CLI

      Sie können die ID einer Google Cloud Organisation mit dem folgenden Befehl abrufen:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • SQL_SELECT_QUERY: Eine SQL-SELECT Abfrage.
  • BIGQUERY_PROJECT_ID: Die ID des Projekts, in dem sich die BigQuery-Tabelle befindet, in die Sie Daten exportieren möchten.
  • DATASET_ID: Die ID des BigQuery-Datasets.
  • TABLE_NAME: Die BigQuery-Tabelle, in die Sie Ihre Metadaten exportieren. Wenn sie nicht vorhanden ist, wird sie erstellt.
  • WRITE_METHOD: Gibt das Verhalten an, wenn die BigQuery-Zieltabelle oder -Partition bereits vorhanden ist. Folgende Werte werden unterstützt:

    • write-empty: Standard. Wenn die vorhandene Tabelle Daten enthält, wird im Jobergebnis ein Duplikatsfehler zurückgegeben.
    • write-append: Fügt Daten an die Tabelle oder die letzte Partition an.
    • write-truncate: Überschreibt die gesamte Tabelle oder alle Partitionen.

Beispiel

Führen Sie den folgenden Befehl aus, um die Namen und Asset-Typen der ersten beiden Compute Engine-Instanzen im Projekt my-project abzurufen und die Ergebnisse in die BigQuery-Tabelle my-table im Projekt my-project zu exportieren. Wenn die Tabelle bereits vorhanden ist, wird sie vollständig überschrieben.

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

HTTP-Methode und URL:

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

Header:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON-Text anfordern:

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

Geben Sie folgende Werte an:

  • SCOPE_PATH: Verwenden Sie einen der folgenden Werte:

    Zulässige Werte:

    • projects/PROJECT_ID, wobei PROJECT_ID die ID des Projekts ist, das die Asset-Metadaten enthält, die Sie mit einer SQL-Abfrage exportieren möchten.
    • projects/PROJECT_NUMBER, wobei PROJECT_NUMBER die Nummer des Projekts ist, das die Asset-Metadaten enthält, die Sie mit einer SQL-Abfrage exportieren möchten.

      Google Cloud Projektnummer finden

      Google Cloud console

      So finden Sie die Projektnummer eines Google Cloud -Projekts:

      1. Rufen Sie in der Google Cloud Console die Seite Willkommen auf.

        Zur Begrüßungsseite

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus und suchen Sie dann nach Ihrem Projektnamen. Der Projektname, die Projektnummer und die Projekt-ID werden in der Nähe der Überschrift Willkommen angezeigt.

        Es werden bis zu 4.000 Ressourcen angezeigt. Wenn Sie das gewünschte Projekt nicht sehen, rufen Sie die Seite Ressourcen verwalten auf und filtern Sie die Liste nach dem Namen des Projekts.

      gcloud-CLI

      Sie können eine Google Cloud Projektnummer mit dem folgenden Befehl abrufen:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Asset-Metadaten ist, die Sie mit einer SQL-Abfrage exportieren möchten.

      ID eines Google Cloud Ordners finden

      Google Cloud console

      So finden Sie die ID eines Google Cloud -Ordners:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Suchen Sie nach dem Namen des Ordners. Die Ordner-ID wird neben dem Ordnernamen angezeigt.

      gcloud-CLI

      Sie können die ID eines Google Cloud -Ordners auf Organisationsebene mit dem folgenden Befehl abrufen:

      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)"

      Dabei ist TOP_LEVEL_FOLDER_NAME eine teilweise oder vollständige Stringübereinstimmung für den Namen des Ordners. Entfernen Sie das Flag --format, um weitere Informationen zu den gefundenen Ordnern zu sehen.

      Der vorherige Befehl gibt nicht die IDs von Unterordnern in Ordnern zurück. Führen Sie dazu den folgenden Befehl mit der ID eines Ordners der obersten Ebene aus:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, wobei ORGANIZATION_ID die ID der Organisation ist, die die Asset-Metadaten enthält, die Sie mit einer SQL-Abfrage exportieren möchten.

      ID einer Google Cloud Organisation finden

      Google Cloud console

      So finden Sie die ID einer Google Cloud -Organisation:

      1. Rufen Sie die Google Cloud Console auf.

        Zur Google Cloud Console

      2. Klicken Sie in der Menüleiste auf das Listenfeld Umschalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Klicken Sie auf den Tab Alle. Die Organisations-ID wird neben dem Namen der Organisation angezeigt.

      gcloud-CLI

      Sie können die ID einer Google Cloud Organisation mit dem folgenden Befehl abrufen:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: Die Projekt-ID, in der sich der standardmäßige Cloud Asset Inventory-Dienst-Agent befindet, der Berechtigungen zum Verwalten Ihrer BigQuery-Datasets und -Tabellen hat. Weitere Informationen zum Festlegen des Abrechnungsprojekts

  • SQL_SELECT_QUERY: Eine SQL-SELECT Abfrage.
  • BIGQUERY_PROJECT_ID: Die ID des Projekts, in dem sich die BigQuery-Tabelle befindet, in die Sie Daten exportieren möchten.
  • DATASET_ID: Die ID des BigQuery-Datasets.
  • TABLE_NAME: Die BigQuery-Tabelle, in die Sie Ihre Metadaten exportieren. Wenn sie nicht vorhanden ist, wird sie erstellt.
  • WRITE_METHOD: Gibt das Verhalten an, wenn die BigQuery-Zieltabelle oder -Partition bereits vorhanden ist. Folgende Werte werden unterstützt:

    • WRITE_EMPTY: Standard. Wenn die vorhandene Tabelle Daten enthält, wird im Jobergebnis ein Duplikatsfehler zurückgegeben.
    • WRITE_APPEND: Fügt Daten an die Tabelle oder die letzte Partition an.
    • WRITE_TRUNCATE: Überschreibt die gesamte Tabelle oder alle Partitionen.
  • PAGE_SIZE: Optional. Die Anzahl der Ergebnisse, die pro Seite zurückgegeben werden sollen. Der Maximalwert beträgt 500. Wenn der Wert auf 0 oder einen negativen Wert festgelegt ist, wird ein geeigneter Standardwert ausgewählt. Es wird ein nextPageToken zurückgegeben, um nachfolgende Ergebnisse abzurufen.

Beispiele für Befehle

Führen Sie einen der folgenden Befehle aus, um die Namen und Asset-Typen der ersten beiden Compute Engine-Instanzen im Projekt my-project abzurufen und die Ergebnisse in die BigQuery-Tabelle my-table im Projekt my-project zu exportieren. Wenn die Tabelle bereits vorhanden ist, wird sie vollständig überschrieben.

curl (Linux, macOS oder 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

Weitere Beispiele für SQL-Abfrage

Die folgenden Codebeispiele zeigen bestimmte SQL-Abfragen, mit denen Sie nach Assets suchen können. Sie können sie als Grundlage für Ihre eigenen Abfragen verwenden.

Compute Engine-VM-Instanzen in einer bestimmten Region

Geben Sie außerdem die name und das Erstellungsdatum zurück.

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

Details zu einer App, die in einem Kubernetes-Pod ausgeführt wird

Gibt den Namespace, die Version und den Zeitstempel der App ingress-nginx zurück. Weitere Informationen zu JSON-Funktionen in 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"

Anzahl der BigQuery-Datasets in jedem Projekt

  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

Anzahl der Compute Engine-VM-Instanzen in jeder Region

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

Name und assetType aller Ressourcen in einer Region

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

Öffentlich verfügbare Cloud Storage-Buckets

Gib außerdem das name zurück.

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'

Subnetzwerke ohne angehängte VM-Instanzen

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