Referensi bahasa pencocok CEL

Common Expression Language (CEL) adalah bahasa open source non-Turing lengkap yang menerapkan semantik umum untuk evaluasi ekspresi. Secure Web Proxy menggunakan subset kondisi CEL untuk membuat keputusan otorisasi boolean berdasarkan data atribut. Secara umum, ekspresi kondisi terdiri dari satu atau beberapa pernyataan yang digabungkan dengan operator logis (&&, ||, atau !). Setiap pernyataan menyatakan aturan kontrol berbasis atribut yang berlaku pada binding peran dan pada akhirnya menentukan apakah akses diizinkan.

Atribut

Atribut sesi dan atribut aplikasi digunakan saat menentukan kebijakan Secure Web Proxy untuk menjelaskan atribut sesi atau atribut aplikasi yang menjadi sasaran kebijakan.

Atribut sesi, yang dijelaskan oleh SessionMatcher, berlaku untuk atribut khusus sesi, seperti alamat IP sumber atau tujuan, host, atau rentang IP. Atribut aplikasi, yang dijelaskan oleh ApplicationMatcher, berlaku untuk atribut aplikasi, seperti header permintaan, metode permintaan HTTP, atau jalur permintaan.

Atribut yang tersedia di SessionMatcher dan ApplicationMatcher

Tabel berikut menjelaskan atribut yang berlaku untuk SessionMatcher dan ApplicationMatcher.

Atribut Jenis atribut Deskripsi
source.ip string Alamat IP klien yang mengirim permintaan.
source.port bilangan bulat Port klien yang mengirim permintaan.
destination.port bilangan bulat Port upstream tempat instance Secure Web Proxy mengirim traffic.
host() string Nilai host yang digunakan untuk resolusi DNS dan koneksi upstream. Hal ini tidak termasuk port. Nilai ditentukan oleh hal berikut:
  • Permintaan HTTP mentah: header Host
  • Permintaan CONNECT HTTP tunnel proxy: Target CONNECT
source.matchTag(SECURE_TAG) boolean

True jika sumber dikaitkan dengan SECURE_TAG.

Argumen adalah ID permanen tag aman, seperti source.matchTag('tagValues/123456').

source.matchServiceAccount(SERVICE_ACCOUNT) boolean True jika sumber dikaitkan dengan SERVICE_ACCOUNT, seperti source.matchServiceAccount('x@my-project.iam.gserviceaccount.com').
inUrlList(HOST_OR_URL, NAMED_LIST) boolean

True jika HOST_OR_URL ada dalam daftar bernama yang diberikan NAMED_LIST. Contoh:

  • inUrlList(host(), 'projects/1234/locations/us-east1/urlLists/allowed-repos')
  • inUrlList(request.url(), 'projects/1234/locations/us-east1/urlLists/allowed-repos')

Saat pola UrlList dicocokkan dengan nilai tanpa garis miring (/), seperti dalam host(), hanya bagian domain pola yang dicocokkan. Untuk informasi selengkapnya tentang penafsiran UrlList, lihat Cara UrlList menafsirkan entri.

inIpRange(IP_ADDRESS,
IP_RANGE)
boolean True jika IP_ADDRESS terdapat dalam IP_RANGE seperti inIpRange(source.ip, '1.2.3.0/24'). Subnet mask untuk alamat IPv6 tidak boleh lebih besar dari /64.

Atribut hanya tersedia untuk ApplicationMatcher

Tabel berikut menjelaskan atribut yang hanya berlaku untuk ApplicationMatcher.

Atribut Jenis atribut Deskripsi
request.headers map Peta string-ke-string dari header permintaan HTTP. Jika header berisi beberapa nilai, nilai dalam peta ini adalah string yang dipisahkan koma dari semua nilai header. Semua kunci dalam peta ini menggunakan huruf kecil.
request.method string Metode Permintaan HTTP, seperti GET atau POST.
request.host string

Kemudahan setara dengan request.headers['host'].

Sebaiknya gunakan host() dalam sebagian besar kasus.

request.path string Jalur URL HTTP yang diminta.
request.query string

Kueri URL HTTP dalam format name1=value&name2=value2, seperti yang muncul di baris pertama permintaan HTTP.

Tidak ada decoding yang dilakukan.

request.scheme string Skema URL HTTP, seperti HTTP atau HTTPS. Nilai untuk atribut ini semuanya dalam huruf kecil.
request.url() string

Kenyamanan untuk host() + request.path.

Ini tidak termasuk port dan menggunakan nilai host yang mungkin berbeda dengan header host.

request.useragent() string Kemudahan setara dengan request.headers['user-agent'].

Operator

Secure Web Proxy mendukung beberapa operator yang dapat digunakan untuk membuat ekspresi logika yang kompleks dari pernyataan ekspresi sederhana. Secure Web Proxy mendukung operator logika, seperti &&, ||,, dan !, serta operator manipulasi string, seperti x.contains('y').

Operator logika memungkinkan Anda memverifikasi beberapa variabel dalam ekspresi kondisional. Misalnya, request.method == 'GET' && host().matches('.*\.example.com') menggabungkan dua pernyataan, dan mengharuskan kedua pernyataan tersebut menjadi True untuk menghasilkan hasil keseluruhan True.

Operator manipulasi string mencocokkan string atau substring yang Anda tentukan, dan memungkinkan Anda mengembangkan aturan untuk mengontrol akses ke resource tanpa mencantumkan setiap kemungkinan kombinasi.

Operator logika

Tabel berikut menjelaskan operator logika yang didukung Proxy Web Aman.

Contoh ekspresi Deskripsi
x == "foo" Menampilkan True jika x sama dengan argumen literal string konstan.
x == R"fo'o" Menampilkan True jika x sama dengan literal string mentah yang diberikan yang tidak menafsirkan urutan escape. Literal string mentah mudah digunakan untuk mengekspresikan string yang harus digunakan kode untuk meng-escape karakter urutan.
x == y Menampilkan True jika x sama dengan y.
x != y Menampilkan True jika x tidak sama dengan y.
x && y Menampilkan True jika x dan y adalah True.
x || y Menampilkan True jika x, y, atau keduanya adalah True.
!x Menampilkan True jika nilai boolean x adalah False, atau menampilkan False jika nilai boolean x adalah True.
m['k'] Jika kunci k ada, nilai pada kunci k akan ditampilkan dalam peta string ke string m. Jika kunci k tidak ada, akan menampilkan error yang menyebabkan aturan yang sedang dievaluasi tidak cocok.

Operator manipulasi string

Tabel berikut menjelaskan operator manipulasi string yang didukung oleh Secure Web Proxy.

Ekspresi Deskripsi
x.contains(y) Menampilkan True jika string x berisi substring y.
x.startsWith(y) Menampilkan True jika string x dimulai dengan substring y.
x.endsWith(y) Menampilkan True jika string x diakhiri dengan substring y.
x.matches(y)

Menampilkan True jika string x cocok dengan pola RE2 yang ditentukan y.

Pola RE2 dikompilasi menggunakan opsi RE2::Latin1 yang menonaktifkan fitur Unicode.

x.lower() Menampilkan nilai huruf kecil dari string x.
x.upper() Menampilkan nilai huruf besar dari string x.
x + y Menampilkan string yang digabungkan xy.
int(x) Mengonversi hasil string x menjadi jenis int. String yang dikonversi dapat digunakan untuk perbandingan bilangan bulat dengan operator aritmetika standar seperti > dan <=. Hal ini hanya berfungsi untuk nilai yang dapat berupa bilangan bulat.