Häufig gestellte Fragen und Fehlerbehebung

Ist Cloud Asset Inventory ein globaler Dienst?

Ja. Die Cloud Asset API ist unabhängig vom Standort. Sie hat einen globalen Endpunkt, stellt die Metadaten aller unterstützten regionalen und globalen Assets in Cloud Asset Inventory bereit. Auf die Cloud Asset API kann in jeder Zone zugegriffen werden.

Welche Art von Datenkonsistenz bietet Cloud Asset Inventory?

Cloud Asset Inventory bietet Eventual Consistency für aktuelle Daten und optimale Leistung. für Einheitlichkeit bei historischen Daten. Obwohl die Wahrscheinlichkeit in der Praxis gering ist, dass Cloud Asset Inventory in der Vergangenheit einige Aktualisierungen eines Assets übersehen kann.

Warum habe ich keine Berechtigung, die Cloud Asset API zu verwenden?

Wenn Sie nicht berechtigt sind, Assets zu exportieren oder den Fehlercode für eine Organisation, ein Projekt oder einen Ordner.

Wenn Sie beispielsweise keine Berechtigung haben und folgenden Befehl ausführen:

curl -X POST \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -d '{
          "outputConfig": {
            "gcsDestination": {
              "uri": "gs://BUCKET_NAME/FILENAME"
            }
          }
         }' \
         https://cloudasset.googleapis.com/v1/projects/PROJECT_ID:exportAssets

Gibt den folgenden Fehler zurück:

{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "[ORIGINAL ERROR] generic::permission_denied: Request
        denied by Cloud IAM."
      }
    ]
  }
}

Bitten Sie Ihren Projekt-, Ordner- oder Organisationsadministrator um Zugriff, damit Sie dieses Problem beheben können. Je nachdem, welche Assets Sie exportieren oder für die Sie den Verlauf abrufen möchten, Sie benötigen eine der folgenden Rollen oder eine andere Rolle, die den Erforderliche Cloud Asset API-Berechtigungen:

  • cloudasset.viewer

  • cloudasset.owner

Weitere Informationen zu Rollen und Berechtigungen finden Sie unter Informationen zu Rollen.

Weitere Informationen zu Zugriffssteuerungsoptionen für Cloud Asset APIs finden Sie unter Zugriffssteuerung.

Warum wird bei meinen Exporten der Fehler „Berechtigung verweigert“ zurückgegeben?

Sofern nicht anders angegeben, verwendet Cloud Asset Inventory das standardmäßige Cloud Asset Inventory Dienstkonto im aktiven Projekt, um Ressourcen wie Pub/Sub zu verwalten Topics, Cloud Storage-Buckets und BigQuery-Tabellen. Dieses Dienstkonto erstellt wird, wenn Sie die Cloud Asset Inventory API zum ersten Mal über eine und hat standardmäßig die Berechtigung, diese Ressourcen zu verwalten, sich im selben Projekt befinden.

In den folgenden Situationen können Fehlermeldungen wegen verweigerter Berechtigungen zurückgegeben werden:

  • Bei Verwendung der REST API, die kein aktives Projekt festlegt, Cloud Asset Inventory weiß nicht, welches Dienstkonto verwendet werden soll.

  • Wenn Sie die gcloud CLI in einem anderen Projekt verwenden als in dem Pub/Sub-Thema, Cloud Storage-Bucket oder BigQuery wo sich die Tabelle befindet. Das bedeutet, dass das Cloud Asset Inventory des aktiven Projekts Dienstkonto für die Ausführung der Aufgabe (falls vorhanden) verwendet wird und möglicherweise nicht haben Berechtigungen zum Schreiben in die Ressourcen des anderen Projekts.

Um sicherzustellen, dass bei Exportanfragen das richtige Dienstkonto verwendet wird zu Pub/Sub-Themen, Cloud Storage-Buckets oder BigQuery können Sie die Projekt-ID angeben, die den korrekten Standardwert Cloud Asset Inventory-Dienstkonto. Wenn Sie von einem Projekt in ein anderes exportieren, Außerdem müssen Sie dem Dienstkonto bestimmte Rollen zuweisen.

gcloud

Fügen Sie für die gcloud CLI das Flag --billing-project zu Ihrem , um die Projekt-ID anzugeben, die das richtige Dienstkonto enthält:

--billing-project=BILLING_PROJECT_ID

Alternativ können Sie das Abrechnungsprojekt festlegen, bevor Sie Befehle mit über die gcloud CLI. Prüfen Sie zuerst, ob sich das Abrechnungsprojekt unterscheidet aus dem Kernprojekt:

gcloud config list

Legen Sie dann bei Bedarf das Abrechnungsprojekt fest:

gcloud config set billing/quota_project BILLING_PROJECT_ID

Geben Sie folgende Werte an:

  • BILLING_PROJECT_ID: Eine Projekt-ID mit dem Cloud Asset Inventory API aktiviert ist und ein Dienstkonto mit Berechtigungen zum Verwalten Sie Ihr Pub/Sub-Zielthema, Ihren Cloud Storage-Bucket oder BigQuery-Tabelle.

