Asset-Metadaten nach BigQuery exportieren

In diesem Dokument erfahren Sie, wie Sie einen Asset-Snapshot aus Ihrer Organisation, Ihrem Ordner oder Ihrem Projekt in eine BigQuery exportieren und dann eine Datenanalyse für Ihr Inventar durchführen. BigQuery bietet eine SQL-ähnliche Erfahrung, in der Nutzer Daten analysieren und wertvolle Informationen gewinnen können, ohne benutzerdefinierte Skripts zu verwenden.

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.

  3. Erstellen Sie ein BigQuery-Dataset für den Export, falls Sie noch keines haben.

Beschränkungen

  • Beim Exportieren von BigQuery-Tabellendaten werden nicht alle Felder von Cloud Asset Inventory unterstützt.

  • Häufig geänderte Asset-Felder wie numBytes, numLongTermBytes, numPhysicalBytes und numRows werden möglicherweise mit dem Wert null exportiert.

  • Der Export in geclusterte BigQuery-Tabellen wird nicht unterstützt.

  • BigQuery-Tabellen, die mit benutzerdefinierten Cloud Key Management Service-Schlüsseln (Cloud KMS) verschlüsselt sind, werden nicht unterstützt.

  • Das Anfügen der Exportausgabe an eine vorhandene Tabelle wird nur unterstützt, wenn Sie in eine partitionierte Tabelle exportieren. Die Zieltabelle muss leer sein oder muss überschrieben werden. Verwenden Sie zum Überschreiben das Flag --output-bigquery-force mit der gcloud CLI oder "force": true mit der REST API.

  • Google Kubernetes Engine-Ressourcentypen, mit Ausnahme von container.googleapis.com/Cluster und container.googleapis.com/NodePool, werden beim Exportieren in separate Tabellen für jeden Ressourcentyp nicht unterstützt.

  • Cloud Asset Inventory lehnt Exportanfragen ab, wenn eine vorherige Anfrage für dasselbe Ziel vor weniger als 15 Minuten gestartet wurde und noch ausgeführt wird. Wenn ein Export jedoch länger als 15 Minuten gedauert hat, wird er als abgeschlossen markiert und neue Exportanfragen für dasselbe Ziel sind zulässig.

  • Der Inhaltstyp ACCESS_POLICY kann nur auf Organisationsebene exportiert werden.

  • Wenn die Tabelle, in die Sie exportieren, bereits vorhanden ist und gerade in sie exportiert wird, wird ein 400-Fehler zurückgegeben.

Für den Export verwendete BigQuery-Schemas

