Monitorare le modifiche agli asset in base alle condizioni

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) o temporal_asset.asset.name (di tipo String). 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 esempio temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345". In questo esempio, se il valore di input di temporal_asset.asset.name è //cloudresourcemanager.googleapis.com/projects/12345, l'espressione restituisce true.

  • 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 funzione String contiene e restituisce true se il valore di temporal_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 di true.

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 valore asset_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 condizione temporal_asset.asset.resource.data.name != "my_name", se il campo name 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 asset cloudresourcemanager.googleapis.com/Project:

    temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"