Ist Cloud Asset Inventory ein globaler Dienst?
Ja. Die Cloud Asset API ist unabhängig vom Standort. Sie hat einen globalen Endpunkt, der die Metadaten aller unterstützten regionalen und globalen Assets in Cloud Asset Inventory bereitstellt. 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 Best-Effort-Konsistenz bei Verlaufsdaten. Trotz der geringen Wahrscheinlichkeit in der Praxis ist es möglich, dass Cloud Asset Inventory einige Aktualisierungen eines Assets in der Vergangenheit übersehen hat.
Warum habe ich keine Berechtigung zur Verwendung der Cloud Asset API?
Wenn Sie nicht berechtigt sind, Assets zu exportieren oder den Verlauf für eine Organisation, ein Projekt oder einen Ordner abzurufen, wird ein Fehler zurückgegeben.
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. Abhängig von den Assets, die Sie exportieren oder für die Sie einen Verlauf abrufen möchten, benötigen Sie eine der folgenden Rollen oder anderen Rollen mit den erforderlichen 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 die Fehlermeldung „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-Themen, Cloud Storage-Buckets und BigQuery-Tabellen zu verwalten. Dieses Dienstkonto wird erstellt, wenn Sie die Cloud Asset Inventory API zum ersten Mal aus einem Projekt aufrufen. Es hat standardmäßig die Berechtigung zum Verwalten dieser Ressourcen, sofern sie sich im selben Projekt befinden.
In den folgenden Situationen können Sie Fehlermeldungen aufgrund verweigerter Berechtigungen erhalten:
Bei Verwendung der REST API, mit der kein aktives Projekt festgelegt wird und Cloud Asset Inventory nicht weiß, welches Dienstkonto verwendet werden soll.
Wenn die gcloud CLI von einem anderen Projekt aus verwendet wird als dem, in dem sich das Pub/Sub-Thema, der Cloud Storage-Bucket oder die BigQuery-Tabelle befindet. Dies bedeutet, dass das standardmäßige Cloud Asset Inventory-Dienstkonto des aktiven Projekts zum Ausführen der Aufgabe verwendet wird (falls vorhanden) und möglicherweise nicht berechtigt ist, in die Ressourcen des anderen Projekts zu schreiben.
Damit bei Anfragen zum Exportieren in Pub/Sub-Themen, Cloud Storage-Buckets oder BigQuery-Tabellen das richtige Dienstkonto verwendet wird, können Sie die Projekt-ID angeben, die das richtige Cloud Asset Inventory-Standarddienstkonto enthält. Wenn Sie Daten von einem Projekt in ein anderes exportieren, müssen Sie dem Dienstkonto bestimmte Rollen zuweisen.
gcloud
Fügen Sie für die gcloud CLI das Flag --billing-project
in den Befehl ein, 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 über die gcloud CLI ausführen. Prüfen Sie zuerst, ob sich das Abrechnungsprojekt vom Kernprojekt unterscheidet:
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, für die die Cloud Asset Inventory API aktiviert ist, und ein Dienstkonto mit Berechtigungen zum Verwalten des Pub/Sub-Zielthemas, des Cloud Storage-Bucket oder der BigQuery-Tabelle.
REST
Fügen Sie für die REST API den Header X-Goog-User-Project
hinzu, um die Projekt-ID anzugeben, die das richtige Dienstkonto enthält. Wenn Sie curl
verwenden, legen Sie den Header mit dem Flag -H
fest:
-H "X-Goog-User-Project: BILLING_PROJECT_ID"
Geben Sie folgende Werte an:
BILLING_PROJECT_ID
: Eine Projekt-ID, für die die Cloud Asset Inventory API aktiviert ist, und ein Dienstkonto mit Berechtigungen zum Verwalten des Pub/Sub-Zielthemas, des Cloud Storage-Bucket oder der BigQuery-Tabelle.
Asset-Metadaten von einem Projekt in ein anderes exportieren
Wenn Sie Asset-Metadaten aus einem Projekt (PROJECT_A
) in ein anderes Projekt (PROJECT_B
) exportieren möchten, müssen Sie dem standardmäßigen Cloud Asset Inventory-Dienstkonto in PROJECT_A
Zugriff auf die Ressourcen in PROJECT_B
gewähren. Dies ermöglicht zwei Dinge:
Sie können Asset-Metadaten aus
PROJECT_A
in ein Pub/Sub-Thema, einen Cloud Storage-Bucket oder eine BigQuery-Tabelle inPROJECT_B
exportieren.Sie können
PROJECT_A
verwenden, um Asset-Metadaten ausPROJECT_B
in ein Pub/Sub-Thema, einen Cloud Storage-Bucket oder eine BigQuery-Tabelle im VerzeichnisPROJECT_B
zu exportieren.
So exportieren Sie Asset-Metadaten von einem Projekt in ein anderes:
Prüfen Sie, ob die Cloud Asset Inventory API in dem Projekt
PROJECT_A
aktiviert ist, von dem Sie die Anfrage ausführen möchten.Rufen Sie mindestens einen Aufruf der Cloud Asset Inventory API in
PROJECT_A
auf, um das standardmäßige Cloud Asset Inventory-Dienstkonto zu erstellen. 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:
-
Rufen Sie in der Google Cloud Console die Seite Dashboard auf.
- Klicken Sie in der Menüleiste auf das Wechsler-Feld.
- Wählen Sie Ihre Organisation im Feld Auswählen aus aus und suchen Sie dann nach dem Namen Ihres Projekts.
- Klicken Sie auf den Projektnamen, um zu diesem Projekt zu wechseln. Die Projektnummer wird auf der Karte Projektinformationen angezeigt.
gcloud-CLI
Mit dem folgenden Befehl können Sie eine Google Cloud-Projektnummer abrufen:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
Gewähren Sie dem Dienstkonto die richtigen Berechtigungen.
Zum Veröffentlichen in einem Feed über Pub/Sub weisen Sie dem Dienstkonto für das Thema die Rolle
roles/pubsub.publisher
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
Zum Schreiben in einen Cloud Storage-Bucket weisen Sie dem Dienstkonto im Bucket die Rolle
roles/storage.admin
zu:gsutil iam ch \ serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com:objectCreator \ gs://BUCKET_NAME
Zum Schreiben in eine BigQuery-Tabelle weisen Sie dem Dienstkonto für das Projekt die Rollen
roles/bigquery.dataEditor
undroles/bigquery.user
zu: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
Geben Sie beim Senden von Cloud Asset Inventory-Anfragen PROJECT_A
als Projekt an, das Sie verwenden möchten. Legen Sie dazu für die gcloud CLI das Flag --billing-project
auf PROJECT_A_ID
fest. Legen Sie für REST den Header X-Goog-User-Project
auf PROJECT_A_ID
fest.
Warum ist das Ergebnis der Cloud Asset API veraltet?
Die Datenaktualität in der Cloud Asset API folgt dem Best-Effort-Prinzip. Fast alle Asset-Aktualisierungen stehen Clients innerhalb weniger Minuten zur Verfügung. In seltenen Fällen kann es jedoch vorkommen, dass das Ergebnis der Cloud Asset API-Methoden nicht die neuesten Asset-Updates enthält.
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 Abschluss des Vorgangs 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 über die Google Cloud CLI oder Cloud Shell an cloudasset.googleapis.com
gesendet wird, erhalten Sie eine Fehlermeldung wie die folgende:
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 Projekt-ID des Nutzers fest, der die Cloud Asset API aktiviert. Geben Sie dazu den HTTP-Header X-Goog-User-Project
in der HTTP-Anfrage an.
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, geben Sie das Flag --billing-project PROJECT_ID
zusammen mit dem Befehl gcloud asset
an 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, dass es für jeden Inhaltstyp unterschiedliche Zeitpläne für die Datenaufnahme gibt und diese bis zum Abschluss des Aufnahmeprozesses unter Umständen inkonsistent sind. Prüfe im Feld update_time
, ob das Asset die aktuellsten Informationen enthält.
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 dieselbe Organisation nacheinander aufzurufen. Führen Sie beispielsweise den zweiten Aufruf aus, nachdem der vorherige Aufruf abgeschlossen ist. Wenn Sie Asset-Aktualisierungen in Echtzeit erfassen möchten, sollten Sie Echtzeitbenachrichtigungen in Betracht ziehen.
Warum erhalte ich doppelte Asset-Aktualisierungen?
Nach dem Einrichten von Echtzeitbenachrichtigungen erhalten Sie möglicherweise doppelte Asset-Updates in Ihrem Pub/Sub-Thema. Dies wird durch einen automatischen Versuch verursacht, die Zustellung noch einmal zu senden, da Pub/Sub keine mindestens einmalige Zustellung garantiert.
Warum habe ich keine Benachrichtigungen zum Löschen von Projekten erhalten?
Nachdem Sie ein Projekt beendet haben, haben Sie 30 Tage Zeit, den Vorgang rückgängig zu machen. Das Feld deleted
in der Benachrichtigung wird erst festgelegt, wenn das Projekt endgültig gelöscht wird. Wenn Sie Projekte überwachen möchten, deren Löschung aussteht, können Sie einen Feed mit einer Bedingung für die lifecycleState
des Projekts festlegen, 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
nicht angegeben ist:
name
assetType
project
folders
organization
displayName
description
location
labels
networkTags
kmsKeys
createTime
updateTime
state
additionalAttributes
parentFullResourceName
parentAssetType
Wenn Sie zusätzlich zu den oben aufgeführten Feldern alle Felder in den Ressourcenmetadaten abrufen möchten, können Sie das Flag read_mask
(--read-mask
in gcloud
) in der Suchanfrage angeben.
Ein read_mask
ist eine Liste von durch Kommas getrennten Feldern, die in den Ergebnissen zurückgegeben werden sollen. Einige Felder sind zu groß, z. B. versionedResources
und attachedResources
, und daher standardmäßig nicht in den Ergebnissen enthalten. Wenn Sie diese Felder einschließen möchten, können Sie sie in der read_mask
angeben oder mit "*"
alle verfügbaren Felder einschließen.
Beispiele für read_mask
-Werte: "name,location"
, "name,versionedResources"
und "*"
.
Hier ein gcloud
-Beispiel:
gcloud asset search-all-resources \
--scope=organizations/123456 \
--query="state=RUNNING" \
--asset-types=compute.googleapis.com/Instance \
--read-mask="name,versionedResources"