אובייקטים של אילוצים ב-Policy Controller מאפשרים לאכוף מדיניות באשכולות Kubernetes. כדי לבדוק את המדיניות, אפשר להוסיף פעולת אכיפה למגבלות. אחר כך תוכלו לראות את ההפרות באובייקטים של אילוצים וביומנים.
הדף הזה מיועד לאדמינים ולמפעילים בתחום ה-IT שרוצים לוודא שכל המשאבים שפועלים בפלטפורמת הענן עומדים בדרישות התאימות של הארגון. כדי לעשות זאת, הם מספקים ומנהלים אוטומציה לביצוע ביקורת או לאכיפה, ומנהלים את מחזור החיים של תשתית הטכנולוגיה הבסיסית. כדי לקבל מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן בGoogle Cloud תוכן, אפשר לעיין במאמר תפקידים נפוצים של משתמשי GKE ומשימות.
סוגים של פעולות אכיפה
יש שלוש פעולות אכיפה: deny, dryrun ו-warn.
deny היא פעולת האכיפה שמוגדרת כברירת מחדל. היא מופעלת באופן אוטומטי, גם אם לא מוסיפים פעולת אכיפה באילוץ. כדי למנוע הפעלה של פעולת אשכול מסוימת במקרה של הפרה, משתמשים ב-deny.
dryrun מאפשר לכם לעקוב אחרי הפרות של הכללים בלי לחסום באופן פעיל עסקאות. אפשר להשתמש בו כדי לבדוק אם האילוצים פועלים כמו שרציתם, לפני שמפעילים אכיפה פעילה באמצעות הפעולה deny. בדיקת האילוצים בדרך הזו יכולה למנוע שיבושים שנגרמים מאילוץ שהוגדר בצורה שגויה.
הכתובת warn דומה לכתובת dryrun, אבל היא גם מספקת הודעה מיידית לגבי ההפרות שמתרחשות בזמן ההרשאה.
מומלץ, כשבודקים אילוצים חדשים או מבצעים פעולות העברה, כמו שדרוג פלטפורמות, להעביר את פעולות האכיפה מdeny לwarn או לdryrun כדי לבדוק שהמדיניות פועלת כמצופה.
הוספת פעולות אכיפה
אפשר להוסיף enforcementAction: deny או enforcementAction: dryrun למגבלה.
בדוגמה הבאה, האילוץ שנקרא audit.yaml מוסיף את הפעולה dryrun.
#audit.yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPAllowedUsers
metadata:
name: user-must-be-3333
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
runAsUser:
rule: MustRunAs
ranges:
- min: 3333
max: 3333
יוצרים את האילוץ. לדוגמה, אפשר להחיל אותו באמצעות kubectl apply -f:
kubectl apply -f audit.yaml
צפייה בתוצאות הביקורת
הפרות שנבדקו מצורפות לאובייקטים של האילוץ ונרשמות גם ביומנים. הפרות שהבקר של הרשאות הגישה דוחה לא מופיעות ביומנים.
צפייה בתוצאות הביקורת באובייקטים של אילוצים
כדי לראות הפרות של אילוץ מסוים, מריצים את הפקודה הבאה ומסתכלים על השדות spec.status.
kubectl get constraint-kind constraint-name -o yaml
דוגמה
כדי לראות את הפלט של האילוץ מ-audit.yaml, מריצים את הפקודה הבאה:
kubectl get K8sPSPAllowedUsers user-must-be-3333 -o yaml
הפלט שמוצג אמור להיראות כך:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPAllowedUsers
metadata:
creationTimestamp: "2020-05-22T01:34:22Z"
generation: 1
name: user-must-be-3333
resourceVersion: "13351707"
selfLink: /apis/constraints.gatekeeper.sh/v1beta1/k8spspallowedusers/user-must-be-3333
uid: 5d0b39a8-9bcc-11ea-bb38-42010a80000c
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups:
- ""
kinds:
- Pod
parameters:
runAsUser:
ranges:
- max: 3333
min: 3333
rule: MustRunAs
status:
auditTimestamp: "2020-05-22T01:39:05Z"
byPod:
- enforced: true
id: gatekeeper-controller-manager-6b665d4c4d-lwnz5
observedGeneration: 1
totalViolations: 5
violations:
- enforcementAction: dryrun
kind: Pod
message: Container git-sync is attempting to run as disallowed user 65533
name: git-importer-86564db8cb-5r4gs
namespace: config-management-system
- enforcementAction: dryrun
kind: Pod
message: Container manager is attempting to run as disallowed user 1000
name: gatekeeper-controller-manager-6b665d4c4d-lwnz5
namespace: gatekeeper-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-cckf
namespace: kube-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-jnhb
namespace: kube-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-xrd8
namespace: kube-system
צפייה בתוצאות הביקורת ביומנים
אתם יכולים להשתמש ב-Logs Explorer כדי לאחזר, להציג ולנתח נתוני יומן של Policy Controller.
כדי לקבל את כל היומנים של Policy Controller, מריצים את הפקודה הבאה:
kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes
תוצאות הביקורת כוללות את התו "process":"audit" בשורות היומן, כך שאפשר להעביר את הפלט לפקודה אחרת ולסנן לפי השורות האלה. לדוגמה, אפשר להשתמש ב-jq, שמנתח קובצי JSON ומאפשר להגדיר מסנן לסוג יומן ספציפי.
תוצאת ביקורת לדוגמה מרישום ביומן:
{
"level":"info",
"ts":1590111401.9769812,
"logger":"controller",
"msg":"Container kube-proxy is attempting to run without a required securityContext/runAsUser",
"process":"audit",
"audit_id":"2020-05-22T01:36:24Z",
"event_type":"violation_audited",
"constraint_kind":"K8sPSPAllowedUsers",
"constraint_name":"user-must-be-3333",
"constraint_namespace":"",
"constraint_action":"dryrun",
"resource_kind":"Pod",
"resource_namespace":"kube-system",
"resource_name":"kube-proxy-gke-fishy131-default-pool-7369b17c-xrd8"
}
המאמרים הבאים
- מידע נוסף על יצירת אילוצים
- שימוש בספריית תבניות האילוצים
- איך משתמשים במגבלות במקום ב-PodSecurityPolicies