Jede BigQuery-Tabelle wird durch ein Schema definiert, das unter anderem Informationen zu Spaltennamen und Datentypen enthält. Wenn Sie den Inhaltstyp für einen Export festlegen, wird das Schema für die Tabelle bestimmt:

  • Ressource oder nicht angegeben:Wenn Sie den Inhaltstyp auf RESOURCE setzen oder ihn nicht angeben und das Flag per-asset-type auf false setzen oder es nicht verwenden, erstellen Sie eine BigQuery-Tabelle mit dem folgenden Schema.

    Ressourcenschema

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "version",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "discovery_document_uri",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "discovery_name",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "resource_url",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "parent",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "data",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "location",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "resource",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]

    Die Spalte resource.data enthält die Ressourcenmetadaten als JSON-String.

    Wenn Sie den Inhaltstyp auf RESOURCE festlegen oder nicht festlegen und das Flag per-asset-type auf true setzen, erstellen Sie separate Tabellen für jeden Asset-Typ. Das Schema jeder Tabelle enthält Spalten vom Typ RECORD, die den verschachtelten Feldern im Feld Resource.data dieses Asset-Typs zugeordnet sind (bis zu 15 Ebenen von BigQuery unterstützten verschachtelten Ebenen). Beispieltabellen finden Sie in der Google Cloud -Konsole unter export-assets-examples.

  • IAM-Richtlinie:Wenn Sie den Inhaltstyp auf IAM_POLICY in der REST API oder auf iam-policy in der gcloud CLI festlegen, erstellen Sie eine BigQuery-Tabelle mit dem folgenden Schema.

    IAM-Richtlinienschema

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "version",
            "type": "INTEGER"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "role",
                "type": "STRING"
              },
              {
                "mode": "REPEATED",
                "name": "members",
                "type": "STRING"
              },
              {
                "fields": [
                  {
                    "mode": "NULLABLE",
                    "name": "expression",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "title",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "description",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "location",
                    "type": "STRING"
                  }
                ],
                "mode": "NULLABLE",
                "name": "condition",
                "type": "RECORD"
              }
            ],
            "mode": "REPEATED",
            "name": "bindings",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "service",
                "type": "STRING"
              },
              {
                "fields": [
                  {
                    "mode": "NULLABLE",
                    "name": "log_type",
                    "type": "INTEGER"
                  },
                  {
                    "mode": "REPEATED",
                    "name": "exempted_members",
                    "type": "STRING"
                  }
                ],
                "mode": "REPEATED",
                "name": "audit_log_configs",
                "type": "RECORD"
              }
            ],
            "mode": "REPEATED",
            "name": "audit_configs",
            "type": "RECORD"
          },
          {
            "mode": "NULLABLE",
            "name": "etag",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "iam_policy",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]
  • Organisationsrichtlinie:Wenn Sie den Inhaltstyp auf ORG_POLICY in der REST API oder auf org-policy in der gcloud CLI festlegen, erstellen Sie eine BigQuery-Tabelle mit dem folgenden Schema.

    Organisationsrichtlinienschema

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "version",
            "type": "INTEGER"
          },
          {
            "mode": "NULLABLE",
            "name": "constraint",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "etag",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "update_time",
            "type": "TIMESTAMP"
          },
          {
            "fields": [
              {
                "mode": "REPEATED",
                "name": "allowed_values",
                "type": "STRING"
              },
              {
                "mode": "REPEATED",
                "name": "denied_values",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "all_values",
                "type": "INTEGER"
              },
              {
                "mode": "NULLABLE",
                "name": "suggested_value",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "inherit_from_parent",
                "type": "BOOLEAN"
              }
            ],
            "mode": "NULLABLE",
            "name": "list_policy",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "enforced",
                "type": "BOOLEAN"
              }
            ],
            "mode": "NULLABLE",
            "name": "boolean_policy",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "_present",
                "type": "BOOLEAN"
              }
            ],
            "mode": "NULLABLE",
            "name": "restore_default",
            "type": "RECORD"
          }
        ],
        "mode": "REPEATED",
        "name": "org_policy",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]
  • VPCSC-Richtlinie:Wenn Sie den Inhaltstyp ACCESS_POLICY in der REST API oder access-policy in der gcloud CLI festlegen, erstellen Sie eine BigQuery-Tabelle mit dem folgenden Schema.

    VPCSC-Richtlinienschema

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "name",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "parent",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "title",
            "type": "STRING"
          },
          {
            "mode": "REPEATED",
            "name": "scopes",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "etag",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "access_policy",
        "type": "RECORD"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "name",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "title",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "description",
            "type": "STRING"
          },
          {
            "fields": [
              {
                "fields": [
                  {
                    "mode": "REPEATED",
                    "name": "ip_subnetworks",
                    "type": "STRING"
                  },
                  {
                    "fields": [
                      {
                        "mode": "NULLABLE",
                        "name": "require_screenlock",
                        "type": "BOOLEAN"
                      },
                      {
                        "mode": "REPEATED",
                        "name": "allowed_encryption_statuses",
                        "type": "INTEGER"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "os_type",
                            "type": "INTEGER"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "minimum_version",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "require_verified_chrome_os",
                            "type": "BOOLEAN"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "os_constraints",
                        "type": "RECORD"
                      },
                      {
                        "mode": "REPEATED",
                        "name": "allowed_device_management_levels",
                        "type": "INTEGER"
                      },
                      {
                        "mode": "NULLABLE",
                        "name": "require_admin_approval",
                        "type": "BOOLEAN"
                      },
                      {
                        "mode": "NULLABLE",
                        "name": "require_corp_owned",
                        "type": "BOOLEAN"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "device_policy",
                    "type": "RECORD"
                  },
                  {
                    "mode": "REPEATED",
                    "name": "required_access_levels",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "negate",
                    "type": "BOOLEAN"
                  },
                  {
                    "mode": "REPEATED",
                    "name": "members",
                    "type": "STRING"
                  },
                  {
                    "mode": "REPEATED",
                    "name": "regions",
                    "type": "STRING"
                  },
                  {
                    "fields": [
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "network",
                            "type": "STRING"
                          },
                          {
                            "mode": "REPEATED",
                            "name": "vpc_ip_subnetworks",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "vpc_subnetwork",
                        "type": "RECORD"
                      }
                    ],
                    "mode": "REPEATED",
                    "name": "vpc_network_sources",
                    "type": "RECORD"
                  }
                ],
                "mode": "REPEATED",
                "name": "conditions",
                "type": "RECORD"
              },
              {
                "mode": "NULLABLE",
                "name": "combining_function",
                "type": "INTEGER"
              }
            ],
            "mode": "NULLABLE",
            "name": "basic",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "fields": [
                  {
                    "mode": "NULLABLE",
                    "name": "expression",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "title",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "description",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "location",
                    "type": "STRING"
                  }
                ],
                "mode": "NULLABLE",
                "name": "expr",
                "type": "RECORD"
              }
            ],
            "mode": "NULLABLE",
            "name": "custom",
            "type": "RECORD"
          }
        ],
        "mode": "NULLABLE",
        "name": "access_level",
        "type": "RECORD"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "name",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "title",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "description",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "perimeter_type",
            "type": "INTEGER"
          },
          {
            "fields": [
              {
                "mode": "REPEATED",
                "name": "resources",
                "type": "STRING"
              },
              {
                "mode": "REPEATED",
                "name": "access_levels",
                "type": "STRING"
              },
              {
                "mode": "REPEATED",
                "name": "restricted_services",
                "type": "STRING"
              },
              {
                "fields": [
                  {
                    "mode": "NULLABLE",
                    "name": "enable_restriction",
                    "type": "BOOLEAN"
                  },
                  {
                    "mode": "REPEATED",
                    "name": "allowed_services",
                    "type": "STRING"
                  }
                ],
                "mode": "NULLABLE",
                "name": "vpc_accessible_services",
                "type": "RECORD"
              },
              {
                "fields": [
                  {
                    "fields": [
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "access_level",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "resource",
                            "type": "STRING"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "sources",
                        "type": "RECORD"
                      },
                      {
                        "mode": "REPEATED",
                        "name": "identities",
                        "type": "STRING"
                      },
                      {
                        "mode": "NULLABLE",
                        "name": "identity_type",
                        "type": "INTEGER"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "ingress_from",
                    "type": "RECORD"
                  },
                  {
                    "fields": [
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "service_name",
                            "type": "STRING"
                          },
                          {
                            "fields": [
                              {
                                "mode": "NULLABLE",
                                "name": "method",
                                "type": "STRING"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "permission",
                                "type": "STRING"
                              }
                            ],
                            "mode": "REPEATED",
                            "name": "method_selectors",
                            "type": "RECORD"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "operations",
                        "type": "RECORD"
                      },
                      {
                        "mode": "REPEATED",
                        "name": "resources",
                        "type": "STRING"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "ingress_to",
                    "type": "RECORD"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "title",
                    "type": "STRING"
                  }
                ],
                "mode": "REPEATED",
                "name": "ingress_policies",
                "type": "RECORD"
              },
              {
                "fields": [
                  {
                    "fields": [
                      {
                        "mode": "REPEATED",
                        "name": "identities",
                        "type": "STRING"
                      },
                      {
                        "mode": "NULLABLE",
                        "name": "identity_type",
                        "type": "INTEGER"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "access_level",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "resource",
                            "type": "STRING"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "sources",
                        "type": "RECORD"
                      },
                      {
                        "mode": "NULLABLE",
                        "name": "source_restriction",
                        "type": "INTEGER"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "egress_from",
                    "type": "RECORD"
                  },
                  {
                    "fields": [
                      {
                        "mode": "REPEATED",
                        "name": "resources",
                        "type": "STRING"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "service_name",
                            "type": "STRING"
                          },
                          {
                            "fields": [
                              {
                                "mode": "NULLABLE",
                                "name": "method",
                                "type": "STRING"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "permission",
                                "type": "STRING"
                              }
                            ],
                            "mode": "REPEATED",
                            "name": "method_selectors",
                            "type": "RECORD"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "operations",
                        "type": "RECORD"
                      },
                      {
                        "mode": "REPEATED",
                        "name": "external_resources",
                        "type": "STRING"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "egress_to",
                    "type": "RECORD"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "title",
                    "type": "STRING"
                  }
                ],
                "mode": "REPEATED",
                "name": "egress_policies",
                "type": "RECORD"
              }
            ],
            "mode": "NULLABLE",
            "name": "status",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "mode": "REPEATED",
                "name": "resources",
                "type": "STRING"
              },
              {
                "mode": "REPEATED",
                "name": "access_levels",
                "type": "STRING"
              },
              {
                "mode": "REPEATED",
                "name": "restricted_services",
                "type": "STRING"
              },
              {
                "fields": [
                  {
                    "mode": "NULLABLE",
                    "name": "enable_restriction",
                    "type": "BOOLEAN"
                  },
                  {
                    "mode": "REPEATED",
                    "name": "allowed_services",
                    "type": "STRING"
                  }
                ],
                "mode": "NULLABLE",
                "name": "vpc_accessible_services",
                "type": "RECORD"
              },
              {
                "fields": [
                  {
                    "fields": [
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "access_level",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "resource",
                            "type": "STRING"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "sources",
                        "type": "RECORD"
                      },
                      {
                        "mode": "REPEATED",
                        "name": "identities",
                        "type": "STRING"
                      },
                      {
                        "mode": "NULLABLE",
                        "name": "identity_type",
                        "type": "INTEGER"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "ingress_from",
                    "type": "RECORD"
                  },
                  {
                    "fields": [
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "service_name",
                            "type": "STRING"
                          },
                          {
                            "fields": [
                              {
                                "mode": "NULLABLE",
                                "name": "method",
                                "type": "STRING"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "permission",
                                "type": "STRING"
                              }
                            ],
                            "mode": "REPEATED",
                            "name": "method_selectors",
                            "type": "RECORD"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "operations",
                        "type": "RECORD"
                      },
                      {
                        "mode": "REPEATED",
                        "name": "resources",
                        "type": "STRING"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "ingress_to",
                    "type": "RECORD"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "title",
                    "type": "STRING"
                  }
                ],
                "mode": "REPEATED",
                "name": "ingress_policies",
                "type": "RECORD"
              },
              {
                "fields": [
                  {
                    "fields": [
                      {
                        "mode": "REPEATED",
                        "name": "identities",
                        "type": "STRING"
                      },
                      {
                        "mode": "NULLABLE",
                        "name": "identity_type",
                        "type": "INTEGER"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "access_level",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "resource",
                            "type": "STRING"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "sources",
                        "type": "RECORD"
                      },
                      {
                        "mode": "NULLABLE",
                        "name": "source_restriction",
                        "type": "INTEGER"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "egress_from",
                    "type": "RECORD"
                  },
                  {
                    "fields": [
                      {
                        "mode": "REPEATED",
                        "name": "resources",
                        "type": "STRING"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "service_name",
                            "type": "STRING"
                          },
                          {
                            "fields": [
                              {
                                "mode": "NULLABLE",
                                "name": "method",
                                "type": "STRING"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "permission",
                                "type": "STRING"
                              }
                            ],
                            "mode": "REPEATED",
                            "name": "method_selectors",
                            "type": "RECORD"
                          }
                        ],
                        "mode": "REPEATED",
                        "name": "operations",
                        "type": "RECORD"
                      },
                      {
                        "mode": "REPEATED",
                        "name": "external_resources",
                        "type": "STRING"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "egress_to",
                    "type": "RECORD"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "title",
                    "type": "STRING"
                  }
                ],
                "mode": "REPEATED",
                "name": "egress_policies",
                "type": "RECORD"
              }
            ],
            "mode": "NULLABLE",
            "name": "spec",
            "type": "RECORD"
          },
          {
            "mode": "NULLABLE",
            "name": "use_explicit_dry_run_spec",
            "type": "BOOLEAN"
          },
          {
            "mode": "NULLABLE",
            "name": "etag",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "service_perimeter",
        "type": "RECORD"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "name",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "authorization_type",
            "type": "INTEGER"
          },
          {
            "mode": "NULLABLE",
            "name": "asset_type",
            "type": "INTEGER"
          },
          {
            "mode": "NULLABLE",
            "name": "authorization_direction",
            "type": "INTEGER"
          },
          {
            "mode": "REPEATED",
            "name": "orgs",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "authorized_orgs_desc",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]
  • OSConfig-Instanzinventar:Wenn Sie den Inhaltstyp OS_INVENTORY in der REST API oder os-inventory in der gcloud CLI festlegen, erstellen Sie eine BigQuery-Tabelle mit dem folgenden Schema.

    OS Inventory-Schema

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "name",
            "type": "STRING"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "hostname",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "long_name",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "short_name",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "version",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "architecture",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "kernel_version",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "kernel_release",
                "type": "STRING"
              },
              {
                "mode": "NULLABLE",
                "name": "osconfig_agent_version",
                "type": "STRING"
              }
            ],
            "mode": "NULLABLE",
            "name": "os_info",
            "type": "RECORD"
          },
          {
            "fields": [
              {
                "mode": "NULLABLE",
                "name": "key",
                "type": "STRING"
              },
              {
                "fields": [
                  {
                    "mode": "NULLABLE",
                    "name": "id",
                    "type": "STRING"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "origin_type",
                    "type": "INTEGER"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "create_time",
                    "type": "TIMESTAMP"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "update_time",
                    "type": "TIMESTAMP"
                  },
                  {
                    "mode": "NULLABLE",
                    "name": "type",
                    "type": "INTEGER"
                  },
                  {
                    "fields": [
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "yum_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "apt_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "zypper_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "googet_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "patch_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "category",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "severity",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "summary",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "zypper_patch",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "title",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "description",
                            "type": "STRING"
                          },
                          {
                            "fields": [
                              {
                                "mode": "NULLABLE",
                                "name": "id",
                                "type": "STRING"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "name",
                                "type": "STRING"
                              }
                            ],
                            "mode": "REPEATED",
                            "name": "categories",
                            "type": "RECORD"
                          },
                          {
                            "mode": "REPEATED",
                            "name": "kb_article_ids",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "support_url",
                            "type": "STRING"
                          },
                          {
                            "mode": "REPEATED",
                            "name": "more_info_urls",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "update_id",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "revision_number",
                            "type": "INTEGER"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "last_deployment_change_time",
                            "type": "TIMESTAMP"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "wua_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "caption",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "description",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "hot_fix_id",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "install_time",
                            "type": "TIMESTAMP"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "qfe_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "cos_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "display_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "display_version",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "publisher",
                            "type": "STRING"
                          },
                          {
                            "fields": [
                              {
                                "mode": "NULLABLE",
                                "name": "year",
                                "type": "INTEGER"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "month",
                                "type": "INTEGER"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "day",
                                "type": "INTEGER"
                              }
                            ],
                            "mode": "NULLABLE",
                            "name": "install_date",
                            "type": "RECORD"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "help_link",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "windows_application",
                        "type": "RECORD"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "installed_package",
                    "type": "RECORD"
                  },
                  {
                    "fields": [
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "yum_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "apt_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "zypper_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "googet_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "patch_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "category",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "severity",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "summary",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "zypper_patch",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "title",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "description",
                            "type": "STRING"
                          },
                          {
                            "fields": [
                              {
                                "mode": "NULLABLE",
                                "name": "id",
                                "type": "STRING"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "name",
                                "type": "STRING"
                              }
                            ],
                            "mode": "REPEATED",
                            "name": "categories",
                            "type": "RECORD"
                          },
                          {
                            "mode": "REPEATED",
                            "name": "kb_article_ids",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "support_url",
                            "type": "STRING"
                          },
                          {
                            "mode": "REPEATED",
                            "name": "more_info_urls",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "update_id",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "revision_number",
                            "type": "INTEGER"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "last_deployment_change_time",
                            "type": "TIMESTAMP"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "wua_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "caption",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "description",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "hot_fix_id",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "install_time",
                            "type": "TIMESTAMP"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "qfe_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "package_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "architecture",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "version",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "cos_package",
                        "type": "RECORD"
                      },
                      {
                        "fields": [
                          {
                            "mode": "NULLABLE",
                            "name": "display_name",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "display_version",
                            "type": "STRING"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "publisher",
                            "type": "STRING"
                          },
                          {
                            "fields": [
                              {
                                "mode": "NULLABLE",
                                "name": "year",
                                "type": "INTEGER"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "month",
                                "type": "INTEGER"
                              },
                              {
                                "mode": "NULLABLE",
                                "name": "day",
                                "type": "INTEGER"
                              }
                            ],
                            "mode": "NULLABLE",
                            "name": "install_date",
                            "type": "RECORD"
                          },
                          {
                            "mode": "NULLABLE",
                            "name": "help_link",
                            "type": "STRING"
                          }
                        ],
                        "mode": "NULLABLE",
                        "name": "windows_application",
                        "type": "RECORD"
                      }
                    ],
                    "mode": "NULLABLE",
                    "name": "available_package",
                    "type": "RECORD"
                  }
                ],
                "mode": "NULLABLE",
                "name": "value",
                "type": "RECORD"
              }
            ],
            "mode": "REPEATED",
            "name": "items",
            "type": "RECORD"
          },
          {
            "mode": "NULLABLE",
            "name": "update_time",
            "type": "TIMESTAMP"
          }
        ],
        "mode": "NULLABLE",
        "name": "os_inventory",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]
  • Beziehung:Wenn Sie den Inhaltstyp RELATIONSHIP in der REST API oder relationship in der gcloud CLI festlegen, erstellen Sie eine BigQuery-Tabelle mit dem folgenden Schema.

    Beziehungsschema

    [
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "asset_type",
        "type": "STRING"
      },
      {
        "fields": [
          {
            "mode": "NULLABLE",
            "name": "asset",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "asset_type",
            "type": "STRING"
          },
          {
            "mode": "REPEATED",
            "name": "ancestors",
            "type": "STRING"
          },
          {
            "mode": "NULLABLE",
            "name": "relationship_type",
            "type": "STRING"
          }
        ],
        "mode": "NULLABLE",
        "name": "related_asset",
        "type": "RECORD"
      },
      {
        "mode": "REPEATED",
        "name": "ancestors",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "update_time",
        "type": "TIMESTAMP"
      }
    ]

Asset-Snapshot exportieren

gcloud

gcloud asset export \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --snapshot-time="SNAPSHOT_TIME" \
    --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
    --output-bigquery-force

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 exportieren möchten.
    • folder=FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Asset-Metadaten ist, die Sie 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 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: Optional. Die Projekt-ID des standardmäßigen Cloud Asset Inventory-Dienstkontos, das Berechtigungen zum Verwalten Ihrer BigQuery-Datasets und -Tabellen hat. Weitere Informationen zum Festlegen des Abrechnungsprojekts

  • ASSET_TYPE_#: Optional. Eine durch Kommas getrennte Liste von durchsuchbaren Asset-Typen. RE2-kompatible reguläre Ausdrücke werden unterstützt. Wenn der reguläre Ausdruck mit keinem unterstützten Asset-Typ übereinstimmt, wird ein INVALID_ARGUMENT-Fehler zurückgegeben. Wenn --asset-types nicht angegeben ist, werden alle Asset-Typen zurückgegeben.
  • CONTENT_TYPE: Optional. Der Inhaltstyp der Metadaten, die Sie abrufen möchten. Wenn --content-type nicht angegeben ist, werden nur grundlegende Informationen zurückgegeben, z. B. Asset-Namen, der Zeitpunkt der letzten Aktualisierung der Assets und die Projekte, Ordner und Organisationen, zu denen sie gehören.
  • RELATIONSHIP_TYPE_#: Optional. Erfordert Zugriff auf die Premium- oder Enterprise-Stufe von Security Command Center oder Gemini Cloud Assist. Eine durch Kommas getrennte Liste der Asset-Beziehungstypen, die Sie abrufen möchten. Sie müssen CONTENT_TYPE auf RELATIONSHIP setzen, damit das funktioniert.
  • SNAPSHOT_TIME: Optional. Die Zeit, zu der Sie einen Snapshot Ihrer Assets erstellen möchten, im gcloud-Thema zum Datums-/Uhrzeit-Format. Der Wert darf maximal 35 Tage in der Vergangenheit liegen. Wenn --snapshot-time nicht angegeben ist, wird ein Snapshot zum aktuellen Zeitpunkt erstellt.
  • 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.

Das Flag --output-bigquery-force überschreibt die Zieltabelle, falls sie vorhanden ist.

Alle Optionen finden Sie in der Referenz zur gcloud CLI.

Beispiel

Führen Sie den folgenden Befehl aus, um die resource-Metadaten vom 30. Januar 2024 im Projekt my-project in die BigQuery-Tabelle my-table zu exportieren.

gcloud asset export \
    --project=my-project \
    --content-type=resource \
    --snapshot-time="2024-01-30" \
    --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \
    --output-bigquery-force

Beispielantwort

Export in progress for root asset [projects/my-project].
Use [gcloud asset operations describe projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000] to check the status of the operation.

REST

HTTP-Methode und URL:

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

Header:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON-Text anfordern:

{
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "relationshipTypes": [
    "RELATIONSHIP_TYPE_1",
    "RELATIONSHIP_TYPE_2",
    "..."
  ],
  "readTime": "SNAPSHOT_TIME",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID",
      "table": "TABLE_NAME",
      "force": true
    }
  }
}

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 exportieren möchten.
    • projects/PROJECT_NUMBER, wobei PROJECT_NUMBER die Nummer des Projekts ist, das die Asset-Metadaten enthält, die Sie 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 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 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

  • ASSET_TYPE_#: Optional. Ein Array von suchbaren Asset-Typen. RE2-kompatible reguläre Ausdrücke werden unterstützt. Wenn der reguläre Ausdruck mit keinem unterstützten Asset-Typ übereinstimmt, wird ein INVALID_ARGUMENT-Fehler zurückgegeben. Wenn assetTypes nicht angegeben ist, werden alle Asset-Typen zurückgegeben.
  • CONTENT_TYPE: Optional. Der Inhaltstyp der Metadaten, die Sie abrufen möchten. Wenn contentType nicht angegeben ist, werden nur grundlegende Informationen zurückgegeben, z. B. Asset-Namen, der Zeitpunkt der letzten Aktualisierung der Assets sowie die Projekte, Ordner und Organisationen, zu denen sie gehören.
  • RELATIONSHIP_TYPE_#: Optional. Erfordert Zugriff auf die Premium- oder Enterprise-Stufe von Security Command Center oder Gemini Cloud Assist. Eine durch Kommas getrennte Liste der Asset-Beziehungstypen, die Sie abrufen möchten. Sie müssen CONTENT_TYPE auf RELATIONSHIP setzen, damit das funktioniert.
  • SNAPSHOT_TIME: Optional. Die Zeit, zu der Sie einen Snapshot Ihrer Assets erstellen möchten, im RFC 3339-Format. Der Wert darf maximal 35 Tage in der Vergangenheit liegen. Wenn readTime nicht angegeben ist, wird ein Snapshot zum aktuellen Zeitpunkt erstellt.
  • 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.

