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 tabellaPROJECT_B
.Puoi utilizzare
PROJECT_A
per esportare i metadati delle risorse daPROJECT_B
in un argomento Pub/Sub, del bucket Cloud Storage o della tabella BigQuery situata inPROJECT_B
.
Per esportare i metadati di una risorsa da un progetto a un altro, completa i seguenti passaggi istruzioni:
Assicurati che l'API Cloud Asset Inventory sia abilitato nel progetto da cui vuoi eseguire la richiesta,
PROJECT_A
.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:
-
Vai alla pagina Dashboard nella console Google Cloud.
- Fai clic sulla casella del commutatore nella barra dei menu.
- Seleziona la tua organizzazione dalla casella Seleziona da, quindi cerca i tuoi del progetto.
- 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)"
-
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
eroles/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"