CodeBlanks Logo Icon CodeBlanks

Rego dili

Rego politika dilini öğrenirsin.

Rego dili

OPA politikaları Rego diliyle yazılır. Rego bildirimseldir: bir kural, içindeki tüm ifadeler doğruysa tetiklenir. Gatekeeper'da ihlaller violation kuralıyla üretilir; denetlenen nesne input.review.object'tedir:

package image_kaynagi

violation[{"msg": msg}] {
  c := input.review.object.spec.template.spec.containers[_]
  not startswith(c.image, "ghcr.io/sirket/")
  msg := sprintf("izinsiz image: %v", [c.image])
}

[_] dizideki her öğe için kuralı dener; not olumsuzlar; := değişken atar.

Rego'yu yerelde sınamak

opa eval bir politikayı örnek bir girdiyle yerelde çalıştırır; opa test Rego ile yazılmış birim testlerini çalıştırır. Politikalar cluster'a gitmeden önce böyle sınanır:

$ opa eval -d politika.rego -i girdi.json "data.image_kaynagi.violation"
{"result": [{"expressions": [{"value": [{"msg": "izinsiz image: nginx:1.27"}]}]}]}
$ opa test . -v
data.image_kaynagi.test_izinli_image: PASS (1.2ms)
data.image_kaynagi.test_izinsiz_image: PASS (0.9ms)

Uygulama Politikayı yerelde sına

İki komut yaz: politika.rego ve girdi.json ile "data.image_kaynagi.violation" sorgusunu opa eval ile çalıştır (-d, -i); mevcut klasördeki testleri ayrıntılı (-v) çalıştır.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
opa eval -d politika.rego -i girdi.json "data.image_kaynagi.violation"
opa test . -v

Beklenen çıktı

{"result": [{"expressions": [{"value": [{"msg": "izinsiz image: nginx:1.27"}]}]}]}
data.image_kaynagi.test_izinli_image: PASS (1.2ms)
data.image_kaynagi.test_izinsiz_image: PASS (0.9ms)
PASS: 2/2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yukarıdaki kural iki container'dan biri izinsiz image kullanıyorsa kaç ihlal üretir?

  • 1 Doğru cevap
  • 2
  • 0
  • Hata verir

Açıklama: Kural her container için ayrı denenir; yalnızca koşulu sağlayan için ihlal oluşur.

2 Dizideki her container'ı dene.

Soru
  c := input.review.object.spec.template.spec.containers[____]
Cevap
  c := input.review.object.spec.template.spec.containers[_]

Açıklama: _ adsız bir değişkendir; her indeks için kural denenir.

3 Eşleştir.

Kavram Anlamı
violation İhlal kuralı
input.review.object Denetlenen nesne
not Olumsuzlama
opa test Birim testleri

Uzman bölümündeki tüm dersler