Das Schlüssel/Wert-Paar "force": true überschreibt die Zieltabelle, falls sie vorhanden ist.

Alle Optionen finden Sie in der REST-Referenz.

Beispiele für Befehle

Führen Sie einen der folgenden Befehle aus, um Ihre resource-Metadaten, wie sie am 30. Januar 2024 im Projekt my-project vorhanden waren, in die BigQuery-Tabelle my-table zu exportieren.

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 '{
            "contentType": "RESOURCE",
            "readTime": "2024-01-30T00:00:00Z",
            "outputConfig": {
              "bigqueryDestination": {
                "dataset": "projects/my-project/datasets/my-dataset",
                "table": "my-table",
                "force": true
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

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


$body = @"
{
  "contentType": "RESOURCE",
  "readTime": "2024-01-30T00:00:00Z",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/my-project/datasets/my-dataset",
      "table": "my-table",
      "force": true
    }
  }
}
"@

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

Beispielantwort

{
  "name": "projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.asset.v1.ExportAssetsRequest",
    "parent": "projects/000000000000",
    "readTime": "2024-01-30T00:00:00Z",
    "contentType": "RESOURCE",
    "outputConfig": {
      "bigqueryDestination": {
        "dataset": "projects/my-project/datasets/my-dataset",
        "table": "my-table",
        "force": true
      }
    }
  }
}

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie unter Cloud Asset Inventory-Clientbibliotheken.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


