Policy as Code
1) «Siyosat» deb nimani hisoblash kerak
Siyosat - berilgan kontekstda «mumkin/mumkin emas» (yoki «iloji boricha») degan savolga javob beradigan belgilanadigan qoida:- Kirish/avtorizatsiya: RBAC/ABAC, ReBAC, maʼlumotlar eksporti, step-up (MFA).
- Infratuzilma xavfsizligi: Kubernetes admission-nazorati, tasvirlar/sirlar siyosati, tarmoq qoidalari.
- Komplayens va maxfiylik: kelishuvlarni boshqarish, PII-teglash, mahalliy hisobot sutkalari, geo-cheklovlar.
- Konfiguratsiyalar va sifat: «taqiqlash: latest», resurs limitlari, majburiy resurs teglari (Cloud).
- Ma’lumotlar va ML: roziligisiz to’plamlarda treningni taqiqlash, k-anonimlik, DP-byudjetlar, Data Lineage-invariantlar.
2) PaC arxitektura modeli
PAP (Policy Administration Point): repozitoriya va boshqaruv jarayonlari (MR/PR, revyu, versiya).
PDP (Policy Decision Point): siyosat yechimini hisoblaydigan vosita (OPA, Cedar-engine, o’z interpretatori).
PEP (Policy Enforcement Point): qoʻllash nuqtasi (API-shlyuz, K8s webhook-admission, ETL-transformer, SDK).
PIP (Policy Information Point): atributlar/faktlar manbalari: IdP, resurslar kataloglari, maʼlumotlar ombori, xavf-tezkor.
Decision Log/Audit: oʻzgarmas qarorlar jurnallari (hodisalar va muvofiqlikni tahlil qilish uchun).
Oqim: soʻrov → PEP kontekstni shakllantiradi → PDP faktlarni yuklaydi (PIP) → yechimni hisoblaydi → PEP qoʻllaydi (allow/deny/tahrir) → log/metrika.
3) Asboblar va domenlar
OPA/Rego - deklarativ siyosatlar uchun universal vosita va til (Gatekeeper K8s webhook-admission, CI - Conftest, API - sidecar/xizmat).
Kyverno - YAMLda Kubernetes uchun deklarativ siyosat, patch/validatsiya/generatsiya.
Cedar (AWS/ko’chirib o’tiladigan) - «kimdir nimadir qilayotganiga» e’tibor qaratadigan siyosatchi tili.
Cloud IAM (AWS/GCP/Azure) - bulutli resurslar siyosati (tercihen statik va IaC rejalarida PaC chek).
Custom - O’ziga xos xususiyatlar uchun JSON/SQL ustidagi DSL/qoidalar (masalan, ML-komplayens).
4) Siyosatning hayot sikli
1. Maqsad va domenni aniqlash: «High/CRITICAL zaif konteynerlarni yuklashni taqiqlash».
2. Kodda rasmiylashtirish: Rego/Cedar/YAML.
3. Testlar: haqiqat jadvallari, salbiy holatlar, property-based.
4. CI tekshiruvlari: linter, unit, soxta manifestlar/soʻrovlarda integratsiya.
5. Nashr va tarqatish: bundle-da nashr etish, imzo, PDP/edge-ga yetkazib berish.
6. Monitoring: hit-rate, latency p95/p99, deny ulushi, drift dashbordlari.
7. Istisnolar/waivers: cheklangan vaqt/hajm, audit va egasi bilan.
8. Refaktoring va arxiv: versiyalar, moslik, migratsiya.
5) Saqlash va tarqatish
Repo-layout: `policies/<domain>/<policy>.rego|cedar|yaml`, `tests/`, `bundles/`, `schemas/`.
Version: semver va’policy _ version’PDP javoblarida.
Bundles: siqilgan siyosatlar + sxemalar + konfiguratsiyalar (supply chain security).
Distribution: pull (PDP registry/S3 tortadi) yoki push (kontroller yuboradi).
Partial evaluation: perimetrda tez bajarish uchun siyosatni oldindan belgilash.
6) Ma’lumotlar modeli va sxemalari
Kontekstning yagona shartnomasi:’subject’,’resource’,’action’,’env’,’legal’.
JSON-Schema/Protobuf: haqiqiy modellarni tasdiqlang; sxemalarning mos kelmasligi «indeterminate → deny» ning sababidir.
Atributlarni normallashtirish: unifikatsiyalangan nomlar (masalan,’tenant _ id’,’risk _ level’,’pii _ tags’,’image. vulns`).
7) Unumdorlik va ishonchlilik
Yechimlar keshi:’(subject_hash, resource_key, action, policy_version)’; qisqa TTL, voqealar bo’yicha nogironlik (rollar/teglarning o’zgarishi).
Mahalliy faktlar: og’ir PIPlarni issiq yo’lda tortmang - snapshotlarni sinxronlashtiring.
Fail-open vs fail-closed: kritik domenlar xavfsizligi - fail-closed; UX-kritik uchun - degradatsiya (deny o’rniga tahrir).
Maxfiylik budjeti: PDP xotirasida yechim topish uchun’<3-10 ms’maqsadi,’<30-50 ms’PIP.
8) Istisnolarni boshqarish (waivers)
Vaqt bo’yicha cheklangan (masalan, 7 kun), majburiy egasi va sababi bilan.
Sotib olingan: resurs/proekt/neyspeys bo’yicha; global «abadiy» taqiqlash.
Audit va eslatmalar: muddati tugaydigan waiver’lar bo’yicha hisobotlar, avtomatik yopiq/eskalatsiya.
9) Metrika va kuzatish
Policy Coverage: PaC himoyalangan yo’llar/endpointlar ulushi.
Decision Latency / QPS / Error rate.
Deny Rate va False Positive/Negative («dry-run/shadow» rejimi orqali).
Drift: reja (IaC) va fakt (live), SDK va server yechimlari oʻrtasidagi tafovut.
Аудит: `decision_id, policy_ids, version, attributes_digest, effect, reason`.
10) Anti-patternlar
Versiyalar va testlarsiz kodga tikilgan siyosatchilar.
Kontekst sxemalari/validatsiyasining yo’qligi → oldindan aytib bo’lmaydigan qarorlar.
Bitta monolit fayl "mega. rego».
Istisno jarayoni yo’q → «qo’lda aylanib o’tish» va tartibsizlik.
Faqat CI’da «shift-left» bo’lmagan runtime-qo’llash (kech muvaffaqiyatsizliklar).
Siyosatda yashirin sayd effektlari (siyosat sof funksiya bo’lishi kerak).
11) Misollar
11. 1 Rego (OPA): K8s zaif tasvirlarni taqiqlash
rego package k8s. admission. vulns
deny[msg] {
input. kind. kind == "Pod"
some c img:= input. request. object. spec. containers[c].image vulns:= data. registry. scan [img] # actual-snapshot from PIP count ({v v:= vulns[_]; v.severity == "CRITICAL"}) > 0 msg:= sprintf("image %s has CRITICAL vulns", [img])
}
11. 2 Rego: maʼlumotlarni faqat MFA va «oq» IP orqali eksport qilish
rego package api. export
default allow = false
allow {
input. action == "export"
input. subject. mfa_verified == true net. cidr_contains("203. 0. 113. 0/24", input. env. ip)
}
11. 3 Cedar: faqat egasiga yoki jamoa aʼzolariga oʻqish
cedar permit(
principal in Group::"team_members",
action in [Action::"read"],
resource in Photo::"")
when { resource. owner == principal resource. team_id in principal. team_ids };
11. 4 Kyverno (YAML): taqiqlash’: latest’va majburlash. resurslar
yaml apiVersion: kyverno. io/v1 kind: ClusterPolicy metadata:
name: disallow-latest-and-require-limits spec:
validationFailureAction: Enforce rules:
- name: disallow-latest match: { resources: { kinds: ["Pod"] } }
validate:
message: "Image tag 'latest' is not allowed."
pattern:
spec:
containers:
- name: ""
image: "!:latest"
- name: require-limits match: { resources: { kinds: ["Pod"] } }
validate:
message: "resources. limits.{cpu,memory} required."
pattern:
spec:
containers:
- resources:
limits:
cpu: "?"
memory: "?"
11. Terraform-reja uchun CI 5 Conftest
bash terraform plan -out tf. plan terraform show -json tf. plan > tf. json conftest test tf. json --policy policies/terraform
12) Mavjud qobiliyatlarga integratsiyalash
RBAC/ABAC: PaC - deklaratsiya qatlami; Rolli dvigatel haqidagi maqoladagi PDP/PEP qayta ishlatiladi.
Kelishuvlarni boshqarish: «ads/personalization» siyosati maʼlumotlar/endpointlarga kirish sharti sifatida.
Anonimlashtirish/PII: siyosatchilar anonimlashtirish profillari va DP-byudjetsiz trening/eksport qilishni taqiqlaydi.
Geo-yo’naltirish: saqlash hududlari bo’yicha trafikni/ma’lumotlarni yo’naltirish siyosati.
13) Jarayonlar va odamlar
Siyosat domenlari egalari: xavfsizlik, platforma, ma’lumotlar, mahsulot/marketing.
Revyuerlar: security + domen egalari.
Siyosat katalogi: maqsad tavsifi, xavf, SLO, aloqa, misollar, hodisalarga havolalar.
O’qitish: ishlab chiquvchilar uchun gaydlar va snippetlar (testlarni qanday yozish kerak, Rego-ni qanday tuzatish kerak).
14) Arxitektorning chek-varaqasi
1. Minimal domen va owners toʻplami aniqlanganmi?
2. Test, linter va CI bilan siyosatchi ombori?
3. PDP/PEP perimetr, API, K8s va maʼlumot payplaynlarida joylashtirilganmi?
4. Kontekst va validatsiya sxemalari bormi?
5. Bandllarni imzolash va yetkazib berish, kesh va nogironlik strategiyasi?
6. Metrika (latency, deny, drift), decision-log va audit?
7. TTL va hisobot bilan istisnolar jarayoni?
8. Enforce oldidan Dry-run/shadow?
9. Partial evaluation/« issiq »yoʻllar uchun oldindan kompilyatsiya?
10. Degradatsiyaga Runbook (fail-closed/allow-with-redaction)?
Xulosa
Policy as Code qoidalarni kod-revyu, testlar, CI/CD, metriklar va qaytishlar kabi printsiplar boʻyicha takrorlanadigan, tekshiriladigan va boshqariladigan qiladi. PaC-ni avtorizatsiya (RBAC/ABAC), komplayens va platforma xavfsizligi bilan ulash orqali siz admission-nazoratdan tortib ma’lumotlar eksportigacha va ML-payplayngacha bo’lgan tizim xatti-harakatlarini boshqarishning yagona, bashorat qilinadigan va ko’paytiriladigan konturini olasiz.