Domande frequenti e risoluzione dei problemi

Cloud Asset Inventory è un servizio globale?

Sì. L'API Cloud Asset non dipende dalla località. Ha un endpoint globale, che pubblica i metadati di tutti gli asset regionali e globali supportati in Cloud Asset Inventory. È possibile accedere all'API Cloud Asset in qualsiasi zona.

Che tipo di coerenza dei dati fornisce Cloud Asset Inventory?

Cloud Asset Inventory offre coerenza finale sui dati attuali e best effort coerenza sui dati storici. Nonostante la bassa probabilità nella pratica, possibile che Cloud Asset Inventory perda alcuni aggiornamenti di una risorsa in passato.

Perché non ho l'autorizzazione per utilizzare l'API Cloud Asset?

Viene restituito un errore se non hai l'autorizzazione per esportare gli asset o per ottenere la cronologia di un'organizzazione, un progetto o una cartella.

Ad esempio, se non hai l'autorizzazione, esegui questo comando:

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

Restituisce il seguente errore:

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

Per risolvere il problema, richiedi l'accesso dal tuo progetto, dalla tua cartella o dalla tua organizzazione amministratore. A seconda delle risorse che vuoi esportare o di cui vuoi ottenere la cronologia, uno dei seguenti ruoli o altri ruoli che includano il autorizzazioni API Cloud Asset richieste:

  • cloudasset.viewer

  • cloudasset.owner

Per ulteriori informazioni su ruoli e autorizzazioni, consulta la sezione Informazioni sui ruoli.

Per saperne di più sulle opzioni di controllo dell'accesso per le API Cloud Asset, consulta Controllo degli accessi.

Perché le mie esportazioni restituiscono un errore di autorizzazione negata?

Se non diversamente specificato, Cloud Asset Inventory utilizza Cloud Asset Inventory predefinito nel progetto attivo per gestire risorse come Pub/Sub argomenti, bucket Cloud Storage e tabelle BigQuery. Questo viene creato la prima volta che chiami l'API Cloud Asset Inventory da un progetto e, per impostazione predefinita, dispone dell'autorizzazione per gestire queste risorse, purché nello stesso progetto.

Puoi ricevere errori di autorizzazione negata nelle seguenti situazioni:

  • Quando utilizzi l'API REST, che non imposta un progetto attivo, quindi Cloud Asset Inventory non sa quale account di servizio utilizzare.

  • Quando utilizzi gcloud CLI da un progetto diverso da quello in cui Argomento Pub/Sub, bucket Cloud Storage o BigQuery in cui si trova la tabella. Ciò significa che il valore predefinito di Cloud Asset Inventory del progetto attivo viene utilizzato per eseguire l'attività (se presente) e potrebbe non e disporre delle autorizzazioni per scrivere nelle risorse dell'altro progetto.

Assicurati che venga utilizzato l'account di servizio corretto quando effettui richieste di esportazione ad argomenti Pub/Sub, bucket Cloud Storage o BigQuery puoi specificare l'ID progetto che contiene il valore predefinito corretto Account di servizio Cloud Asset Inventory. Se esporti da un progetto a un altro, devi anche concedere ruoli specifici all'account di servizio.

gcloud

Per gcloud CLI, aggiungi il flag --billing-project al tuo per specificare l'ID progetto che contiene l'account di servizio corretto:

--billing-project=BILLING_PROJECT_ID

In alternativa, puoi impostare il progetto di fatturazione prima di eseguire comandi con con gcloud CLI. Innanzitutto, controlla se il progetto di fatturazione è diverso del progetto principale:

gcloud config list

Quindi, se necessario, imposta il progetto di fatturazione:

gcloud config set billing/quota_project BILLING_PROJECT_ID

Fornisci i seguenti valori:

  • BILLING_PROJECT_ID: un ID progetto con L'API Cloud Asset Inventory è abilitata e un account di servizio con autorizzazioni gestire l'argomento Pub/Sub di destinazione, il bucket Cloud Storage Tabella BigQuery.

