Menulis aturan untuk kontrol cloud kustom

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 adalah false.

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')