ביקורת באמצעות אילוצים

אובייקטים של אילוצים ב-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"
}

המאמרים הבאים