ЁЯЫбя╕П рдзрдбрд╛ 09 тАФ Policy as code рдЖрдгрд┐ guardrails: рджреБрд░реБрд╕реНрддреА рд╕рд╛рдВрдЧрдгрд╛рд░реЗ рдирд┐рдпрдо
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 09 ┬╖ рдорд╛рдЧреАрд▓: lesson-08-secrets-config ┬╖ рдкреБрдвреАрд▓: lesson-10-scorecards
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ08, рдЖрдгрд┐ policy as code: рд╢рд╛рд│реЗрдЪреЗ рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо code рдореНрд╣рдгреВрди рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ, рдЬреЗ рдкреНрд░рддреНрдпреЗрдХ
deployment рддрдкрд╛рд╕рддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХрд╛рдп рдЪреБрдХрд▓реЗ рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рджреБрд░реБрд╕реНрдд рдХрд░рд╛рдпрдЪреЗ рд╣реЗ рдкрд░рдд рд╕рд╛рдВрдЧрддреЛ. рддреЗрдЪ
рдирд┐рдпрдо audit mode (рдкрд░рд╡рд╛рдирдЧреА, рдкрдг рдЗрд╢рд╛рд░рд╛) рдХрд┐рдВрд╡рд╛ enforce mode (рдирдХрд╛рд░) рдордзреНрдпреЗ рдЪрд╛рд▓рддрд╛рдд. RULES рдЖрдгрд┐
evaluate() idp/guard.py рдордзреНрдпреЗ, policy()
idp/demo.py рдордзреНрдпреЗ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╢рд╛рд│реЗрдд рд╡рд░реНрдЧрдЦреЛрд▓реНрдпрд╛рдВрд╕рд╛рдареА рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо рдЖрд╣реЗрдд: рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрд▓рд╛ рдирд╛рд╡ рдЕрд╕рд▓реЗрд▓рд╛ рдорд╛рд▓рдХ рдЕрд╕рддреЛ, fire exits рдЕрдбрд╡рд▓реЗрд▓реЗ рдирд╕рддрд╛рдд, рдореЛрдареНрдпрд╛ рд╣реЙрд▓рдордзреНрдпреЗ рдХрд┐рдорд╛рди рджреЛрди рдмрд╛рд╣реЗрд░ рдкрдбрд╛рдпрдЪреЗ рджрд░рд╡рд╛рдЬреЗ рдЕрд╕рддрд╛рдд, рд░рд╕рд╛рдпрдирд╛рдВрдЪреЗ рдХрдкрд╛рдЯ рдХреБрд▓реВрдкрдмрдВрдж рдЕрд╕рддреЗ.
рдЬреБрдиреА рдкрджреНрдзрдд: рдПрдХ рдирд┐рд░реАрдХреНрд╖рдХ рдпреЗрддреЛ, "рдирд╛рдкрд╛рд╕" рдореНрд╣рдгрддреЛ рдЖрдгрд┐ рдирд┐рдШреВрди рдЬрд╛рддреЛ. ЁЯЪл рд╢рд┐рдХреНрд╖рд┐рдХреЗрд▓рд╛ рдХрд╛рдп рдмрджрд▓рд╛рдпрдЪреЗ рддреЗ рдХрд│рдд рдирд╛рд╣реА, рдореНрд╣рдгреВрди рдкреБрдврдЪреНрдпрд╛ рднреЗрдЯреАрдЖрдзреА рддреА рдЕрдбрдЪрдг рд▓рдкрд╡рддреЗ.
рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╣реЗ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХрд░рддреЗ. рдирд┐рд░реАрдХреНрд╖рдХрд╛рдЪреА рддрдкрд╛рд╕рдгреА-рдпрд╛рджреА рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реЗрд▓реА рдЕрд╕рддреЗ рдЖрдгрд┐ рдЦреЛрд▓реАрдд рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓ рдЭрд╛рд▓рд╛ рдХреА рддреА рдЖрдкреЛрдЖрдк рдЪрд╛рд▓рддреЗ. рдкреНрд░рддреНрдпреЗрдХ рдЕрдбрдЪрдгреАрд╕рд╛рдареА рддреА рдХрд╛рдп рдЖрдгрд┐ рдХрд╕реЗ рд╕рд╛рдВрдЧрддреЗ: "рджрд╛рд░рд╛рд╡рд░ рдорд╛рд▓рдХрд╛рдЪреА рдкрд╛рдЯреА рдирд╛рд╣реА тЖТ рдЗрдереЗ рддреБрдордЪреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдЪреЗ рдирд╛рд╡ рд▓рд╛рд╡рд╛ тАФ рдпреЛрдЧреНрдп рд╡реНрдпрдХреНрддреАрд▓рд╛ рдмреЛрд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдпрд╛рд▓рдп рддреЗ рд╡рд╛рдкрд░рддреЗ." ЁЯЫбя╕П
рдкрд╣рд┐рд▓реНрдпрд╛ рдорд╣рд┐рдиреНрдпрд╛рдд рддрдкрд╛рд╕рдгреА-рдпрд╛рджреА рдлрдХреНрдд рдЗрд╢рд╛рд░рд╛ рджреЗрддреЗ (audit mode): рдЦреЛрд▓реНрдпрд╛ рдЙрдШрдбреНрдпрд╛ рд░рд╛рд╣рддрд╛рдд, рд╢рд┐рдХреНрд╖рд┐рдХрд╛рдВрдирд╛ рдпрд╛рджреА рдорд┐рд│рддреЗ. рдмрд╣реБрддреЗрдХ рдЦреЛрд▓реНрдпрд╛ рдкрд╛рд╕ рдЭрд╛рд▓реНрдпрд╛ рдХреА рдХрд╛рд░реНрдпрд╛рд▓рдп enforce рд╡рд░ рдЬрд╛рддреЗ: рдЕрдбрдЪрдг рдЕрд╕рд▓реЗрд▓реА рдЦреЛрд▓реА рддреА рджреБрд░реБрд╕реНрдд рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЙрдШрдбрдд рдирд╛рд╣реА. рдХрддрд░рд┐рдирд╛рдЪреНрдпрд╛ рдкрд░реАрдХреНрд╖рд╛-рдЦреЛрд▓реАрдд 4 рдЕрдбрдЪрдгреА рд╣реЛрддреНрдпрд╛. рддрд┐рдиреЗ рдлрдХреНрдд messages рд╡рд╛рдЪреВрди рдЪрд╛рд░рд╣реА рджреБрд░реБрд╕реНрдд рдХреЗрд▓реНрдпрд╛, рдЖрдгрд┐ рдЦреЛрд▓реА рдЙрдШрдбрд▓реА.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
m["ЁЯУД exam-results manifest"] --> e{"ЁЯЫбя╕П 5 rules"}
e -->|"audit"| w["тЪая╕П allowed with warnings<br/>4 findings"]
e -->|"enforce"| d["тЫФ denied<br/>4 findings"]
d --> f["ЁЯТм each finding:<br/>what is wrong тЖТ fix"]
f --> m2["ЁЯУД fixed manifest"] --> ok["тЬЕ allowed"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА + рдПрдХ lab: https://school-edh.pages.dev/platform-engineering/lesson-diagrams.html#l09
тЭУ рдХрд╛рдп
- Policy as code тАФ machine рддрдкрд╛рд╕реВ рд╢рдХреЗрд▓ рдЕрд╢рд╛ рднрд╛рд╖реЗрдд рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдирд┐рдпрдо, Git рдордзреНрдпреЗ рдареЗрд╡рд▓реЗрд▓реЗ, рдЗрддрд░ code рдкреНрд░рдорд╛рдгреЗрдЪ review рдЖрдгрд┐ test рдХреЗрд▓реЗрд▓реЗ. рддреЛрдЪ рдирд┐рдпрдо developer рдЪреНрдпрд╛ editor рдордзреНрдпреЗ, CI рдордзреНрдпреЗ рдЖрдгрд┐ deploy рдЪреНрдпрд╛ рд╡реЗрд│реА рдЪрд╛рд▓реВ рд╢рдХрддреЛ.
- Guardrail тАФ рд╕рдВрдкреВрд░реНрдг рд░рд╕реНрддрд╛ рди рдЕрдбрд╡рддрд╛ teams рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╕реНрддреНрдпрд╛рд╡рд░ рдареЗрд╡рдгрд╛рд░рд╛ рдирд┐рдпрдо. рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓рд╛рд▓рд╛ рдПрдЦрд╛рджреНрдпрд╛ рд╡реНрдпрдХреНрддреАрдЪреА рдордВрдЬреБрд░реА рд▓рд╛рдЧрдгрд╛рд▒реНрдпрд╛ рдлрд╛рдЯрдХрд╛ рдЪреНрдпрд╛ рдЙрд▓рдЯ.
- Admission control тАФ Kubernetes рдордзреНрдпреЗ, рдкреНрд░рддреНрдпреЗрдХ object store рд╣реЛрдгреНрдпрд╛рдЖрдзреА рддреЛ рдкрд╛рд╣рдгрд╛рд░рд╛ рдЖрдгрд┐ рдирд╛рдХрд╛рд░реВ рд╢рдХрдгрд╛рд░рд╛ webhook рдХрд┐рдВрд╡рд╛ built-in check. OPA Gatekeeper, Kyverno рдЖрдгрд┐ Kubernetes рдЪреА рд╕реНрд╡рддрдГрдЪреА ValidatingAdmissionPolicy (CEL рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реА) рд╣реЗ рд╕рдЧрд│реЗ рдЗрдереЗ рдХрд╛рдо рдХрд░рддрд╛рдд.
- Audit рд╡рд┐рд░реБрджреНрдз enforce тАФ audit рдЕрдбрдЪрдгреА рд╕рд╛рдВрдЧрддреЛ рдЖрдгрд┐ рдмрджрд▓ рдЬрд╛рдК рджреЗрддреЛ; enforce рддреЛ рдирд╛рдХрд╛рд░рддреЛ.
Gatekeeper рдЪреЗ
enforcementActiondryrun,warnрдХрд┐рдВрд╡рд╛denyрдЕрд╕реВ рд╢рдХрддреЗ; Kyverno рдордзреНрдпреЗAuditрдЖрдгрд┐EnforceрдЖрд╣реЗрдд. рдЖрдзреА audit рдордзреНрдпреЗ rollout рдХреЗрд▓реНрдпрд╛рдиреЗ рдХрд┐рддреА рдЧреЛрд╖реНрдЯреА рдореЛрдбрддреАрд▓ рддреЗ рджрд┐рд╕рддреЗ. - Shift left тАФ рддреЗрдЪ checks рд▓рд╡рдХрд░ рдЪрд╛рд▓рд╡рдгреЗ (editor рдордзреНрдпреЗ, Conftest рд╕рд╛рд░рдЦреНрдпрд╛ tool рдиреЗ CI рдордзреНрдпреЗ) рдореНрд╣рдгрдЬреЗ рд▓реЛрдХрд╛рдВрдирд╛ рдЕрдбрдЪрдг рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рдирдВрддрд░ рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдд рдХрд│рддреЗ, deploy рдЪреНрдпрд╛ рд╡реЗрд│реА рдирд╛рд╣реА.
- Actionable message тАФ рдирд┐рдпрдорд╛рдЪреЗ рдирд╛рд╡, рдЕрдбрдЪрдг рдЖрдгрд┐ рджреБрд░реБрд╕реНрддреА рд╕рд╛рдВрдЧрдгрд╛рд░реА finding. рд╢рд┐рдХрд╡рдгрд╛рд░рд╛ guardrail рдЖрдгрд┐ рд▓реЛрдХ рдЬреНрдпрд╛рд▓рд╛ рд╡рд│рд╕рд╛ рдШрд╛рд▓рддрд╛рдд рдЕрд╕рд╛ guardrail рдпрд╛рдВрдЪреНрдпрд╛рдд рд╣рд╛рдЪ рдлрд░рдХ рдЖрд╣реЗ.
- Exceptions тАФ рдЦрд▒реНрдпрд╛ policy system рдордзреНрдпреЗ "рд╣рд╛ рдирд╛рд╣реА, рдХрд╛рд░рдг тАж" рдЕрд╕реЗ рд╕рд╛рдВрдЧрдгреНрдпрд╛рдЪреА рд╕реЛрдп рд╣рд╡реА, рдЬреНрдпрд╛рд▓рд╛ owner рдЖрдгрд┐ рд╢реЗрд╡рдЯрдЪреА рддрд╛рд░реАрдЦ рдЕрд╕рддреЗ.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг self-service (рднрд╛рдЧ 2) рдиреЗ рдирд┐рд░реНрдгрдп рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдХрдбреВрди teams рдХрдбреЗ рдиреЗрд▓реЗ. рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓ рд╣рд╛рддрд╛рдиреЗ review рди рдХрд░рддрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рдЦрд▒реНрдпрд╛ рд░рд╛рд╣рддреАрд▓ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдирд┐рдпрдо рдХрд░рддрд╛рдд: рдкреНрд░рддреНрдпреЗрдХ service рд▓рд╛ owner рдЖрд╣реЗ, images pinned рдЖрд╣реЗрдд, production рдордзреНрдпреЗ рджреЛрди replicas рдЖрд╣реЗрдд, buckets private рдЖрд╣реЗрдд. рдЖрдгрд┐ рдХрд╛рд░рдг рдлрдХреНрдд "рдирд╛рд╣реА" рдореНрд╣рдгрдгрд╛рд░рд╛ рдирд┐рдпрдо рдХрд╛рд╣реАрдЪ рд╢рд┐рдХрд╡рдд рдирд╛рд╣реА тАФ рдордЧ рд▓реЛрдХ рдорд╛рдЧрдЪреНрдпрд╛ рд╡реЗрд│реА рдЬреЗ рдкрд╛рд╕ рдЭрд╛рд▓реЗ рддреНрдпрд╛рдЪреА copy рдХрд░рддрд╛рдд, рдХрд┐рдВрд╡рд╛ рдорд╛рдЧрдЪрд╛ рджрд░рд╡рд╛рдЬрд╛ рд╢реЛрдзрддрд╛рдд. рджреБрд░реБрд╕реНрддреА рд╕рдордЬрд╛рд╡рдгрд╛рд░рд╛ рдирд┐рдпрдо рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╛рд░реНрдЧрд╛рд▓рд╛рдЪ рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рдмрдирд╡рддреЛ, рдЖрдгрд┐ рд╕реЛрдиреЗрд░реА рд╡рд╛рдЯреЗрдЪреА рд╕рдВрдкреВрд░реНрдг рдХрд▓реНрдкрдирд╛ рд╣реАрдЪ рдЖрд╣реЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
idp/guard.py рдордзреАрд▓ RULES рд╣реА
(id, test, message, fix) рдЪреА рдпрд╛рджреА рдЖрд╣реЗ; manifest рдареАрдХ рдЕрд╕реЗрд▓ рддрд░ test(manifest) True рдкрд░рдд рджреЗрддреЛ.
рдкрд╛рдЪ рдирд┐рдпрдо: owner-label, no-latest-tag, limits-set, two-replicas-in-prod (рдлрдХреНрдд env
production рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛рдЪ рддрдкрд╛рд╕рд▓рд╛ рдЬрд╛рддреЛ) рдЖрдгрд┐ no-public-bucket. evaluate(manifest, mode, rules) рдХрд╛рд╣реАрдЪ рдирд╛рдкрд╛рд╕ рдирд╕реЗрд▓ рддрд░ allowed рдкрд░рдд рджреЗрддреЛ; рдирд╛рд╣реАрддрд░ audit mode рдордзреНрдпреЗ allowed with warnings
рдХрд┐рдВрд╡рд╛ enforce mode рдордзреНрдпреЗ denied, рдЖрдгрд┐ рд╕реЛрдмрдд рдкреНрд░рддреНрдпреЗрдХ finding рддрд┐рдЪреНрдпрд╛ рджреБрд░реБрд╕реНрддреАрд╕рд╣. рддреБрдореНрд╣реА рддреБрдордЪреА рд╕реНрд╡рддрдГрдЪреА
рдирд┐рдпрдорд╛рдВрдЪреА рдпрд╛рджреАрд╣реА рджреЗрдК рд╢рдХрддрд╛.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 idp/demo.py policy
python3 - <<'EOF'
import sys; sys.path.insert(0, "idp"); from guard import RULES, evaluate
m = dict(name="timetable", labels={"owner": "maths"}, image="timetable", limits={"cpu": "250m", "memory": "128Mi"},
env="staging", replicas=1, public_bucket=True)
decision, findings = evaluate(m, "enforce")
print(decision, [rid for rid, _, _ in findings])
m["env"] = "production"; print("in production:", [rid for rid, _, _ in evaluate(m)[1]])
rules = RULES + [("has-probe", lambda m: "probe" in m, "no health probe", "add probe: /healthz (the template ships one)")]
m.update(image="timetable:2.0.1", replicas=2, public_bucket=False)
print("with a sixth rule:", evaluate(m, "enforce", rules)[0], "┬╖", evaluate(m, "enforce", rules)[1][0][2])
m["probe"] = "/healthz"; print("fixed:", evaluate(m, "enforce", rules))
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
policy рд╣реЗ рдЫрд╛рдкрддреЗ:
тФАтФА audit mode: exam-results тЖТ allowed with warnings (4 findings)
тФАтФА enforce mode: exam-results тЖТ denied (4 findings)
тЬЧ owner-label no owner label тЖТ fix: add labels.owner: <your group> (the catalog uses it to page the right people)
тЬЧ two-replicas-in-prod 1 replica in production тЖТ fix: set replicas: 2 or more so one restart is not an outage
тФАтФА after the four fixes тЖТ allowed
рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:
denied ['no-latest-tag', 'no-public-bucket']
in production: ['no-latest-tag', 'two-replicas-in-prod', 'no-public-bucket']
with a sixth rule: denied ┬╖ add probe: /healthz (the template ships one)
fixed: ('allowed', [])
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреЛрдЪ manifest audit mode рдордзреНрдпреЗ allowed рдЖрдгрд┐ enforce mode рдордзреНрдпреЗ denied рдЭрд╛рд▓рд╛ тАФ рдирд┐рдпрдо рдмрджрд▓рд▓реЗ
рдирд╛рд╣реАрдд, рдлрдХреНрдд рдирд╛рдкрд╛рд╕ рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рдмрджрд▓рд▓реЗ. рдЕрдЬрд┐рдмрд╛рдд tag рдирд╕рд▓реЗрд▓реА image :latest рд╕рд╛рд░рдЦреНрдпрд╛рдЪ
рдирд┐рдпрдорд╛рдд рдирд╛рдкрд╛рд╕ рдЭрд╛рд▓реА. Manifest staging рд╡рд░реВрди production рд╡рд░ рдиреЗрд▓реНрдпрд╛рд╡рд░ рдПрдХ finding рд╡рд╛рдврд▓реА (staging рд╕рд╛рдареА рдПрдХ
replica рдЪрд╛рд▓рддреЗ, production рд╕рд╛рдареА рдирд╛рд╣реА): рдирд┐рдпрдо рд╕рдВрджрд░реНрднрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕реВ рд╢рдХрддрд╛рдд. рд╕рд╣рд╛рд╡рд╛ рдирд┐рдпрдо рдЬреЛрдбрдгреЗ
рдореНрд╣рдгрдЬреЗ рдПрдХ рдУрд│, рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рджреБрд░реБрд╕реНрддреА рдереЗрдЯ рдзрдбрд╛ 03 рдордзрд▓реНрдпрд╛ рд╕реЛрдиреЗрд░реА рд╡рд╛рдЯреЗрдХрдбреЗ рдмреЛрдЯ рджрд╛рдЦрд╡рдд рд╣реЛрддреА
("the template ships one"). Template рдордзреВрди рдмрдирд▓реЗрд▓реА service рдкрд╣рд┐рд▓реНрдпрд╛рдЪ рджрд┐рд╡рд╢реА рдмрд╣реБрддреЗрдХ рдирд┐рдпрдо рдкрд╛рд╕ рдХрд░рддреЗ тАФ
guardrails рдЖрдгрд┐ golden paths рдЬреЛрдбреАрдиреЗ рдХрд╛рдо рдХрд░рддрд╛рдд.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдкрд╣рд┐рд▓реНрдпрд╛рдЪ рджрд┐рд╡рд╢реА enforce рдЪрд╛рд▓реВ рдХрд░рдгреЗ тАФ рд╢реЗрдХрдбреЛ deploys рдПрдХрд╛рдЪ рд╡реЗрд│реА рдирд╛рдкрд╛рд╕ рд╣реЛрддрд╛рдд, рдЖрдгрд┐ рдирд┐рдпрдо рдмрдВрдж рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд
- рдирд┐рдпрдорд╛рдЪреЗ рдирд╛рд╡ рдЖрдгрд┐ рджреБрд░реБрд╕реНрддреА рдирд╕рд▓реЗрд▓реЗ "policy violation" рд╕рд╛рд░рдЦреЗ messages
- рдирд┐рдпрдо рдлрдХреНрдд deploy рдЪреНрдпрд╛ рд╡реЗрд│реА, рддреНрдпрд╛рдореБрд│реЗ рд▓реЛрдХрд╛рдВрдирд╛ рдЕрдбрдЪрдг рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдХреНрд╖рдгреА рдХрд│рддреЗ
- exception рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╛рд╣реА, рддреНрдпрд╛рдореБрд│реЗ рдЦрд░реЗ рдХрд╛рд░рдг рдЕрд╕рд▓реЗрд▓реНрдпрд╛ teams system рд▓рд╛ рд╡рд│рд╕рд╛ рдШрд╛рд▓рддрд╛рдд
- рдЬреНрдпрд╛рдВрдЪрд╛ рдХреЛрдгреА owner рдирд╛рд╣реА рдХрд┐рдВрд╡рд╛ рдЬреЗ рдХреЛрдгреА test рдХрд░рдд рдирд╛рд╣реА рдЕрд╕реЗ рдирд┐рдпрдо тАФ рдПрдХ buggy рдирд┐рдпрдо рд╕рдЧрд│реНрдпрд╛рдВрдирд╛ рдЕрдбрд╡рддреЛ
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
Kyverno, рдЦрд▒реНрдпрд╛ cluster рд╡рд░ тАФ рджреБрд░реБрд╕реНрддреА рдХрд╢реА рдХрд░рд╛рдпрдЪреА рд╣реЗ рд╕рд╛рдВрдЧрдгрд╛рд░рд╛ message рдЕрд╕рд▓реЗрд▓рд╛ рдирд┐рдпрдо. Kyverno
1.13+ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдорд╛рд╕рд╛рдареА action failureAction рдиреЗ рдард░рд╡рддреЛ; рдЬреБрдиреНрдпрд╛ releases рдордзреНрдпреЗ
spec.validationFailureAction рд╡рд╛рдкрд░рдд рдЕрд╕рдд:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-owner-label
spec:
rules:
- name: owner-label
match:
any:
- resources:
kinds: [Deployment]
validate:
failureAction: Audit
message: "Add metadata.labels.owner: <your group> тАФ the catalog uses it to page the right people."
pattern:
metadata:
labels:
owner: "?*"
OPA Gatekeeper рдирд┐рдпрдо (Rego рдордзреАрд▓ ConstraintTemplate) рдЖрдгрд┐ рддреЛ рдХреБрдареЗ рд╡ рдХрд╕рд╛ рд▓рд╛рдЧреВ рд╣реЛрддреЛ (рдПрдХ
constraint) рд╣реЗ рд╡реЗрдЧрд│реЗ рдареЗрд╡рддреЛ. dry-run рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels # from the Gatekeeper policy library
metadata:
name: must-have-owner
spec:
enforcementAction: dryrun # later: warn, then deny
match:
kinds:
- apiGroups: ["apps"]
kinds: ["Deployment"]
parameters:
labels:
- key: owner
рддреЗрдЪ Rego рдХрд╛рд╣реАрд╣реА deploy рд╣реЛрдгреНрдпрд╛рдЖрдзреА CI рдордзреНрдпреЗ files рддрдкрд╛рд╕реВ рд╢рдХрддреЗ:
conftest test deploy/values.yaml --policy policy/
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: enforce рдХрд░рдгреНрдпрд╛рдЖрдзреА рдХрд╛рд╣реА рдЖрдард╡рдбреЗ audit рдЪреЗ рдирд┐рдХрд╛рд▓ рдкрд╛рд╣рд╛. рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдорд╛рдЪреНрдпрд╛ findings рдЪреА рд╕рдВрдЦреНрдпрд╛ рд╕рд╛рдВрдЧрддреЗ рдХреА рдХреЛрдгрддреНрдпрд╛ рдирд┐рдпрдорд╛рд▓рд╛ рдЪрд╛рдВрдЧрд▓рд╛ template default рд╣рд╡рд╛, рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛рд▓рд╛ рдЪрд╛рдВрдЧрд▓рд╛ message.
тПня╕П рдкреБрдвреЗ
Policies рд╕рд╛рдВрдЧрддрд╛рдд рдХреА рдХрд╛рдп рдЦрд░реЗ рдЕрд╕рд▓реЗрдЪ рдкрд╛рд╣рд┐рдЬреЗ. рдкреБрдвреЗ: рдПрдХ scorecard рдЬреЛ рджрд╛рдЦрд╡рддреЛ рдХреА рдкреНрд░рддреНрдпреЗрдХ service рдХрд╛рдп рдЦрд░реЗ рдЕрд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ рддреНрдпрд╛рдкрд╛рд╕реВрди рдХрд┐рддреА рджреВрд░ рдЖрд╣реЗ тАФ рдЖрдгрд┐ рдкреБрдвреЗ рдХрд╛рдп рдХрд░рд╛рдпрдЪреЗ.
git checkout lesson-10-scorecards