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) atautemporal_asset.asset.name
(dari jenisString
). 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, sepertitemporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345"
. Dalam contoh ini, jika nilai inputtemporal_asset.asset.name
adalah//cloudresourcemanager.googleapis.com/projects/12345
, ekspresi akan bernilaitrue
.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 berisiString
, dan bernilaitrue
jika nilaitemporal_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 evaluasitrue
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 denganasset_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 kondisitemporal_asset.asset.resource.data.name != "my_name"
, jika kolomname
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 asetcloudresourcemanager.googleapis.com/Project
:temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"