REST

Per l'API REST, aggiungi l'intestazione X-Goog-User-Project per specificare il progetto ID che contiene l'account di servizio corretto. Quando usi curl, imposti l'intestazione con il flag -H:

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

Fornisci i seguenti valori:

  • BILLING_PROJECT_ID: un ID progetto con L'API Cloud Asset Inventory è abilitata e un account di servizio con autorizzazioni gestire l'argomento Pub/Sub di destinazione, il bucket Cloud Storage Tabella BigQuery.

Esporta i metadati degli asset da un progetto a un altro

Per esportare i metadati degli asset da un progetto, PROJECT_A, a un altro, PROJECT_B, devi assegnare il valore predefinito Accesso all'account di servizio Cloud Asset Inventory in PROJECT_A all' risorse in PROJECT_B. Ciò consente due cose:

  • Puoi esportare i metadati della risorsa da PROJECT_A in un Argomento Pub/Sub, bucket Cloud Storage o BigQuery nella tabella PROJECT_B.

  • Puoi utilizzare PROJECT_A per esportare i metadati delle risorse da PROJECT_B in un argomento Pub/Sub, del bucket Cloud Storage o della tabella BigQuery situata in PROJECT_B.

Per esportare i metadati di una risorsa da un progetto a un altro, completa i seguenti passaggi istruzioni:

  1. Assicurati che l'API Cloud Asset Inventory sia abilitato nel progetto da cui vuoi eseguire la richiesta, PROJECT_A.

  2. Effettua almeno una chiamata all'API Cloud Asset Inventory in PROJECT_A per creare il valore predefinito di Cloud Asset Inventory l'account di servizio. In alternativa, puoi crearlo manualmente:

    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
    

    Come trovare il numero di un progetto Google Cloud

    Console

    Per trovare il numero di un progetto Google Cloud, completa i seguenti passaggi:

    1. Vai alla pagina Dashboard nella console Google Cloud.

      Vai alla Dashboard

    2. Fai clic sulla casella del commutatore nella barra dei menu.
    3. Seleziona la tua organizzazione dalla casella Seleziona da, quindi cerca i tuoi del progetto.
    4. Fai clic sul nome del progetto per passare a quel progetto. Il numero del progetto viene mostrato nel Scheda Informazioni sul progetto.

    Interfaccia a riga di comando gcloud

    Puoi recuperare un numero di progetto Google Cloud con il seguente comando:

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

  3. Concedi le autorizzazioni corrette all'account di servizio.

    • Per pubblicare in un feed tramite Pub/Sub, concedi il parametro roles/pubsub.publisher all'account di servizio sull'argomento:

      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
      
    • Per scrivere in un bucket Cloud Storage, concedi la classe roles/storage.objectCreator all'account di servizio nel bucket:

      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
      
    • Per scrivere in una tabella BigQuery, concedi il parametro Ruoli roles/bigquery.dataEditor e roles/bigquery.user al servizio account sul progetto:

      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
      

Quando effettui richieste di Cloud Asset Inventory, assicurati di specificare PROJECT_A come progetto che vuoi utilizzare. Per farlo per gcloud CLI, imposta il flag --billing-project su PROJECT_A_ID. Per REST, imposta X-Goog-User-Project a PROJECT_A_ID.

Perché il risultato dell'API Cloud Asset è inattivo?

L'aggiornamento dei dati nell'API Cloud Asset avviene secondo il criterio del "best effort". Sebbene quasi tutti gli aggiornamenti degli asset sono disponibili per i clienti in pochi minuti. In rari casi è possibile Il risultato dei metodi dell'API Cloud Asset non includerà l'asset più recente aggiornamenti.

Perché vengono visualizzati file temporanei dopo l'esecuzione di ExportAssets?

