Policy as Code
1) «Siyasət» hesab etmək nədir
Siyasət, verilən kontekstdə «mümkün/mümkün deyil» (və ya «mümkün olduğu kimi») sualına cavab verən determinativ qaydadır:- Giriş/avtorizasiya: RBAC/ABAC, ReBAC, məlumat ixracı, step-up (MFA).
- Infrastruktur təhlükəsizliyi: Kubernetes admission-control, image/secret siyasəti, şəbəkə qaydaları.
- Komplayens və gizlilik: razılığın idarə edilməsi, PII etiketləmə, yerli hesabat günləri, geo-məhdudiyyətlər.
- Konfiqurasiya və keyfiyyət: «qadağa: latest», resurs limitləri, məcburi resurs etiketləri (Cloud).
- Data və ML: razılıq olmadan dəsti təlim qadağası, k-anonimlik, DP büdcələri, Data Lineage invariantları.
2) PaC memarlıq modeli
PAP (Policy Administration Point): anbar və idarəetmə prosesləri (MR/PR, revyu, versiya).
PDP (Policy Decision Point): siyasət həllini hesablayan mühərrik (OPA, Cedar-engine, öz interpretatoru).
PEP (Policy Enforcement Point): tətbiq nöqtəsi (API-şlyuz, K8s webhook-admission, ETL-transformator, SDK).
PIP (Policy Information Point): atribut/fakt mənbələri: IdP, resurs kataloqu, məlumat anbarı, risk-skor.
Decision Log/Audit: dəyişməz həll jurnalları (insidentlərin təhlili və uyğunluq üçün).
Axın: sorğu → PEP kontekstini formalaşdırır → PDP faktları yükləyir (PIP) → həll hesablayır → PEP tətbiq edir (allow/deny/edition) → log/metrika.
3) Alətlər və domenlər
OPA/Rego - deklarativ siyasətlər üçün universal mühərrik və dil (K8s webhook-admission: Gatekeeper, CI-də - Conftest, API-də - sidecar/xidmət).
Kyverno - YAML-da Kubernetes üçün deklarativ siyasətlər, yamaq/validasiya/nəsil.
Cedar (AWS/köçürülə bilən) - «kimsə nəyisə edir» avtorizasiyasına diqqət yetirən siyasətçi dili.
Cloud IAM (AWS/GCP/Azure) - bulud resursları siyasəti (tercihen statik və IaC planlarında PaC yoxlama).
Xüsusi - spesifiklər üçün JSON/SQL üzərində DSL/qaydaları (məsələn, ML-komplayens).
4) Siyasət həyat dövrü
1. Hədəf və domenin müəyyən edilməsi: «High/CRITICAL boşluqları olan konteynerlərin yüklənməsinə qadağa».
2. Kodda rəsmiləşdirmə: Rego/Cedar/YAML.
3. Testlər: həqiqət cədvəlləri, mənfi hallar, property-based.
4. CI-yoxlamalar: linter, unit, uydurma manifestlərə/sorğulara inteqrasiya.
5. Azad və yayım: bundle nəşr, imza, PDP/edge çatdırılması.
6. Monitorinq: hit-rate, latency p95/p99, deny payı, drift dashboard.
7. istisnalar/waivers: vaxt/həcm məhdudlaşdırılmış, audit və sahibi ilə.
8. Refaktorinq və arxiv: versiyalar, uyğunluq, miqrasiya.
5) Saxlama və paylama
Repo-layout: `policies/<domain>/<policy>.rego|cedar|yaml`, `tests/`, `bundles/`, `schemas/`.
Version: PDP cavablarında semver və 'policy _ version'.
Bundles: sıxılmış siyasət paketləri + sxemlər + konfiqurasiya, imzalanmış (supply chain security).
Distribution: pull (PDP registry/S3 çəkir) və ya push (nəzarətçi göndərir).
Partial evaluation: perimetrdə sürətli həyata keçirilməsi üçün siyasətlərin əvvəlcədən təyin edilməsi.
6) Data modeli və sxemləri
Kontekstin vahid müqaviləsi: 'subject', 'resource', 'action', 'env', 'legal'.
JSON-Schema/Protobuf: faktiki modelləri doğrulayın; sxemlərin uyğunsuzluğu «indeterminate → deny» üçün səbəbdir.
Atributların normallaşdırılması: vahid adlar (məsələn, 'tenant _ id', 'risk _ level', 'pii _ tags', 'image. vulns`).
7) Performans və etibarlılıq
Cache Solutions: açar '(subject_hash, resource_key, action, policy_version)'; qısa TTL, hadisələrə görə əlillik (rolların/etiketlərin dəyişdirilməsi).
Yerli faktlar: isti yolda ağır PIP çəkməyin - snapshots sinxronizasiya.
Fail-open vs fail-closed: kritik domenlərin təhlükəsizliyi - fail-closed; UX-kritik üçün - deqradasiya (deny əvəzinə redaktə).
Gecikmə büdcəsi: PDP yaddaşında həll üçün <3-10 ms «, <30-50 ms» PIP.
8) Istisnaların idarə edilməsi (waivers)
Vaxt məhdudiyyəti (məsələn, 7 gün), məcburi sahibi və səbəbi ilə.
Satınalma: resurs/layihə/neyspeys; qlobal «əbədi» qadağa.
Audit və xatırlatmalar: Bitən waiver hesabatları, avtomobil örtüyü/eskalasiya.
9) Metrika və müşahidə
Policy Coverage: PaC tərəfindən qorunan yolların/bitlərin payı.
Decision Latency / QPS / Error rate.
Deny Rate və False Positive/Negative («dry-run/shadow» rejimi vasitəsilə).
Drift: Plan (IaC) və fakt (canlı), SDK və server həlləri arasında uyğunsuzluq.
Аудит: `decision_id, policy_ids, version, attributes_digest, effect, reason`.
10) Anti-nümunələr
Versiyalar və testlər olmadan kodda «tikilmiş» siyasətçilər.
Kontekstin sxemlərinin/validasiyasının olmaması → gözlənilməz həllər.
Bir monolit fayl "mega. rego».
Heç bir istisna prosesi → «əl gəzintiləri» və xaos.
CI-də «shift-left» olmadan yalnız runtime-tətbiq (gec uğursuzluqlar).
Siyasətdə gizli side effektləri (siyasət təmiz bir funksiya olmalıdır).
11) Nümunələr
11. 1 Rego (OPA): K8s həssas görüntüləri qadağan
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: yalnız MFA və «ağ» IP ilə məlumat ixrac
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: Yalnız sahibinə və ya komanda üzvlərinə oxu
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): qadağa ': latest' və yük. 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 planı üçün CI-də 5 Conftest
bash terraform plan -out tf. plan terraform show -json tf. plan > tf. json conftest test tf. json --policy policies/terraform
12) Mövcud qabiliyyətlərə inteqrasiya
RBAC/ABAC: PaC - bəyannamə təbəqəsi; PDP/PEP rol mühərriki haqqında məqalədən yenidən istifadə olunur.
Razılığın idarə edilməsi: «ads/personalizasiya» siyasəti məlumat/end-pointlərə giriş şərtləri kimi.
Anonimləşdirmə/PII: Siyasətçilər anonimləşdirmə profilləri və DP büdcəsi olmadan təlim/ixrac qadağan edir.
Geo-marşrutlaşdırma: saxlama bölgələrinə görə trafik/məlumatların marşrutlaşdırılması siyasəti.
13) Proseslər və insanlar
Domen sahibləri siyasət: təhlükəsizlik, platforma, məlumat, məhsul/marketinq.
Prosessorlar: security + domen sahibləri.
Siyasət kataloqu: hədəf təsviri, risk, SLO, əlaqə, nümunələr, hadisələrə istinadlar.
Təlim: inkişaf etdiricilər üçün qaydalar və snippetlər (testlər necə yazılır, Rego necə hata ayıklanır).
14) Memarın yoxlama siyahısı
1. Domen və owners minimum dəsti müəyyən?
2. Test, linter və CI ilə anbar siyasətçisi?
3. PDP/PEP perimetrdə, API-də, K8s və məlumat paylaynlarında yerləşdirilib?
4. Kontekst və validasiya sxemləri varmı?
5. Band imzası və çatdırılması, cache strategiyası və əlillik?
6. Metriklər (latency, deny, drift), decision-log və audit?
7. TTL və hesabat ilə istisnalar prosesi?
8. Enforce qarşısında Dry-run/shadow-rejimi?
9. Partial evaluation/« isti »yollar üçün ön kompilyasiya?
10. Runbook deqradasiya (fail-closed/allow-with-redaction)?
Nəticə
Policy as Code tətbiqlə eyni prinsiplərə uyğun olaraq qaydaları oynatmaq, yoxlamaq və idarə etmək üçün istifadə olunur: kod-revyu, testlər, CI/CD, metriklər və geri çəkilmələr. PaC-ni platformanın avtorizasiyası (RBAC/ABAC), komplayenti və təhlükəsizliyi ilə birləşdirərək, admission-nəzarətdən tutmuş məlumat ixracatlarına və ML-payplaynlara qədər vahid, proqnozlaşdırıla bilən və ölçülə bilən sistem davranış idarəetmə dövrünü əldə edirsiniz.