// Sample asset-quickstart exports assets to given bigquery table.
package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"strings"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
)

func main() {
	ctx := context.Background()
	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()
	datasetID := strings.Replace(fmt.Sprintf("%s-for-assets", projectID), "-", "_", -1)
	dataset := fmt.Sprintf("projects/%s/datasets/%s", projectID, datasetID)
	req := &assetpb.ExportAssetsRequest{
		Parent: fmt.Sprintf("projects/%s", projectID),
		OutputConfig: &assetpb.OutputConfig{
			Destination: &assetpb.OutputConfig_BigqueryDestination{
				BigqueryDestination: &assetpb.BigQueryDestination{
					Dataset: dataset,
					Table:   "test",
					Force:   true,
				},
			},
		},
	}
	op, err := client.ExportAssets(ctx, req)
	if err != nil {
		log.Fatalf("ExportAssets: %v", err)
	}
	resp, err := op.Wait(ctx)
	if err != nil {
		log.Fatalf("Wait: %v", err)
	}
	fmt.Print(resp)
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie unter Cloud Asset Inventory-Clientbibliotheken.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

// Imports the Google Cloud client library

import com.google.cloud.ServiceOptions;
import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.BigQueryDestination;
import com.google.cloud.asset.v1.ContentType;
import com.google.cloud.asset.v1.ExportAssetsRequest;
import com.google.cloud.asset.v1.ExportAssetsRequest.Builder;
import com.google.cloud.asset.v1.ExportAssetsResponse;
import com.google.cloud.asset.v1.OutputConfig;
import com.google.cloud.asset.v1.PartitionSpec;
import com.google.cloud.asset.v1.ProjectName;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;

public class ExportAssetsBigqueryExample {

  // Use the default project Id.
  private static final String projectId = ServiceOptions.getDefaultProjectId();

  /** 
   * Export assets to BigQuery for a project.

   * @param bigqueryDataset which dataset the results will be exported to
   * @param bigqueryTable which table the results will be exported to
   * @param contentType determines the schema for the table
   * @param assetTypes a list of asset types to export. if empty, export all.
   * @param isPerType separate BigQuery tables for each resource type
   */
  public static void exportBigQuery(String bigqueryDataset, String bigqueryTable,
      ContentType contentType, String[] assetTypes, boolean isPerType)
      throws IOException, IllegalArgumentException, InterruptedException, ExecutionException {
    try (AssetServiceClient client = AssetServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      OutputConfig outputConfig;
      // Outputs to per-type BigQuery table.
      if (isPerType) {
        outputConfig =
            OutputConfig.newBuilder()
                .setBigqueryDestination(
                    BigQueryDestination.newBuilder()
                        .setDataset(bigqueryDataset)
                        .setTable(bigqueryTable)
                        .setForce(true)
                        .setSeparateTablesPerAssetType(true)
                        .setPartitionSpec(
                            PartitionSpec.newBuilder()
                                .setPartitionKey(PartitionSpec.PartitionKey.READ_TIME)
                                .build())
                        .build())
                .build();
      } else {
        outputConfig =
            OutputConfig.newBuilder()
                .setBigqueryDestination(
                    BigQueryDestination.newBuilder()
                        .setDataset(bigqueryDataset)
                        .setTable(bigqueryTable)
                        .setForce(true)
                        .build())
                .build();
      }
      Builder exportAssetsRequestBuilder = ExportAssetsRequest.newBuilder()
          .setParent(parent.toString()).setContentType(contentType).setOutputConfig(outputConfig);
      if (assetTypes.length > 0) {
        exportAssetsRequestBuilder.addAllAssetTypes(Arrays.asList(assetTypes));
      }
      ExportAssetsRequest request = exportAssetsRequestBuilder.build();
      ExportAssetsResponse response = client.exportAssetsAsync(request).get();
      System.out.println(response);
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie unter Cloud Asset Inventory-Clientbibliotheken.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const dataSet = 'projects/project_id/datasets/dataset_id';
// const table = 'mytable';

const {AssetServiceClient} = require('@google-cloud/asset');
const client = new AssetServiceClient();

async function exportAssetsBigquery() {
  const projectId = await client.getProjectId();
  const projectResource = client.projectPath(projectId);
  const dataset = dataSet;

  const request = {
    parent: projectResource,
    outputConfig: {
      bigqueryDestination: {
        dataset: `projects/${projectId}/${dataset}`,
        table: table,
        force: true,
      },
    },
  };

  // Handle the operation using the promise pattern.
  const [operation] = await client.exportAssets(request);

  // Operation#promise starts polling for the completion of the operation.
  const [result] = await operation.promise();

  // Do things with with the response.
  console.log(result);
}

exportAssetsBigquery();

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie unter Cloud Asset Inventory-Clientbibliotheken.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import asset_v1

# TODO project_id = 'Your Google Cloud Project ID'
# TODO dataset = 'Your BigQuery dataset path'
# TODO table = 'Your BigQuery table name'
# TODO content_type ="Content type to export"

client = asset_v1.AssetServiceClient()
parent = f"projects/{project_id}"
output_config = asset_v1.OutputConfig()
output_config.bigquery_destination.dataset = dataset
output_config.bigquery_destination.table = table
output_config.bigquery_destination.force = True
response = client.export_assets(
    request={
        "parent": parent,
        "content_type": content_type,
        "output_config": output_config,
    }
)
print(response.result())

Asset-Snapshot in separate Tabellen für jeden Asset-Typ exportieren

Sie können Assets mit dem Flag --per-asset-type in der gcloud CLI und "separateTablesPerAssetType": true in REST API-Anfragen in separate BigQuery-Tabellen für jeden Assettyp exportieren. Der Inhaltstyp RELATIONSHIP kann nicht auf diese Weise exportiert werden.

In diesem Modus ist der Name jeder Tabelle TABLE_NAME, gefolgt von _ (Unterstrich) und dem Namen des Asset-Typs. Nicht alphanumerische Zeichen werden durch _ ersetzt.

Wenn der Export in eine Tabelle fehlschlägt, schlägt der gesamte Exportvorgang fehl und gibt den ersten Fehler zurück. Die Ergebnisse früherer erfolgreicher Exporte bleiben erhalten.

Die folgenden Typen werden in einen JSON-String verpackt, um ein Kompatibilitätsproblem zwischen Proto3 und BigQuery-Typen zu lösen.

  • google.protobuf.Timestamp

  • google.protobuf.Duration

  • google.protobuf.FieldMask

  • google.protobuf.ListValue

  • google.protobuf.Value

  • google.protobuf.Struct

  • google.api.*

gcloud

gcloud asset export \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --snapshot-time="SNAPSHOT_TIME" \
    --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
    --per-asset-type \
    --output-bigquery-force

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 exportieren möchten.
    • folder=FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Asset-Metadaten ist, die Sie 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 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: Optional. Die Projekt-ID des standardmäßigen Cloud Asset Inventory-Dienstkontos, das Berechtigungen zum Verwalten Ihrer BigQuery-Datasets und -Tabellen hat. Weitere Informationen zum Festlegen des Abrechnungsprojekts

  • ASSET_TYPE_#: Optional. Eine durch Kommas getrennte Liste von durchsuchbaren Asset-Typen. RE2-kompatible reguläre Ausdrücke werden unterstützt. Wenn der reguläre Ausdruck mit keinem unterstützten Asset-Typ übereinstimmt, wird ein INVALID_ARGUMENT-Fehler zurückgegeben. Wenn --asset-types nicht angegeben ist, werden alle Asset-Typen zurückgegeben.
  • CONTENT_TYPE: Optional. Der Inhaltstyp der Metadaten, die Sie abrufen möchten. Der Inhaltstyp RELATIONSHIP kann nicht mit --per-asset-type verwendet werden .

    Wenn --content-type nicht angegeben ist, werden nur grundlegende Informationen zurückgegeben, z. B. Asset-Namen, der Zeitpunkt der letzten Aktualisierung der Assets und die Projekte, Ordner und Organisationen, zu denen sie gehören.

  • SNAPSHOT_TIME: Optional. Die Zeit, zu der Sie einen Snapshot Ihrer Assets erstellen möchten, im gcloud-Thema zum Datums-/Uhrzeit-Format. Der Wert darf maximal 35 Tage in der Vergangenheit liegen. Wenn --snapshot-time nicht angegeben ist, wird ein Snapshot zum aktuellen Zeitpunkt erstellt.
  • 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: Das Präfix für die BigQuery-Tabellen, in die Sie Ihre Metadaten exportieren. Die vollständigen Namen der Tabellen bestehen aus dem Präfix, gefolgt von _ und dem Asset-Typ.

Das Flag --output-bigquery-force überschreibt die Zieltabelle, falls sie vorhanden ist.

Alle Optionen finden Sie in der Referenz zur gcloud CLI.

Beispiel

Führen Sie den folgenden Befehl aus, um die resource-Metadaten, wie sie am 30. Januar 2024 im Projekt my-project vorhanden waren, in mehrere BigQuery-Tabellen zu exportieren, die das Präfix my-table haben.

gcloud asset export \
    --project=my-project \
    --content-type=resource \
    --snapshot-time="2024-01-30" \
    --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \
    --per-asset-type \
    --output-bigquery-force

REST

HTTP-Methode und URL:

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

Header:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON-Text anfordern:

{
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "readTime": "SNAPSHOT_TIME",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID",
      "table": "TABLE_NAME",
      "force": true,
      "separateTablesPerAssetType": true
    }
  }
}

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 exportieren möchten.
    • projects/PROJECT_NUMBER, wobei PROJECT_NUMBER die Nummer des Projekts ist, das die Asset-Metadaten enthält, die Sie 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 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 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

  • ASSET_TYPE_#: Optional. Ein Array von suchbaren Asset-Typen. RE2-kompatible reguläre Ausdrücke werden unterstützt. Wenn der reguläre Ausdruck mit keinem unterstützten Asset-Typ übereinstimmt, wird ein INVALID_ARGUMENT-Fehler zurückgegeben. Wenn assetTypes nicht angegeben ist, werden alle Asset-Typen zurückgegeben.
  • CONTENT_TYPE: Optional. Der Inhaltstyp der Metadaten, die Sie abrufen möchten. Der Inhaltstyp RELATIONSHIP kann nicht mit "separateTablesPerAssetType": true verwendet werden .

    Wenn contentType nicht angegeben ist, werden nur grundlegende Informationen zurückgegeben, z. B. Asset-Namen, der Zeitpunkt der letzten Aktualisierung der Assets sowie die Projekte, Ordner und Organisationen, zu denen sie gehören.

  • SNAPSHOT_TIME: Optional. Die Zeit, zu der Sie einen Snapshot Ihrer Assets erstellen möchten, im RFC 3339-Format. Der Wert darf maximal 35 Tage in der Vergangenheit liegen. Wenn readTime nicht angegeben ist, wird ein Snapshot zum aktuellen Zeitpunkt erstellt.
  • 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: Das Präfix für die BigQuery-Tabellen, in die Sie Ihre Metadaten exportieren. Die vollständigen Namen der Tabellen bestehen aus dem Präfix, gefolgt von _ und dem Asset-Typ.

Das Schlüssel/Wert-Paar "force": true überschreibt die Zieltabelle, falls sie vorhanden ist.

Beispiele für Befehle

Führen Sie einen der folgenden Befehle aus, um die resource-Metadaten, wie sie am 30. Januar 2024 im Projekt my-project vorhanden waren, in mehrere BigQuery-Tabellen zu exportieren, die das Präfix my-table haben.

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 '{
            "contentType": "RESOURCE",
            "readTime": "2024-01-30T00:00:00Z",
            "outputConfig": {
              "bigqueryDestination": {
                "dataset": "projects/my-project/datasets/my-dataset",
                "table": "my-table",
                "force": true,
                "separateTablesPerAssetType": true
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

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


$body = @"
{
  "contentType": "RESOURCE",
  "readTime": "2024-01-30T00:00:00Z",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/my-project/datasets/my-dataset",
      "table": "my-table",
      "force": true,
      "separateTablesPerAssetType": true
    }
  }
}
"@

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

Asset-Snapshot in eine nach Datum partitionierte Tabelle mit Zeiteinheit exportieren

Sie können Assets in einem Projekt in nach Zeiteinheit partitionierte Tabellen exportieren. Der exportierte Snapshot wird in einer BigQuery-Tabelle mit dem Namen TABLE_NAME mit täglicher Granularität und zwei zusätzlichen Zeitstempelspalten, readTime und requestTime, gespeichert. Eine davon geben Sie mit dem Wert PARTITION_KEY als Partitionierungsspalte an.

Wenn Sie Assets in einem Projekt in partitionierte Tabellen exportieren möchten, stellen Sie eine der folgenden Anfragen.

gcloud

gcloud asset export \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --snapshot-time="SNAPSHOT_TIME" \
    --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
    --partition-key=PARTITION_KEY \
    --output-bigquery-force

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 exportieren möchten.
    • folder=FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit den Asset-Metadaten ist, die Sie 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 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: Optional. Die Projekt-ID des standardmäßigen Cloud Asset Inventory-Dienstkontos, das Berechtigungen zum Verwalten Ihrer BigQuery-Datasets und -Tabellen hat. Weitere Informationen zum Festlegen des Abrechnungsprojekts

  • ASSET_TYPE_#: Optional. Eine durch Kommas getrennte Liste von durchsuchbaren Asset-Typen. RE2-kompatible reguläre Ausdrücke werden unterstützt. Wenn der reguläre Ausdruck mit keinem unterstützten Asset-Typ übereinstimmt, wird ein INVALID_ARGUMENT-Fehler zurückgegeben. Wenn --asset-types nicht angegeben ist, werden alle Asset-Typen zurückgegeben.
  • CONTENT_TYPE: Optional. Der Inhaltstyp der Metadaten, die Sie abrufen möchten. Wenn --content-type nicht angegeben ist, werden nur grundlegende Informationen zurückgegeben, z. B. Asset-Namen, der Zeitpunkt der letzten Aktualisierung der Assets und die Projekte, Ordner und Organisationen, zu denen sie gehören.
  • RELATIONSHIP_TYPE_#: Optional. Erfordert Zugriff auf die Premium- oder Enterprise-Stufe von Security Command Center oder Gemini Cloud Assist. Eine durch Kommas getrennte Liste der Asset-Beziehungstypen, die Sie abrufen möchten. Sie müssen CONTENT_TYPE auf RELATIONSHIP setzen, damit das funktioniert.
  • SNAPSHOT_TIME: Optional. Die Zeit, zu der Sie einen Snapshot Ihrer Assets erstellen möchten, im gcloud-Thema zum Datums-/Uhrzeit-Format. Der Wert darf maximal 35 Tage in der Vergangenheit liegen. Wenn --snapshot-time nicht angegeben ist, wird ein Snapshot zum aktuellen Zeitpunkt erstellt.
  • 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.
  • PARTITION_KEY: Die Partitionsspalte beim Exportieren in partitionierte BigQuery-Tabellen. Gültige Werte sind read-time und request-time.

Das Flag --output-bigquery-force überschreibt Daten in der entsprechenden Partition in der Zieltabelle. Die Daten in den verschiedenen Partitionen bleiben erhalten.

Wenn --output-bigquery-force nicht angegeben ist, werden exportierte Daten an die entsprechende Partition angehängt.

Der Exportvorgang schlägt fehl, wenn eine Schemaaktualisierung oder ein Versuch zum Anfügen von Daten fehlschlägt. Das ist auch der Fall, wenn die Zieltabelle bereits vorhanden ist und nicht das Schema hat, das für den Export erwartet wird.

Alle Optionen finden Sie in der Referenz zur gcloud CLI.

Beispiel

Führen Sie den folgenden Befehl aus, um die resource-Metadaten vom 30. Januar 2024 im Projekt my-project in die BigQuery-Tabelle my-table zu exportieren.

gcloud asset export \
    --project=projects/my-project \
    --content-type=resource \
    --snapshot-time="2024-01-30" \
    --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \
    --partition-key=my-partition-key \
    --output-bigquery-force

REST

HTTP-Methode und URL:

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

Header:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON-Text anfordern:

{
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "relationshipTypes": [
    "RELATIONSHIP_TYPE_1",
    "RELATIONSHIP_TYPE_2",
    "..."
  ],
  "readTime": "SNAPSHOT_TIME",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID",
      "table": "TABLE_NAME",
      "partitionSpec": {
        "partitionKey": "PARTITION_KEY"
      },
      "force": true,
    }
  }
}

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 exportieren möchten.
    • projects/PROJECT_NUMBER, wobei PROJECT_NUMBER die Nummer des Projekts ist, das die Asset-Metadaten enthält, die Sie 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 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 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

  • ASSET_TYPE_#: Optional. Ein Array von suchbaren Asset-Typen. RE2-kompatible reguläre Ausdrücke werden unterstützt. Wenn der reguläre Ausdruck mit keinem unterstützten Asset-Typ übereinstimmt, wird ein INVALID_ARGUMENT-Fehler zurückgegeben. Wenn assetTypes nicht angegeben ist, werden alle Asset-Typen zurückgegeben.
  • CONTENT_TYPE: Optional. Der Inhaltstyp der Metadaten, die Sie abrufen möchten. Wenn contentType nicht angegeben ist, werden nur grundlegende Informationen zurückgegeben, z. B. Asset-Namen, der Zeitpunkt der letzten Aktualisierung der Assets sowie die Projekte, Ordner und Organisationen, zu denen sie gehören.
  • RELATIONSHIP_TYPE_#: Optional. Erfordert Zugriff auf die Premium- oder Enterprise-Stufe von Security Command Center oder Gemini Cloud Assist. Eine durch Kommas getrennte Liste der Asset-Beziehungstypen, die Sie abrufen möchten. Sie müssen CONTENT_TYPE auf RELATIONSHIP setzen, damit das funktioniert.
  • SNAPSHOT_TIME: Optional. Die Zeit, zu der Sie einen Snapshot Ihrer Assets erstellen möchten, im RFC 3339-Format. Der Wert darf maximal 35 Tage in der Vergangenheit liegen. Wenn readTime nicht angegeben ist, wird ein Snapshot zum aktuellen Zeitpunkt erstellt.
  • 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.
  • PARTITION_KEY: Die Partitionsspalte beim Exportieren in partitionierte BigQuery-Tabellen. Gültige Werte sind READ_TIME und REQUEST_TIME.

