Policy as Code
1) Ի՞ նչ կարելի է համարել «քաղաքականություն»
Քաղաքականությունը դետերմինացված կանոն է, որը պատասխանում է «հնարավոր/հնարավոր» հարցին (կամ «ինչպես հնարավոր է») նշված համատեքստում
Մուտքագրումը/հեղինակային իրավունքը ՝ RBAC/ABAC, ReBAC, տվյալների արտահանումը, step-up (MFA)։
Ենթակառուցվածքի անվտանգությունը 'admission-վերահսկումը Kubernetes, պատկերների/գաղտնիքների քաղաքականությունը, ցանցային կանոնները։
Կոմպլենսը և գաղտնիությունը 'համաձայնությունների կառավարումը, PII-թեեգացիան, տեղական հաշվետվական օրը, գեո սահմանափակումները։
Կազմաձևը և որակը '«արգելք: latest», ռեսուրսների սահմանները, ռեսուրսների պարտադիր թեստերը (Cloud)։
Տվյալները և ML 'առանց համաձայնության, k-անունության, DP բյուջեների, Lineage-invariants-ի արգելքը։
2) PaC ճարտարապետական մոդելը
PAP (Policy Administration Point) 'ռեպոզիտորիա և կառավարման գործընթացներ (MR/PR, հեղափոխություն, տարբերակը)։
PDP (Policy Decision Point) 'շարժիչ, որը հաշվարկում է քաղաքականության լուծումը (OPA, Cedar-entine, սեփական թարգմանիչ)։
PEP (Policy Enforcium Point) 'օգտագործման կետը (API-դարպաս, webhook-admisione K8s, ETL տրանսֆորմատոր, PPK)։
PIP (Policy Information Point) ՝ ատրիբուտների/փաստերի աղբյուրներ ՝ IDP, ռուսական և ռեսուրսներ, տվյալների պահեստ, ռիսկի սկոր։
Decision Log/Audit: անփոփոխ լուծումների ամսագրեր (վերլուծելու համար)։
Հոսքը 'PEP-ի պահանջը ձևավորում է PDP կոդավորման ենթատեքստը (PIP) հաշվարկում է PEP կոդավորման լուծումը (allow/deny/խմբագրություն) գլանաձև/մետրիկ։
3) Գործիքներ և օրինագծեր
OPA/Rego-ը համընդհանուր շարժիչ և լեզու է ադապտացիոն քաղաքական գործիչների համար (webhook admissione K8s: Gatekeeper, CI-Wintest-ում, API-ում 'sidecar/ծառայություն)։
Kyverno-ը Kubernetes-ի պաշտպանողական քաղաքականությունն է YAML-ում, patch/validation/գեներացիայի համար։
Cedar (AWS/կրճատ) - քաղաքական լեզուն, որն ունի շեշտադրող «ինչ-որ մեկը անում է»։
Cloud IAM (AWS/GCP/Azure) - ամպային ռեսուրսների քաղաքականություն (ցանկալի է chek-it PaC կարգավիճակը և IaC պլանները)։
Custium-DSL/կանոնները JSON/SQL-ի վրա առանձնահատկությունների համար (օրինակ, ML-complaens)։
4) Քաղաքականության կյանքի ցիկլը
1. Նպատակների և տիրույթի սահմանումը. <<Արգելքը բեռնման համար High/CRITICAL խոցելիության հետ>>։
2. Կոդի ֆորմալիզացիան 'Rego/Cedar/YAML։
3. Թեստեր ՝ ճշմարտության սեղաններ, բացասական դեպքեր, property-based։
4. CI-ստուգումներ 'լինտեր, unit, ինտեգրումը ֆիքսված մանիֆեստների/պահանջների վրա։
5. Ռելիզը և տարածումը 'հրատարակումը bundle, ստորագրությունը, PDP/edge-ի առաքումը։
6. Շվեյցարիա ՝ hit-rate, latency p95/p99, deny, dashbords։
7. Բացառություններ/waivers: սահմանափակ ժամանակի/ծավալի, աուդիտի և սեփականատիրոջ հետ։
8. Ռեֆակտորինգը և արխիվը 'վարկածներ, համատեղելիություն, պաշտպանություն։
5) Պահեստավորում և տարածում
Repo-layout: `policies/<domain>/<policy>.rego|cedar|yaml`, `tests/`, `bundles/`, `schemas/`.
Տարբերակումը 'semver և «policy _ version» PDP-ի պատասխաններում։
Bundles: Քաղաքական գործչի սեղմված փաթեթները + դելիգներ, որոնք ստորագրվել են (supply chain)։
Distribution: p.ru (PDP ձգում է registry/S3) կամ push (վերահսկիչը ուղարկում է)։
Partial evaluation: քաղաքական գործչի կանխատեսումը պարագծի վրա արագ կատարման համար։
6) Տվյալների և սխեմայի մոդել
Կոնտեքստի մեկ պայմանագիր '«www.ject», «resource», «action», «env», «legal»։
JSON-Schema/Eurobuf: Valididium-մոդելի փաստը; սխեմաների անհամապատասխանությունը «indeterminate deny» -ի պատճառն է։
Ատրիբուտների նորմալացումը 'միավորված անուններ (օրինակ ՝ "tenium _ id", "risk _ level", "pii _ tags", "image. vulns`).
7) Արտադրողականությունը և արտադրողականությունը
Որոշումների քշը 'բանալին «(wwww.ject _ hash, resource _ key, action, policy _ version)»; Կարճ TTL, հաշմանդամություն իրադարձությունների համար (դերերի/թեգերի փոփոխություն)։
Տեղական փաստեր. Մի քաշեք ծանր PIP-ները տաք ճանապարհին 'համաժամեցեք կեղևները։
Fail-open vs fail-closed-ը 'կրիտիկական օրինագծերի անվտանգությունը' fail-closed; UX-քննադատների համար դեգրադացիան (խմբագրությունը deny-ի փոխարեն)։
Լատենտության բյուջեն 'նպատակ <<3-10 մզ "PDP հիշողության որոշման համար, <30-50 ms' PIP-ի հետ։
8) Բացառությունների կառավարում (waivers)
Սահմանափակ ժամանակով (օրինակ, 7 օր), ռուսական սեփականատիրոջ և պատճառի հետ։
Կրճատված 'ռեսուրսի/պրոտեկտի/նեյրեքսպեյսի միջոցով։ արգելք գլոբալ «ընդմիշտ»։
Աուդիտ և հիշեցումներ 'հաշվետվություններ վերջին waiver 'am, ավտոսրահում/էսկալացիա։
9) Մետրիկներն ու դիտողությունները
Policy Coverage 'PaC-ի պաշտպանված ճանապարհների/էնդպոինտների մասը։
Decision Latency / QPS / Error rate.
Deny Rate-ը և False Positive/Negative-ը («www.y-run/shadow» ռեժիմի միջոցով)։
Drift 'տարբերությունը պլանի միջև (IaC) և փաստի միջև (1942), MSK-ի և սերվերների միջև։
Аудит: `decision_id, policy_ids, version, attributes_digest, effect, reason`.
10) Anti-patternes
Քաղաքական գործիչները, որոնք «ծածկագրում են» առանց տարբերակների և թեստերի։
Ենթատեքստի սխեմաների/վալիդացիայի բացակայությունը բացատրվում է անկանխատեսելի լուծումներով։
Մեկ մոնոլիտ ֆայլ "mega. rego».
Բացառությունների գործընթաց չկա «ձեռքով շրջանցումներ» և քաոս։
Միայն runtime-կիրառումը առանց «shift-left» CI-ում (ուշ մերժումներ)։
Թաքնված սայդային էֆեկտները քաղաքականության մեջ (քաղաքականությունը պետք է լինի մաքուր գործառույթ)։
11) Օրինակներ
11. 1 Rego (OPA) 'խոցելիության արգելք K8s-ում
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 'տվյալների արտահանումը միայն MFA-ից և «սպիտակ» IP-ով
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 'կարդալ միայն սեփականատիրոջը կամ թիմի անդամներին
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) 'արգելք' latest 'և ռուսական։ ռեսուրսներ
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. 5 Wintest CI-ում Terraform պլանի համար
bash terraform plan -out tf. plan terraform show -json tf. plan > tf. json conftest test tf. json --policy policies/terraform
12) Գոյություն ունեցող կարողությունների կառուցում
RBAC/ABAC: PaC - շարժիչի շերտ; PDP/PEP-ն ռոլային շարժիչի մասին հոդվածից վերածվում է։
Համաձայնությունների կառավարումը '«ads/personalization» քաղաքականությունը որպես տվյալների/էնդպոինտների հասանելիության պայմաններ։
Անանունացում/PII 'քաղաքական գործիչները արգելում են դասընթացը/էքսպորտը առանց ռուսական անանունիզացիայի և DP բյուջեի։
Geo-միկրոօրգանիզացիան 'փոխանցման/տվյալների ուղղման քաղաքականությունը պահեստային տարածքներում։
13) Գործընթացներ և մարդիկ
Օրինագծերի տերերը քաղաքական գործիչը 'անվտանգությունը, պլատֆորմը, տվյալները, ապրանքը/մարքեթինգը։
Revuers: Security + տիրույթի սեփականատերերը։
Քաղաքական գործչի կատալոգը 'նպատակի նկարագրություն, ռիսկ, SLO, կապ, օրինակներ, հղում պատահականներին։
Ուսուցում 'կերամիկա և զարգացողների համար (ինչպես գրել թեստեր, ինչպես կարգավորել Rego)։
14) Ճարտարապետի չեկի թերթիկը
1. Կոդավորման նվազագույն հավաքածու և owners?
2. Ռեպոզորատիվ քաղաքական գործիչը թեստերի, ոսպնյակների և CI-ի հետ։
3. PDP/PEP-ն տեղադրված է պարագծի վրա, API-ում, K8s-ում և տվյալների պաշտոնական շերտերում։
4. Կա համատեքստային սխեմաներ և վալիդացիա։
5. Բանդալների ստորագրությունն ու առաքումը, քեշի ռազմավարությունը և հաշմանդամությունը։
6. Metriki (latency, deny, drift), decision-log և աուդիտ։
7. Բացառությունների գործընթացը TTL-ի և հաշվետվության հետ։
8. Disy-run/shadow-ռեժիմը Enforce-ի առջև։
9. Partial evaluation/կանխատեսումը «տաք» ճանապարհների համար։
10. Runbook-ը քայքայման համար (fail-closed/allow-with-redaction)։
Եզրակացություն
Policy as Code-ը կանոններ է տալիս վերարտադրված, ստուգված և կառավարվող նույն սկզբունքներով, ինչպես նաև հավելվածը 'կոդ-ռևե, թեստեր, CI/CD, չափումներ և արձագանքներ։ Միացնելով PaC-ը հեղինակային իրավունքի հետ (RBAC/ABAC), պլատֆորմի կոմպլենսով և անվտանգությամբ, դուք ստանում եք համակարգի վարքագծի կառավարման միասնական, կանխատեսելի և մասշտաբային կարգավորումը 'admission-վերահսկողությունից մինչև տվյալների կատալոգներ և ML-proplins։