REST

Fügen Sie für die REST API den Header X-Goog-User-Project hinzu, um das Projekt anzugeben. ID, die das richtige Dienstkonto enthält. Bei der Verwendung von curl legen Sie fest, dem Header mit dem Flag -H:

-H "X-Goog-User-Project: BILLING_PROJECT_ID"

Geben Sie folgende Werte an:

  • BILLING_PROJECT_ID: Eine Projekt-ID mit dem Cloud Asset Inventory API aktiviert ist und ein Dienstkonto mit Berechtigungen zum Verwalten Sie Ihr Pub/Sub-Zielthema, Ihren Cloud Storage-Bucket oder BigQuery-Tabelle.

Asset-Metadaten von einem Projekt in ein anderes exportieren

Um Asset-Metadaten aus einem Projekt zu exportieren, PROJECT_A, in eine andere, PROJECT_B, müssen Sie den Standardwert Das Cloud Asset Inventory-Dienstkonto in PROJECT_A hat Zugriff auf die Ressourcen in PROJECT_B. Dies ermöglicht zwei Dinge:

  • Du kannst Asset-Metadaten aus PROJECT_A in ein Pub/Sub-Thema, Cloud Storage-Bucket oder BigQuery Tabelle in PROJECT_B.

  • Mit PROJECT_A kannst du Asset-Metadaten exportieren aus PROJECT_B in ein Pub/Sub-Thema Cloud Storage-Bucket oder BigQuery-Tabelle in PROJECT_B.

So exportieren Sie Asset-Metadaten aus einem Projekt in ein anderes: Anweisungen:

  1. Prüfen Sie, ob die Cloud Asset Inventory API in dem Projekt, in dem Sie die Anfrage ausführen möchten, aktiviert ist. PROJECT_A

  2. Führen Sie mindestens einen Aufruf an die Cloud Asset Inventory API in PROJECT_A zum Erstellen des Cloud Asset Inventory-Standardinventars Dienstkonto. Alternativ können Sie sie manuell erstellen:

    gcloud beta services identity create \
        --service=cloudasset.googleapis.com \
        --project=PROJECT_A_ID
    gcloud projects add-iam-policy-binding PROJECT_A_ID \
        --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
        --role=roles/cloudasset.serviceAgent
    

    Google Cloud-Projektnummer ermitteln

    Console

    Führen Sie die folgenden Schritte aus, um eine Google Cloud-Projektnummer zu ermitteln:

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

      Zu Google Dashboard

    2. Klicken Sie in der Menüleiste auf das Umschaltfeld.
    3. Wählen Sie im Feld Auswählen aus Ihre Organisation aus und suchen Sie dann Projektnamen.
    4. Klicken Sie auf den Projektnamen, um zu diesem Projekt zu wechseln. Die Projektnummer wird im Karte Projektinformationen:

    gcloud-CLI

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

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"

  3. Gewähren Sie dem Dienstkonto die richtigen Berechtigungen.

    • Um Inhalte über Pub/Sub in einem Feed zu veröffentlichen, gewähren Sie den roles/pubsub.publisher Rolle dem Dienstkonto für das Thema zu:

      gcloud pubsub topics add-iam-policy-binding projects/PROJECT_B_ID/topics/TOPIC_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/pubsub.publisher
      
    • Um in einen Cloud Storage-Bucket zu schreiben, gewähren Sie den roles/storage.objectCreator dem Dienstkonto für den Bucket die Rolle roles/storage.objectCreator zu:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
        --role=roles/storage.objectCreator
      
    • Um in eine BigQuery-Tabelle zu schreiben, gewähren Sie den Die Rollen roles/bigquery.dataEditor und roles/bigquery.user für den Dienst Konto für das Projekt:

      gcloud projects add-iam-policy-binding PROJECT_B_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/bigquery.user
      gcloud projects add-iam-policy-binding PROJECT_B_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/bigquery.dataEditor
      

Wenn Sie Cloud Asset Inventory-Anfragen stellen, geben Sie PROJECT_A als Projekt, das Sie verwenden möchten. Um dies für Legen Sie in der gcloud CLI das Flag --billing-project auf PROJECT_A_ID. Legen Sie für REST X-Goog-User-Project fest. Header zu PROJECT_A_ID.

Warum ist das Ergebnis der Cloud Asset API veraltet?

Die Datenaktualität in der Cloud Asset API folgt dem Best-Effort-Prinzip. Obwohl fast alle Asset-Updates stehen Kunden in wenigen Minuten zur Verfügung. In seltenen Fällen ist Das Ergebnis der Cloud Asset API-Methoden enthält nicht das neueste Asset Aktualisierungen.

Warum werden temporäre Dateien nach der Ausführung von ExportAssets ausgegeben?

Der Vorgang ExportAssets kann temporäre Dateien im Ausgabeordner erstellen. Entfernen Sie diese temporären Dateien nicht, während der Vorgang ausgeführt wird. Nach dem abgeschlossen ist, werden die temporären Dateien automatisch entfernt.