Mit dem Schlüssel/Wert-Paar "force": true werden Daten in der entsprechenden Partition in der Zieltabelle überschrieben. Die Daten in den verschiedenen Partitionen bleiben erhalten.

Wenn force nicht festgelegt oder auf false gesetzt ist, werden exportierte Daten an die entsprechende Partition angefügt.

Der Exportvorgang schlägt fehl, wenn eine Schemaaktualisierung oder ein Versuch zum Anfügen von Daten fehlschlägt. Das ist auch der Fall, wenn die Zieltabelle bereits vorhanden ist und nicht das Schema hat, das für den Export erwartet wird.

Beispiele für Befehle

Führen Sie einen der folgenden Befehle aus, um Ihre resource-Metadaten, wie sie am 30. Januar 2024 im Projekt my-project vorhanden waren, in die BigQuery-Tabelle my-table zu exportieren.

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 '{
            "contentType": "RESOURCE",
            "readTime": "2024-01-30T00:00:00Z",
            "outputConfig": {
              "bigqueryDestination": {
                "dataset": "projects/my-project/datasets/my-dataset",
                "table": "my-table",
                "partitionSpec": {
                  "partitionKey": "my-partition-key"
                },
                "force": true,
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets

PowerShell (Windows)

$cred = gcloud auth print-access-token

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


$body = @"
{
  "contentType": "RESOURCE",
  "readTime": "2024-01-30T00:00:00Z",
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "projects/my-project/datasets/my-dataset",
      "table": "my-table",
      "partitionSpec": {
        "partitionKey": "my-partition-key"
      },
      "force": true,
    }
  }
}
"@

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

