Saat membuat kontrol cloud kustom, Anda menggunakan ekspresi Common Expression Language (CEL) untuk membuat aturan yang mengevaluasi properti resource yang dipindai.
Ekspresi Anda dapat berupa pemeriksaan satu nilai atau ekspresi gabungan yang lebih kompleks yang memeriksa beberapa nilai atau kondisi. Bagaimanapun,
ekspresi harus diselesaikan ke boolean false
untuk memicu temuan.
Ekspresi CEL yang mengevaluasi properti resource harus sesuai dengan aturan berikut:
Properti yang Anda tentukan dalam ekspresi CEL harus berupa properti dari resource yang dipindai, seperti yang ditentukan dalam definisi API jenis resource.
Semua enum dalam ekspresi CEL harus ditampilkan sebagai string. Misalnya, berikut adalah ekspresi yang valid untuk jenis resource
cloudkms.googleapis.com/CryptoKeyVersion
:resource.state = "PENDING_GENERATION"
Hasil ekspresi CEL yang Anda tentukan di properti
condition
harus berupa Boolean. Temuan dipicu hanya jika hasilnya adalahfalse
.
Untuk mengetahui informasi selengkapnya tentang CEL, lihat referensi berikut:
Contoh ekspresi CEL
Tabel berikut mencantumkan beberapa ekspresi CEL yang dapat Anda gunakan untuk mengevaluasi properti resource.
Jenis resource | Deskripsi | Ekspresi CEL |
---|---|---|
cloudkms.googleapis.com/CryptoKey |
Memeriksa periode rotasi kunci Cloud KMS | has(resource.rotationPeriod) && resource.rotationPeriod < duration('60h') |
compute.googleapis.com/Network |
Mencocokkan aturan peering Virtual Private Cloud dengan peer jaringan | resource.selfLink.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default') || resource.peerings.exists(p, p.network.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/shared$')) |
cloudfunctions.googleapis.com/CloudFunction |
Hanya mengizinkan traffic masuk internal untuk fungsi Cloud Run | has(resource.ingressSettings) && resource.ingressSettings.matches('ALLOW_INTERNAL_ONLY') |
compute.googleapis.com/Instance |
Nama resource cocok dengan pola | resource.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$') |
serviceusage.googleapis.com/Service |
Hanya mengizinkan pengaktifan API terkait penyimpanan | resource.state == 'ENABLED' && !( resource.name.matches('storage-api.googleapis.com') || resource.name.matches('bigquery-json.googleapis.com') || resource.name.matches('bigquery.googleapis.com') || resource.name.matches('sql-component.googleapis.com') || resource.name.matches('spanner.googleapis.com'))
|
sqladmin.googleapis.com/Instance
|
Hanya mengizinkan alamat IP publik yang ada dalam daftar yang diizinkan | (resource.instanceType == 'CLOUD_SQL_INSTANCE' && resource.backendType == 'SECOND_GEN' && resource.settings.ipConfiguration.ipv4Enabled ) && (resource.ipAddresses.all(ip, ip.type != 'PRIMARY' || ip.ipAddress.matches('IP_ADDRESS')))
|
dataproc.googleapis.com/Cluster |
Periksa apakah ID project dalam cluster Dataproc berisi
substring testing atau development |
has(resource.projectId) && !resource.projectId.contains('testing') || !resource.projectId.contains('development') |