במאמר הזה מוסבר על CIS Kubernetes Benchmark, איך לבדוק את התאימות שלכם ל-Benchmark ומה Google Distributed Cloud (GDC) מגדיר כשאתם לא יכולים להטמיע המלצה בעצמכם.
מידע על נקודות השוואה של CIS
המרכז לאבטחת אינטרנט (CIS) מפרסם מדדים להשוואה של שיטות מומלצות והמלצות בנושא אבטחה. המדד של CIS Kubernetes מספק קבוצה של המלצות להגדרת Kubernetes כדי לתמוך בתשתית חזקה לאבטחה. ההשוואה לביצועים קשורה לגרסה ספציפית של Kubernetes. המדד של CIS Kubernetes נכתב עבור הפצת Kubernetes בקוד פתוח, והוא נועד להיות רלוונטי לכל ההפצות ככל האפשר.
גישה לנקודת ההשוואה
המדד של CIS Kubernetes זמין באתר CIS.
רמות ההמלצות
בטבלה הבאה מפורטות רמות ההמלצות ב-CIS Kubernetes Benchmark.
| רמה | תיאור |
|---|---|
| רמה 1 | ההמלצות הן לגבי המאפיינים הבאים: |
| רמה 2 | הרחבה של פרופיל רמה 1. ההמלצות הן לגבי המאפיינים הבאים: |
סטטוס ההערכה
לכל המלצה מצורף סטטוס הערכה. סטטוס ההערכה מציין אם אפשר להפוך את ההמלצה האוטומטית לזמינה או אם נדרשים שלבים ידניים כדי ליישם אותה. שני הסטטוסים חשובים באותה מידה, והם נקבעים ונתמכים בהתאם להגדרות שבטבלאות הבאות.
גרסאות
ההערכה מתייחסת לגרסאות הבאות:
| הגרסה של GDC בשרת פיזי | גרסת Kubernetes | גרסת CIS Kubernetes Benchmark |
|---|---|---|
| 1.30 | 1.30.9 | v0.10.4 |
הסטטוס של אשכול Kubernetes עם air gap ב-GDC
| # | המלצה | רמה | סטטוס |
|---|---|---|---|
| 1 | הגדרת אבטחה של מישור הבקרה | ||
| 1.1 | קובצי הגדרה של צומת Control Plane | ||
| 1.1.1 | מוודאים שההרשאות של קובץ המפרט של ה-API server pod מוגדרות ל-600 או להגדרה מגבילה יותר (אוטומטי) |
L1 | האימות הצליח |
| 1.1.2 | מוודאים שהבעלות על קובץ המפרט של ה-pod של שרת ה-API מוגדרת ל-root:root (אוטומטי) |
L1 | האימות הצליח |
| 1.1.3 | מוודאים שהרשאות הקובץ של מפרט ה-pod של מנהל הבקרה מוגדרות ל-600 או להרשאות מגבילות יותר (אוטומטי) |
L1 | האימות הצליח |
| 1.1.4 | מוודאים שהבעלות על קובץ המפרט של ה-pod של מנהל בקרים מוגדרת כ-root:root (אוטומטי) |
L1 | האימות הצליח |
| 1.1.5 | מוודאים שההרשאות של קובץ המפרט של ה-pod של מתזמן המשימות מוגדרות ל-600 או להרשאות מגבילות יותר (אוטומטי) |
L1 | האימות הצליח |
| 1.1.6 | מוודאים שהבעלות על קובץ המפרט של ה-pod של מתזמן המשימות מוגדרת ל-root:root (אוטומטי) |
L1 | האימות הצליח |
| 1.1.7 | מוודאים שההרשאות של קובץ המפרט של ה-pod של etcd מוגדרות ל-600 או להרשאות מגבילות יותר (אוטומטי) |
L1 | האימות הצליח |
| 1.1.8 | מוודאים שהבעלות על קובץ המפרט של ה-pod של etcd מוגדרת ל-root:root (אוטומטי) |
L1 | האימות הצליח |
| 1.1.9 | מוודאים שהרשאות הקובץ של ממשק רשת המכולה מוגדרות ל-600 או להרשאות מגבילות יותר (ידני) |
L1 | אזהרה |
| 1.1.10 | מוודאים שהבעלות על קובץ Container Network Interface מוגדרת ל-root:root (ידני) |
L1 | אזהרה |
| 1.1.11 | מוודאים שההרשאות של ספריית הנתונים של etcd מוגדרות ל-700 או להגדרה מגבילה יותר (אוטומטי) |
L1 | האימות הצליח |
| 1.1.12 | מוודאים שהבעלות על ספריית הנתונים של etcd מוגדרת ל-etcd:etcd (אוטומטי) |
L1 | האימות נכשל |
| 1.1.13 | מוודאים שהרשאות הגישה לקובץ ברירת המחדל של פרטי הכניסה לאדמין מוגדרות ל-600 (אוטומטיות). |
L1 | האימות הצליח |
| 1.1.14 | מוודאים שהבעלות על קובץ פרטי הכניסה האדמינסטרטיביים שמוגדר כברירת מחדל מוגדרת ל-root:root (אוטומטי) |
L1 | האימות הצליח |
| 1.1.15 | חשוב לוודא שהרשאות הקובץ scheduler.conf מוגדרות ל-600 או להרשאות מגבילות יותר (אוטומטי) |
L1 | האימות הצליח |
| 1.1.16 | מוודאים שהבעלות על הקובץ scheduler.conf מוגדרת ל-root:root (אוטומטי) |
L1 | האימות נכשל |
| 1.1.17 | חשוב לוודא שהרשאות הקובץ controller-manager.conf מוגדרות ל-600 או להרשאות מגבילות יותר (אוטומטי) |
L1 | האימות הצליח |
| 1.1.18 | מוודאים שהבעלות על הקובץ controller-manager.conf מוגדרת ל-root:root (אוטומטי) |
L1 | האימות נכשל |
| 1.1.19 | מוודאים שהבעלות על הקובץ והספרייה של Kubernetes PKI מוגדרת ל-root:root (אוטומטי) |
L1 | האימות נכשל |
| 1.1.20 | חשוב לוודא שההרשאות של קובץ אישור ה-PKI של Kubernetes מוגדרות ל-600 או להרשאות מוגבלות יותר (ידני) |
L1 | אזהרה |
| 1.1.21 | מוודאים שההרשאות של קובץ מפתח ה-PKI של Kubernetes מוגדרות ל-600 (ידני) |
L1 | אזהרה |
| 1.2 | API Server | ||
| 1.2.1 | מוודאים שהארגומנט --anonymous-auth מוגדר לערך false (ידני). |
L1 | אזהרה |
| 1.2.2 | מוודאים שהפרמטר --token-auth-file לא מוגדר (אוטומטי) |
L1 | האימות הצליח |
| 1.2.3 | מוודאים שהערך --DenyServiceExternalIPs מוגדר (ידני) |
L1 | אזהרה |
| 1.2.4 | מוודאים שהארגומנטים --kubelet-client-certificate ו---kubelet-client-key מוגדרים בצורה המתאימה (אוטומטית) |
L1 | האימות הצליח |
| 1.2.5 | מוודאים שהארגומנט --kubelet-certificate-authority מוגדר בצורה המתאימה (אוטומטי) |
L1 | האימות הצליח |
| 1.2.6 | מוודאים שהארגומנט --authorization-mode לא מוגדר כ-AlwaysAllow (אוטומטי) |
L1 | האימות הצליח |
| 1.2.7 | מוודאים שהארגומנט --authorization-mode כולל את Node (אוטומטי) |
L1 | האימות הצליח |
| 1.2.8 | מוודאים שהארגומנט --authorization-mode כולל RBAC (אוטומטי) |
L1 | האימות הצליח |
| 1.2.9 | מוודאים שהפלאגין EventRateLimit לבקרת כניסה מוגדר (ידנית) |
L1 | אזהרה |
| 1.2.10 | מוודאים שהפלאגין לבקרת כניסה AlwaysAdmit לא מוגדר (אוטומטי) |
L1 | האימות הצליח |
| 1.2.11 | מוודאים שהפלאגין AlwaysPullImages לבקרת כניסה מוגדר (ידנית) |
L1 | אזהרה |
| 1.2.12 | מוודאים שהפלאגין לבקרת גישה ServiceAccount מוגדר (אוטומטי) |
L1 | האימות הצליח |
| 1.2.13 | מוודאים שהפלאגין לבקרת גישה NamespaceLifecycle מוגדר (אוטומטי) |
L1 | האימות הצליח |
| 1.2.14 | מוודאים שהפלאגין לבקרת גישה NodeRestriction מוגדר (אוטומטי) |
L1 | האימות הצליח |
| 1.2.15 | מוודאים שהארגומנט --profiling מוגדר ל-false (אוטומטי) |
L1 | האימות הצליח |
| 1.2.16 | מוודאים שהארגומנט --audit-log-path מוגדר (אוטומטי) |
L1 | האימות הצליח |
| 1.2.17 | מוודאים שהארגומנט --audit-log-maxage מוגדר לערך 30 או לערך המתאים (אוטומטי) |
L1 | האימות הצליח |
| 1.2.18 | מוודאים שהארגומנט --audit-log-maxbackup מוגדר לערך 10 או לערך המתאים (אוטומטי) |
L1 | האימות הצליח |
| 1.2.19 | מוודאים שהארגומנט --audit-log-maxsize מוגדר לערך 100 או לערך המתאים (אוטומטי) |
L1 | האימות הצליח |
| 1.2.20 | מוודאים שהארגומנט --request-timeout מוגדר בצורה המתאימה (ידנית) |
L1 | אזהרה |
| 1.2.21 | מוודאים שהארגומנט --service-account-lookup מוגדר ל-true (אוטומטי) |
L1 | האימות הצליח |
| 1.2.22 | מוודאים שהארגומנט --service-account-key-file מוגדר בצורה המתאימה (אוטומטי) |
L1 | האימות הצליח |
| 1.2.23 | מוודאים שהארגומנטים --etcd-certfile ו---etcd-keyfile מוגדרים בצורה המתאימה (אוטומטית) |
L1 | האימות הצליח |
| 1.2.24 | מוודאים שהארגומנטים --tls-cert-file ו---tls-private-key-file מוגדרים בצורה המתאימה (אוטומטית) |
L1 | האימות הצליח |
| 1.2.25 | מוודאים שהארגומנט --client-ca-file מוגדר בצורה המתאימה (אוטומטי) |
L1 | האימות הצליח |
| 1.2.26 | מוודאים שהארגומנט --etcd-cafile מוגדר בצורה המתאימה (אוטומטי) |
L1 | האימות הצליח |
| 1.2.27 | מוודאים שהארגומנט --encryption-provider-config מוגדר בצורה המתאימה (ידנית) |
L1 | האימות הצליח |
| 1.2.28 | מוודאים שספקי ההצפנה מוגדרים בצורה נכונה (ידנית) | L1 | האימות הצליח |
| 1.2.29 | מוודאים ששרת ה-API משתמש רק בצפנים קריפטוגרפיים חזקים (ידני) | L1 | האימות הצליח |
| 1.3 | Controller Manager | ||
| 1.3.1 | מוודאים שהארגומנט --terminated-pod-gc-threshold מוגדר בצורה המתאימה (ידנית) |
L1 | האימות הצליח |
| 1.3.2 | מוודאים שהאפשרות --profiling argument מוגדרת ל-false (אוטומטי). |
L1 | האימות הצליח |
| 1.3.3 | מוודאים שהארגומנט --use-service-account-credentials מוגדר ל-true (אוטומטי) |
L1 | האימות הצליח |
| 1.3.4 | מוודאים שהארגומנט --service-account-private-key-file מוגדר בצורה המתאימה (אוטומטי) |
L1 | האימות הצליח |
| 1.3.5 | מוודאים שהארגומנט --root-ca-file מוגדר בצורה המתאימה (אוטומטי) |
L1 | האימות הצליח |
| 1.3.6 | מוודאים שהארגומנט RotateKubeletServerCertificate מוגדר ל-true (אוטומטי) |
L2 | האימות הצליח |
| 1.3.7 | מוודאים שהארגומנט --bind-address מוגדר ל-127.0.0.1 (אוטומטי) |
L1 | האימות נכשל |
| 1.4 | מתזמן | ||
| 1.4.1 | מוודאים שהארגומנט --profiling מוגדר ל-false (אוטומטי) |
L1 | האימות הצליח |
| 1.4.2 | מוודאים שהארגומנט --bind-address מוגדר ל-127.0.0.1 (אוטומטי) |
L1 | האימות נכשל |
נקודות השוואה לביקורת
הוראות ספציפיות לביקורת של כל המלצה זמינות כחלק מהמדד הרלוונטי של CIS. עם זאת, יכול להיות שתרצו להפוך חלק מהבדיקות האלה לאוטומטיות כדי לפשט את האימות של אמצעי הבקרה האלה בסביבה שלכם. הכלי הבא יכול לעזור לכם.
ביקורת אוטומטית של CIS Kubernetes Benchmark
אפשר להשתמש בכלי קוד פתוח kube-bench כדי לבדוק את הגדרת האשכול בהשוואה ל-CIS Kubernetes Benchmark.
חשוב לציין את הגרסה המתאימה. לדוגמה:
kube-bench --benchmark BENCHMARK_VERSION
מחליפים את BENCHMARK_VERSION בגרסת CIS Kubernetes Benchmark שבה אתם משתמשים כדי להעריך את האשכול.
כדי להריץ קטעים ספציפיים של CIS Benchmark, כמו master, node או etcd, משתמשים בפקודה run --targets. לדוגמה:
kube-bench run --targets master,node
מידע נוסף זמין במסמכי התיעוד של kube-bench בנושא הרצת kube-bench ופקודות ודגלים.