Status eines Exports prüfen

Exporte dauern eine Weile. Wenn Sie prüfen möchten, ob ein Export abgeschlossen ist, können Sie den Vorgang anhand seiner Vorgangs-ID abfragen.

Auch wenn Ihr Export abgeschlossen ist, kann es sein, dass jemand einen weiteren Export an dasselbe Ziel als separaten Vorgang angefordert hat. Neue Exportanfragen für dasselbe Ziel können gestellt werden, nachdem eine vorherige Anfrage abgeschlossen wurde oder mehr als 15 Minuten vergangen sind. Exportanfragen, die nicht diesen Bedingungen entsprechen, werden von Cloud Asset Inventory abgelehnt.

gcloud

So rufen Sie den Status Ihres Exports auf:

  1. Rufen Sie die OPERATION_PATH mit der Vorgangs-ID aus der Antwort auf Ihre Exportanfrage ab. Die OPERATION_PATH wird in der Antwort auf den Export angezeigt, die so formatiert ist:

    projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
    
  2. Führen Sie zum Prüfen des Exportstatus den folgenden Befehl mit der OPERATION_PATH aus:

    gcloud asset operations describe OPERATION_PATH
    

REST

So rufen Sie den Status Ihres Exports auf:

  1. Rufen Sie die OPERATION_PATH mit der Vorgangs-ID aus der Antwort auf Ihre Exportanfrage ab. Die OPERATION_PATH wird als Wert des Felds name in der Antwort auf den Export angezeigt, die so formatiert ist:

    projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
    
  2. So prüfen Sie den Status Ihres Exports:

    REST

    HTTP-Methode und URL:

    GET https://cloudasset.googleapis.com/v1/OPERATION_PATH
    

    Beispiele für Befehle

    curl (Linux, macOS oder Cloud Shell)

    curl -X GET \
         -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         https://cloudasset.googleapis.com/v1/OPERATION_PATH

    PowerShell (Windows)

    $cred = gcloud auth print-access-token
    
    $headers = @{ 
      "Authorization" = "Bearer $cred"
    }
    
    
    Invoke-WebRequest `
      -Method GET `
      -Headers $headers `
      -Uri "https://cloudasset.googleapis.com/v1/OPERATION_PATH" | Select-Object -Expand Content

Asset-Snapshot in BigQuery ansehen

Console

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

    Zu BigQuery Studio

  2. Um die Tabellen und Ansichten im Dataset anzuzeigen, öffnen Sie den Navigationsbereich. Wählen Sie im Abschnitt Ressourcen Ihr Projekt aus, um es zu maximieren, und wählen Sie dann ein Dataset aus.

  3. Wählen Sie in der Liste die gewünschte Tabelle aus.

  4. Klicken Sie auf Details und notieren Sie den Wert in Zeilenanzahl. Möglicherweise benötigen Sie diesen Wert, um den Startpunkt für Ihre Ergebnisse mit der gcloud CLI oder REST API festzulegen.

  5. Um einen Beispieldatensatz anzuzeigen, wählen Sie Vorschau aus.

REST

Rufen Sie tabledata.list auf, um die Daten in Ihrer Tabelle zu durchsuchen. Geben Sie im Parameter tableId den Namen Ihrer Tabelle an.

Sie können die folgenden optionalen Parameter konfigurieren, um die Ausgabe zu steuern.

  • maxResults ist die maximale Anzahl von zurückzugebenden Ergebnissen.

  • selectedFields ist eine durch Kommas getrennte Liste von Spalten, die zurückgegeben werden sollen. Wenn nichts angegeben ist, werden alle Spalten zurückgegeben.

  • startIndex ist der nullbasierte Index der Startzeile, die gelesen werden soll.

Die Werte werden zusammengefasst in einem JSON-Objekt zurückgegeben. Dieses Objekt muss dann wie in der Referenzdokumentation zu tabledata.list beschrieben geparst werden.

Asset-Snapshot in BigQuery abfragen

Nachdem Sie den Snapshot in BigQuery exportiert haben, können Sie Abfragen mit den Asset-Metadaten ausführen.

BigQuery führt standardmäßig interaktive (On-Demand) Abfragejobs aus. Dies bedeutet, dass die Abfrage so bald wie möglich ausgeführt wird. Interaktive Abfragen werden hinsichtlich der Grenze gleichzeitiger Abfragen und des Tageslimits mit angerechnet.

Die Abfrageergebnisse werden entweder in einer temporären oder permanenten Tabelle gespeichert. Sie können Daten an eine vorhandene Tabelle anfügen oder Daten in einer bestehenden Tabelle überschreiben oder eine neue Tabelle erstellen, wenn nicht bereits eine mit demselben Namen vorhanden ist.

Führen Sie die folgenden Schritte aus, um eine interaktive Abfrage auszuführen, die die Ausgabe in eine temporäre Tabelle schreibt.

Console

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

    Zu BigQuery Studio

  2. Wählen Sie Neue Abfrage erstellen aus.

  3. Geben Sie im Textbereich des Abfrageeditors eine gültige BigQuery-SQL-Abfrage ein.

  4. Optional: Führen Sie die folgenden Schritte aus, um den Standort der Datenverarbeitung zu ändern.

    1. Wählen Sie Mehr und dann Abfrageeinstellungen aus.

    2. Wählen Sie unter Verarbeitungsstandort die Option Automatische Auswahl und dann den Standort Ihrer Daten aus.

    3. Klicken Sie auf Speichern, um die Abfrageeinstellungen zu aktualisieren.

  5. Wählen Sie Ausführen aus.

REST

  1. Zum Starten eines neuen Jobs rufen Sie die Methode jobs.insert auf. Legen Sie in der Jobressource die folgenden Parameter fest.

    • Legen Sie im Feld configuration das Feld query auf eine JobConfigurationQuery fest, die den BigQuery-Abfragejob beschreibt.

    • Legen Sie im Feld jobReference das Feld location dem Job entsprechend fest.

  2. Rufen Sie getQueryResults auf, um die Ergebnisse abzufragen. Führen Sie die Abfrage so lange aus, bis jobComplete gleich true ist. In der Liste errors können Sie nach Fehlern und Warnungen suchen.

Weitere Beispiele für SQL-Abfrage

In diesem Abschnitt finden Sie Beispiel-SQL-Abfragen, mit denen Sie Ihre Asset-Metadaten nach dem Export in BigQuery analysieren können. Weitere Informationen finden Sie unter Standard-SQL-Abfragesyntax.

Verfügbare Spalten direkt abfragen

Führen Sie die folgende Abfrage aus, um die Mengen der einzelnen Asset-Typen zu ermitteln:

SELECT asset_type, COUNT(*) AS asset_count
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
GROUP BY asset_type
ORDER BY asset_count DESC

Mit wiederkehrenden Feldern arbeiten

Führen Sie die folgende Abfrage aus, um IAM-Richtlinien (Identity and Access Management) zu suchen, die Zugriff auf Gmail-Konten gewähren. BigQuery verwendet UNNEST, um wiederkehrende Felder in einer Tabelle zu vereinfachen, die direkt abgefragt werden können:

SELECT name, asset_type, bindings.role
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
JOIN UNNEST(iam_policy.bindings) AS bindings
JOIN UNNEST(bindings.members) AS principals
WHERE principals like "%@gmail.com"

Führen Sie die folgende Abfrage aus, um eine Organisation, einen Ordner oder ein Projekt zu finden, das die Erstellung mithilfe einer öffentlichen IP-Adresse zulässt. Diese Abfrage ist nützlich, da das Zulassen öffentlicher IP-Adressen bei Cloud SQL-Instanzen Sicherheitslücken verursachen kann, es sei denn SSL oder ein Proxy ist konfiguriert:

SELECT name
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
JOIN UNNEST(org_policy) AS op
WHERE
  op.constraint = "constraints/sql.restrictPublicIp"
  AND (op.boolean_policy IS NULL OR op.boolean_policy.enforced = FALSE);

Führen Sie die folgende Abfrage aus, um eine Organisation, einen Ordner oder ein Projekt im selben VPC Service Controls-Dienstperimeter eines Projekts zu finden:

SELECT service_perimeter.title, service_perimeter.status.resources
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME`
CROSS JOIN UNNEST(service_perimeter.status.resources) as resource
WHERE resource = "projects/PROJECT_ID";