Wenn die temporären Dateien weiterhin vorhanden sind, können Sie sie nach Abschluss des ExportAssets-Vorgangs sicher entfernen.

Warum werden meine Anmeldedaten für die Google Cloud CLI oder Cloud Shell abgelehnt?

Wenn ein Nutzerprojekt in einer Anfrage vom cloudasset.googleapis.com Google Cloud CLI oder Cloud Shell erhalten Sie eine Fehlermeldung wie die Folgendes:

Your application has authenticated using end user credentials from the
Google Cloud CLI or Cloud Shell which are not supported by the
cloudasset.googleapis.com. We recommend that most server applications
use service accounts instead. For more information about service accounts
and how to use them in your application, see
https://cloud.google.com/docs/authentication/.

Um dieses Problem zu beheben, legen Sie für das Nutzerprojekt die Berechtigung des Nutzers mit aktivierter Cloud Asset API fest Projekt-ID. Geben Sie dazu den HTTP-Header X-Goog-User-Project in der HTTP-Anfrage.

Wenn Sie curl verwenden, können Sie dazu den folgenden Parameter hinzufügen:

-H "X-Goog-User-Project: PROJECT_ID"

Wenn Sie die gcloud CLI verwenden, Flag angeben --billing-project PROJECT_ID zusammen mit den gcloud asset oder verwenden Sie den folgenden Befehl:

gcloud config set billing/quota_project PROJECT_ID

Warum sehe ich unterschiedliche Ancestors für dieselben Assets?

Wenn Sie mit der Cloud Asset API verschiedene Metadatentypen abrufen, z. B. RESOURCE-Metadaten und IAM POLICY-Metadaten für dasselbe Asset, ist es möglich, dass das Feld ancestors für die unterschiedlichen Inhaltstypen nicht konsistent ist. Das liegt daran, unterschiedliche Zeitpläne für die Datenaufnahme für jeden Inhaltstyp haben, und bis der Datenaufnahme abgeschlossen ist, sind sie möglicherweise inkonsistent. Prüfen Sie die update_time, damit das Asset auf dem neuesten Stand ist Informationen.

Kontaktieren Sie uns, wenn die Inkonsistenzen länger als 24 Stunden andauern.

Wie oft sollte ich die ExportAssets API aufrufen?

Wir empfehlen, die ExportAssets API für dasselbe Projekt, denselben Ordner oder auf sequenzielle Weise organisieren; Führen Sie beispielsweise den zweiten Anruf nach die vorherige abgeschlossen ist. Wenn Sie Asset-Aktualisierungen in Echtzeit erfassen möchten, sollten Sie Echtzeitbenachrichtigungen in Betracht ziehen.

Warum erhalte ich doppelte Asset-Aktualisierungen?

Nachdem du Echtzeitbenachrichtigungen eingerichtet hast, können Sie doppelte Asset-Updates in Ihrem Pub/Sub erhalten, . Der Grund hierfür ist ein automatischer Versuch, die Zustellung zu wiederholen, Pub/Sub garantiert keine mindestens einmalige Zustellung.

Warum habe ich keine Benachrichtigungen zum Löschen von Projekten erhalten?

Wenn Sie ein Projekt beenden, haben Sie 30 Tage Zeit, um den Vorgang rückgängig zu machen. Das Feld deleted in der Benachrichtigung wird erst festgelegt, wenn das Projekt endgültig gelöscht wird. So überwachen Sie ausstehende Projekte: können Sie einen Feed mit einer Bedingung festlegen. im lifecycleState des Projekts, z. B. temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED".

Wie rufe ich die JSON-Darstellung einer Ressource mit der SearchAllResources API ab?

Standardmäßig gibt SearchAllResources die folgenden Standardfelder zurück, wenn read_mask ist nicht angegeben:

  • name

  • assetType

  • project

  • folders

  • organization

  • displayName

  • description

  • location

  • labels

  • networkTags

  • kmsKeys

  • createTime

  • updateTime

  • state

  • additionalAttributes

  • parentFullResourceName

  • parentAssetType

Wenn Sie neben dem Feld können Sie das Flag read_mask angeben (--read-mask in gcloud) hinzu.

Ein read_mask ist eine durch Kommas getrennte Liste von Feldern, die zurückgegeben werden sollen. in Ihren Ergebnissen. Einige Felder sind zu groß, z. B. versionedResources und attachedResources und sind daher standardmäßig nicht in den Ergebnissen enthalten. Bis diese Felder enthalten, können Sie sie in der read_mask angeben. oder "*" für alle verfügbaren Felder enthalten. Beispiele für read_mask-Werte: "name,location", "name,versionedResources" und "*".

Hier ein Beispiel für gcloud:

gcloud asset search-all-resources \
    --scope=organizations/123456 \
    --query="state=RUNNING" \
    --asset-types=compute.googleapis.com/Instance \
    --read-mask="name,versionedResources"