L'operazione ExportAssets potrebbe creare file temporanei nella cartella di output. Non rimuovere questi file temporanei mentre è in corso l'operazione. Dopo il completata, i file temporanei vengono rimossi automaticamente.

Se i file temporanei rimangono, puoi rimuoverli in sicurezza dopo il Operazione ExportAssets completata.

Perché la mia credenziale Google Cloud CLI o Cloud Shell viene rifiutata?

Se un progetto utente in una richiesta viene inviato a cloudasset.googleapis.com dal Google Cloud CLI o Cloud Shell, ricevi un messaggio di errore come seguenti:

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/.

Per risolvere il problema, imposta il progetto utente sul dell'ID progetto. A questo scopo, specifica l'intestazione HTTP X-Goog-User-Project la richiesta HTTP.

Se utilizzi curl, puoi farlo aggiungendo il seguente parametro:

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

Se utilizzi gcloud CLI, specifica il flag --billing-project PROJECT_ID insieme a gcloud asset oppure usa questo comando:

gcloud config set billing/quota_project PROJECT_ID

Perché vedo predecessori diversi per gli stessi asset?

Quando chiami l'API Cloud Asset per ottenere diversi tipi di metadati, ad esempio RESOURCE metadati e IAM POLICY per la stessa risorsa, è possibile che Il campo ancestors non è coerente tra i tipi di contenuti. Questo perché esistono pianificazioni di importazione dati diverse per ogni tipo di contenuto e fino a quando di caricamento completato, potrebbero non essere coerenti. Controlla il update_time per garantire che l'asset sia aggiornato informazioni.

Non esitare a contattarci in caso di incoerenza. dura più di 24 ore.

Con quale frequenza devo chiamare l'API ExportAssets?

Ti consigliamo di chiamare l'API ExportAssets per lo stesso progetto, cartella l'organizzazione in modo sequenziale; Ad esempio, esegui la seconda chiamata dopo quella precedente viene completata. Se vuoi acquisire aggiornamenti delle risorse in tempo reale, Prendi in considerazione l'utilizzo delle notifiche in tempo reale.

Ricevi aggiornamenti di asset duplicati

Dopo aver configurato le notifiche in tempo reale, è possibile che tu riceva aggiornamenti degli asset duplicati in Pub/Sub per ogni argomento. Ciò è causato da un tentativo automatico di ritentare la consegna, Pub/Sub non garantisce la consegna "at-least-once".

Perché non ho ricevuto notifiche relative all'eliminazione dei progetti?

Quando chiudi un progetto, hai 30 giorni di tempo per annullare l'operazione. Il campo deleted nella notifica non viene impostato fino a il progetto viene eliminato definitivamente. per monitorare i progetti in attesa. eliminazione, puoi impostare un feed con una condizione in lifecycleState del progetto, ad esempio temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED".

Come posso recuperare la rappresentazione JSON di una risorsa con l'API SearchAllResources?

Per impostazione predefinita, SearchAllResources restituisce i seguenti campi standard quando read_mask non specificato:

  • name

  • assetType

  • project

  • folders

  • organization

  • displayName

  • description

  • location

  • labels

  • networkTags

  • kmsKeys

  • createTime

  • updateTime

  • state

  • additionalAttributes

  • parentFullResourceName

  • parentAssetType

Per recuperare tutti i campi nei metadati della risorsa oltre ai elencati sopra, puoi specificare il flag read_mask (--read-mask in gcloud) nella richiesta di ricerca.

Un read_mask è un elenco di campi, separati da virgole, che vuoi restituire nei risultati. Alcuni campi sono troppo grandi, ad esempio versionedResources e attachedResources e quindi non sono inclusi nei risultati per impostazione predefinita. A includi questi campi, puoi specificarli nel read_mask; o utilizza "*" per Includi tutti i campi disponibili. Esempi di valori di read_mask includono: "name,location", "name,versionedResources" e "*".

Ecco un esempio di gcloud:

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