Mit JSON-Strings arbeiten

Führen Sie die folgende Abfrage aus, um offene Firewallregeln zu suchen: Weitere Informationen zu JSON-Funktionen in BigQuery.

CREATE TEMP FUNCTION json2array(json STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
  return JSON.parse(json).map(x=>JSON.stringify(x));
""";

SELECT firewall.name, firewall.resource.parent, JSON_EXTRACT(firewall.resource.data, '$.sourceRanges') AS sourceRanges
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME` AS firewall
JOIN UNNEST(json2array(JSON_EXTRACT(firewall.resource.data, '$.sourceRanges'))) AS source_ranges
WHERE asset_type="compute.googleapis.com/Firewall" AND JSON_EXTRACT(firewall.resource.data, '$.sourceRanges') IS NOT NULL AND JSON_EXTRACT_SCALAR(source_ranges, '$') = "0.0.0.0/0"

Durch das Verteilen von Tabellen pro Ressourcentyp sind offene Firewallregeln mit einer einfacheren und schnelleren Abfrage verfügbar.

SELECT firewall.name, firewall.resource.parent, sourceRanges
FROM `PROJECT_ID.DATASET_ID.STRUCTURED_INSTANCE_TABLE_NAME` AS firewall
JOIN UNNEST(firewall.resource.data.sourceRanges) AS sourceRanges
WHERE sourceRanges = "0.0.0.0/0";

Tabellen verschiedener Ressourcentypen verknüpfen

Führen Sie die folgende Abfrage aus, um Tabellen verschiedener Ressourcentypen zu verknüpfen. Das folgende Beispiel zeigt, wie Sie alle Subnetzwerke finden, denen keine VM angehängt ist. Zuerst sucht die Abfrage alle Subnetzwerke. In dieser Liste werden dann die Subnetzwerke ausgewählt, deren selfLink-Werte nicht vorhanden sind.

CREATE TEMP FUNCTION json2array(json STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
  return JSON.parse(json).map(x=>JSON.stringify(x));
""";

SELECT name, JSON_EXTRACT(subnetwork.resource.data, '$.selfLink') AS selflink
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME` AS subnetwork
WHERE asset_type = "compute.googleapis.com/Subnetwork" AND (JSON_EXTRACT(subnetwork.resource.data, '$.selfLink') NOT IN
(SELECT DISTINCT JSON_EXTRACT(network_interfaces, '$.subnetwork')
FROM `PROJECT_ID.DATASET_ID.TABLE_NAME` as instance
JOIN UNNEST(json2array(JSON_EXTRACT(instance.resource.data, '$.networkInterfaces'))) AS network_interfaces
WHERE asset_type ="compute.googleapis.com/Instance"
AND JSON_EXTRACT(instance.resource.data, '$.networkInterfaces') IS NOT NULL
)) IS NULL

Durch das Aufteilen der Tabellen nach Ressourcentyp können Sie alle Subnetzwerke ermitteln, denen keine VM mit einer einfacheren und schnelleren Abfrage angehängt wurde.

SELECT name, subnetwork.resource.data.selfLink
FROM `PROJECT_ID.DATASET_ID.STRUCTURED_SUBNETWORK_TABLE_NAME` AS subnetwork
WHERE
  (
    subnetwork.resource.data.selfLink
      NOT IN (
        SELECT DISTINCT networkInterface.subnetwork
        FROM `PROJECT_ID.DATASET_ID.STRUCTURED_INSTANCE_TABLE_NAME` as instance
        JOIN
          UNNEST(instance.resource.data.networkInterfaces) AS networkInterface
        WHERE
          networkInterface IS NOT NULL
      )
  ) IS NULL;

Sicherheitslücken in Dataproc-Clustern aufgrund von CVE-2021-44228 finden

CREATE TEMP FUNCTION vulnerable_version(imageVersion STRING)
RETURNS BOOL
LANGUAGE js AS r"""
    const version_regexp = /(?<major>\d+)(?:\.)(?<minor>\d+)(?:\.)?(?<sub>\d+)?/g;
    let match = version_regexp.exec(imageVersion);
    if(match.groups.major < 1){
        return true;
    }
    if (match.groups.major == 1){
        if (match.groups.minor < 3){
            return true;
        }
        if(match.groups.minor == 3 &amp;&amp; match.groups.sub < 95){
            return true;
        }
        if(match.groups.minor == 4 &amp;&amp; match.groups.sub < 77){
            return true;
        }
        if(match.groups.minor == 5 &amp;&amp; match.groups.sub < 53){
            return true;
        }
    }
    if (match.groups.major == 2 &amp;&amp; match.groups.minor == 0 &amp;&amp; match.groups.sub < 27){
        return true;
    }
    return false;
""";

SELECT
  c.name,
  c.resource.data.projectId AS project_id,
  c.resource.data.clusterName AS cluster_name,
  c.resource.data.config.softwareConfig.imageVersion AS image_version,
  c.resource.data.status.state AS cluster_state,
  vulnerable_version(c.resource.data.config.softwareConfig.imageVersion) AS is_vulnerable
FROM
  `PROJECT_ID.DATASET_ID.TABLE_NAME_PREFIX_dataproc_googleapis_com_Cluster` c
  INNER JOIN `PROJECT_ID.DATASET_ID.TABLE_NAME_PREFIX_cloudresourcemanager_googleapis_com_Project` p
    ON p.resource.data.projectId = c.resource.data.projectId
WHERE
  c.resource.data.config.softwareConfig.imageVersion IS NOT NULL
  AND c.resource.data.status.state = "RUNNING"
  AND p.resource.data.lifecycleState = "ACTIVE";