Memantau perubahan aset dengan kondisi

Topik ini menunjukkan cara memantau perubahan aset dengan kondisi yang disesuaikan. Lihat topik umum untuk informasi selengkapnya tentang notifikasi real-time.

Ringkasan

Agar hanya melihat jenis perubahan tertentu untuk aset tertentu, Anda dapat menambahkan kondisi ke feed.

Objek condition bersifat opsional. Jika feed tidak memiliki objek condition, tujuan yang dikonfigurasi akan menerima semua perubahan pada aset.

Objek condition memiliki struktur berikut:

"condition": {
    "title": "...",
    "description": "...",
    "expression": "..."
}

Title dan description bersifat opsional. Kolom ini dapat membantu Anda mengidentifikasi dan menjelaskan kondisinya.

Kolom expression menentukan ekspresi yang digunakan untuk mengevaluasi notifikasi dalam Common Expression Language (CEL). Ekspresi kondisi dapat berisi beberapa pernyataan, dan pernyataan digabungkan menggunakan operator logika sesuai spesifikasi bahasa CEL.

Menggunakan CEL

Common Expression Language (CEL) adalah bahasa ekspresi yang digunakan untuk menentukan kondisi feed. Fungsi ini disesuaikan untuk mengekspresikan ekspresi logika berbasis atribut. Untuk informasi selengkapnya, lihat spesifikasi CEL dan definisi bahasanya.

Dalam kondisi feed, CEL digunakan untuk membuat keputusan boolean berdasarkan data atribut. Ekspresi kondisi terdiri dari satu atau beberapa pernyataan yang digabungkan menggunakan operator logika (&&, ||). Setiap pernyataan menyatakan aturan kontrol berbasis atribut yang berlaku pada TemporalAsset untuk menentukan apakah notifikasi dikirim.

Fitur CEL berikut sangat penting untuk kondisi feed:

  • Variabel: Kondisi menggunakan variabel untuk menyatakan atribut tertentu, seperti temporal_asset.deleted (dari jenis Boolean) atau temporal_asset.asset.name (dari jenis String). Variabel ini diisi dengan nilai berdasarkan konteks pada saat runtime.

  • Operator: Setiap jenis data, seperti String, mendukung sekumpulan operator yang dapat digunakan untuk membuat ekspresi logika. Biasanya, operator digunakan untuk membandingkan nilai yang terdapat dalam variabel dengan nilai literal, seperti temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345". Dalam contoh ini, jika nilai input temporal_asset.asset.name adalah //cloudresourcemanager.googleapis.com/projects/12345, ekspresi akan bernilai true.

  • Fungsi: Fungsi adalah operator compound untuk jenis data yang mendukung operasi yang lebih kompleks. Dalam ekspresi kondisi, ada fungsi yang telah ditetapkan yang dapat digunakan bersama dengan jenis data tertentu. Misalnya, temporal_asset.asset.name.contains("keyword") menggunakan fungsi berisi String, dan bernilai true jika nilai temporal_asset.asset.name berisi "kata kunci".

  • Operator logika: Kondisi mendukung operator logika yang dapat digunakan untuk membuat ekspresi logika yang kompleks dari pernyataan ekspresi sederhana: && dan ||. Operator logika ini memungkinkan penggunaan beberapa variabel input dalam ekspresi kondisi. Misalnya: temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020 menggabungkan dua pernyataan sederhana, dan mengharuskan kedua pernyataan tersebut terpenuhi untuk menghasilkan hasil evaluasi true secara keseluruhan.

Untuk mengetahui informasi selengkapnya tentang fitur CEL, lihat definisi bahasa.

Menggunakan variabel kondisi

Variabel kondisi memungkinkan Anda membuat kondisi pada berbagai atribut. Variabel kondisi yang didukung adalah:

  • temporal_asset: Perubahan Aset saat ini dalam format TemporalAsset. Jika kondisi bernilai benar (true), TemporalAsset akan dikirim ke tujuan yang dikonfigurasi.

Contoh ekspresi kondisi

Ekspresi kondisi berikut mengirimkan notifikasi mengenai peristiwa pembuatan:

temporal_asset.deleted == false &&
temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST

Ekspresi kondisi berikut mengirimkan notifikasi untuk resource yang berada di folder 12345 dan 23456:

"folders/12345" in temporal_asset.asset.ancestors ||
"folders/23456" in temporal_asset.asset.ancestors

Ekspresi kondisi berikut mengirimkan notifikasi saat aturan baru yang diizinkan ditambahkan ke firewall, dengan asumsi asset_type sudah ditetapkan ke compute.googleapis.com/Firewall dalam feed.

size(temporal_asset.asset.resource.data.allowed) >
size(temporal_asset.prior_asset.resource.data.allowed)

Ekspresi kondisi berikut mengirimkan notifikasi untuk instance VM dengan jenis mesin n1-standard-1, dengan asumsi asset_type sudah ditetapkan ke compute.googleapis.com/Instance dalam feed.

temporal_asset.asset.resource.data.machineType.endsWith('/machineTypes/n1-standard-1')

Ekspresi kondisi berikut mengirimkan notifikasi untuk bucket penyimpanan dengan kebijakan IAM apa pun untuk allUsers, dengan asumsi asset_type ditetapkan ke storage.googleapis.com/Bucket dan content_type ditetapkan ke IAM_POLICY di feed.

temporal_asset.asset.iam_policy.bindings.exists(b, b.members.exists(m, m == "allUsers"))

Ekspresi kondisi berikut mengirim notifikasi saat bucket penyimpanan dengan kunci test dalam labelnya dihapus:

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

Batasan umum

  • Sebagian besar nama variabel dalam ekspresi kondisi direpresentasikan dalam {i>snake_case<i}. Satu-satunya pengecualian adalah nama variabel sub-kolom data pada objek Resource, yang direpresentasikan dalam camelCase.

  • Ekspresi kondisi memiliki batas panjang 3.000 karakter.

  • Beberapa validasi pada ekspresi kondisi dilakukan selama waktu pembuatan/pembaruan feed. Namun, validasi tersebut tidak komprehensif, terutama untuk kondisi yang ditetapkan pada kolom temporal_asset.asset.resource.data, yang memiliki jenis dinamis. Sebaiknya kondisi feed sederhana dengan asset_type yang tepat yang ditentukan dalam feed. Jika error validasi terjadi selama waktu evaluasi, notifikasi tidak akan dikirim dan error akan dicatat ke dalam log. Pelajari cara melihat log.

  • Untuk jenis dinamis di temporal_asset.asset.resource.data, kondisi yang ditentukan pada kolom yang tidak ada akan memicu error runtime dan notifikasi tidak dipublikasikan. Misalnya, untuk kondisi temporal_asset.asset.resource.data.name != "my_name", jika kolom name tidak ada dalam update, evaluasi akan gagal dan Anda tidak akan menerima notifikasi. Jika kondisi Anda hanya berfungsi saat ada kolom tertentu, periksa keberadaan dalam kondisi tersebut untuk memastikannya dievaluasi dengan benar.

  • Jenis enum statis dapat direpresentasikan sebagai nama jalur yang sepenuhnya memenuhi syarat atau bilangan bulat mentah. Misalnya, ekspresi berikut berlaku untuk prior_asset_state:

    temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
    

    dan

    temporal_asset.prior_asset_state == 3
    

    Jenis enum dinamis di temporal_asset.asset.resource.data direpresentasikan sebagai string mentah. Misalnya, ekspresi berikut valid untuk jenis aset cloudresourcemanager.googleapis.com/Project:

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