Questo argomento mostra come monitorare le modifiche agli asset con una condizione personalizzata. Consulta l'argomento generale per ulteriori informazioni sulle notifiche in tempo reale.
Panoramica
Per visualizzare solo un determinato tipo di modifica per un determinato asset, puoi aggiungere una condizione al feed.
L'oggetto condition
è facoltativo. Se un feed non ha un oggetto condition
, la destinazione configurata riceve tutte le modifiche agli asset.
L'oggetto condition
ha la seguente struttura:
"condition": {
"title": "...",
"description": "...",
"expression": "..."
}
Title
e description
sono facoltativi. Questi campi possono aiutarti a identificare
e descrivere la condizione.
Il campo expression
definisce l'espressione utilizzata per valutare la notifica
in Common Expression Language (CEL). L'espressione di condizione può contenere più istruzioni e le istruzioni vengono combinate utilizzando operatori logici, seguendo le specifiche del linguaggio CEL.
Utilizzo di CEL
CEL (Common Expression Language) è il linguaggio di espressione utilizzato per specificare una condizione del feed. È personalizzato per esprimere espressioni logiche basate su attributi. Per ulteriori informazioni, consulta la specifica CEL e la relativa definizione lingua.
In una condizione del feed, CEL viene utilizzata per prendere decisioni booleane in base ai dati degli attributi. Un'espressione di condizione è composta da una o più istruzioni che vengono unite utilizzando gli operatori logici (&&
, ||
). Ogni istruzione esprime una regola di controllo basata su attributi che si applica a TemporalAsset
per determinare se la notifica viene inviata.
Le seguenti funzionalità CEL sono le più importanti per le condizioni dei feed:
Variabili: le condizioni utilizzano variabili per esprimere un determinato attributo, ad esempio
temporal_asset.deleted
(di tipo booleano) otemporal_asset.asset.name
(di tipoString
). Queste variabili vengono completate con valori basati sul contesto in fase di esecuzione.Operatori: ogni tipo di dati, ad esempio
String
, supporta un insieme di operatori che possono essere utilizzati per creare un'espressione logica. Più comunemente, gli operatori vengono utilizzati per confrontare il valore contenuto in una variabile con un valore letterale, ad esempiotemporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345"
. In questo esempio, se il valore di input ditemporal_asset.asset.name
è//cloudresourcemanager.googleapis.com/projects/12345
, l'espressione restituiscetrue
.Funzioni: una funzione è un operatore compound per i tipi di dati che supportano operazioni più complesse. Nelle espressioni di condizione, esistono funzioni predefinite che possono essere utilizzate in combinazione con un determinato tipo di dati. Ad esempio,
temporal_asset.asset.name.contains("keyword")
utilizza una funzioneString
contiene e restituiscetrue
se il valore ditemporal_asset.asset.name
contiene "keyword".Operatori logici: le condizioni supportano operatori logici che possono essere utilizzati per creare espressioni logiche complesse da istruzioni di espressione semplici:
&&
e||
. Questi operatori logici consentono di utilizzare più variabili di input in un'espressione di condizione. Ad esempio:temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020
unisce due semplici istruzioni e richiede che vengano soddisfatte entrambe per produrre un risultato di valutazione complessivo ditrue
.
Per ulteriori informazioni sulle funzionalità CEL, consulta la definizione della lingua.
Utilizzare le variabili di condizione
Le variabili di condizione consentono di creare condizioni su attributi diversi. Le variabili di condizione supportate sono:
- temporal_asset: la modifica corrente della risorsa nel formato TemporalAsset. Se la condizione è true,
TemporalAsset
viene inviato alla destinazione configurata.
Espressioni di condizione di esempio
La seguente espressione di condizione invia notifiche sugli eventi di creazione:
temporal_asset.deleted == false &&
temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
La seguente espressione della condizione invia notifiche per le risorse che si trovano nelle cartelle 12345
e 23456
:
"folders/12345" in temporal_asset.asset.ancestors ||
"folders/23456" in temporal_asset.asset.ancestors
La seguente espressione di condizione invia notifiche quando vengono aggiunte nuove regole consentite ai firewall, supponendo che asset_type
sia già impostato su compute.googleapis.com/Firewall
nel feed.
size(temporal_asset.asset.resource.data.allowed) >
size(temporal_asset.prior_asset.resource.data.allowed)
La seguente espressione della condizione invia notifiche per le istanze VM con il tipo di macchina n1-standard-1
, supponendo che asset_type
sia già impostato su compute.googleapis.com/Instance
nel feed.
temporal_asset.asset.resource.data.machineType.endsWith('/machineTypes/n1-standard-1')
La seguente espressione della condizione invia notifiche per i bucket di archiviazione con
qualsiasi criterio IAM per allUsers
, supponendo che asset_type
sia impostato su
storage.googleapis.com/Bucket
e content_type
sia impostato su IAM_POLICY
nel
feed.
temporal_asset.asset.iam_policy.bindings.exists(b, b.members.exists(m, m == "allUsers"))
La seguente espressione di condizione invia una notifica quando viene eliminato un bucket di archiviazione con una chiave test
nell'etichetta:
temporal_asset.deleted == true && temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.PRESENT && "test" in temporal_asset.prior_asset.resource.data.labels
Limitazioni note
La maggior parte dei nomi delle variabili nelle espressioni di condizione è rappresentata in snake_case. L'unica eccezione sono i nomi variabili dei campi secondari di
data
nell'oggetto Resource, rappresentati in camelCase.Le espressioni di condizione hanno un limite di lunghezza di 3000 caratteri.
Alcune convalide delle espressioni di condizione vengono eseguite durante l'ora di creazione/aggiornamento del feed. Tuttavia, queste convalide non sono complete, soprattutto per le condizioni impostate nel campo
temporal_asset.asset.resource.data
, che ha un tipo dinamico. Consigliamo di utilizzare condizioni del feed semplici, specificando nel feed il valoreasset_type
corretto. Se si verificano errori di convalida durante il tempo di valutazione, la notifica non viene inviata e gli errori vengono registrati. Scopri di più sulla visualizzazione dei log.Per i tipi dinamici in
temporal_asset.asset.resource.data
, le condizioni specificate nei campi assenti attivano errori di runtime e la notifica non viene pubblicata. Ad esempio, per la condizionetemporal_asset.asset.resource.data.name != "my_name"
, se il camponame
non è presente in un aggiornamento, la valutazione non va a buon fine e non ricevi notifiche. Se la condizione funziona solo in presenza di determinati campi, verificane l'esistenza per assicurarti che venga valutata correttamente.I tipi di enum statici possono essere rappresentati come nomi di percorsi completi o numeri interi non elaborati. Ad esempio, le seguenti espressioni sono valide per
prior_asset_state
:temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
e
temporal_asset.prior_asset_state == 3
I tipi di enum dinamici in
temporal_asset.asset.resource.data
sono rappresentati come stringhe non elaborate. Ad esempio, la seguente espressione è valida per il tipo di assetcloudresourcemanager.googleapis.com/Project
:temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"