שיטות עבודה מומלצות לאבטחת Kubernetes

Kubernetes חוללה מהפכה בתזמור ובניהול של קונטיינרים בקנה מידה גדול, והפכה לתקן דה-פקטו לפריסת אפליקציות cloud-native, אך הארכיטקטורה המבוזרת שלה והמורכבות המובנית שלה מציגות משטח תקיפה מורחב באופן משמעותי בהשוואה למודלים מסורתיים של פריסה. אשכול Kubernetes טיפוסי כולל עשרות רכיבים מקושרים - API server, etcd, scheduler, controller manager, kubelet, kube-proxy - שלכל אחד מהם פגיעויות פוטנציאליות משלו ודרישות הקשחה ספציפיות. הטבע הדינמי של K8s, שבו pods נוצרים ונהרסים כל הזמן, workloads נודדים בין nodes, ומדיניות רשת חייבת לחול בזמן אמת, הופך את האבטחה לאתגר רב-ממדי הדורש גישה של הגנה לעומק. תצורות ברירת מחדל לא מאובטחות, כגון הרשאות מתירניות יתר על המידה ב-RBAC, היעדר network policies המאפשרות תקשורת בלתי מוגבלת בין pods, קונטיינרים הרצים כ-root עם capabilities privileged, ו-secrets המאוחסנים כטקסט גלוי ב- etcd לא מוצפן, מייצגים וקטורי תקיפה הנפוצים לניצול בסביבות K8s בתצורה לקויה. מאמר זה בוחן שיטות יסוד להקשחת אשכולות Kubernetes, ומכסה בקרת גישה מבוססת תפקידים (RBAC), pod security standards, network policies ל- מיקרו-סגמנטציה, ניהול מאובטח של secrets, admission controllers ל-policy enforcement, ניטור אבטחה ב-runtime עם כלים כגון Falco, ועמידה ב-benchmarks של התעשייה כגון CIS Kubernetes Benchmark, ומספק מפת דרכים מלאה לבנייה ולתפעול של אשכולות Kubernetes מאובטחים בסביבות ייצור.

ארכיטקטורת אבטחה של K8s

לאשכול Kubernetes יש מספר רכיבים קריטיים:

  • Control Plane: API Server, etcd, scheduler, controller manager
  • Nodes: kubelet, kube-proxy, container runtime
  • Add-ons: DNS, dashboard, ingress controllers

RBAC (Role-Based Access Control)

RBAC הוא הבסיס של אבטחת K8s, ושולט במי יכול לגשת למה דרך ה-API server.

תצורת RBAC

      # Role לקריאת pods ב-namespace ספציפי
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
      namespace: production
      name: pod-reader
      rules:
      - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "list"]
      ---
      # RoleBinding משייך את ה-role למשתמש
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
      name: read-pods
      namespace: production
      subjects:
      - kind: User
      name: jane
      apiGroup: rbac.authorization.k8s.io
      roleRef:
      kind: Role
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
      

עקרונות RBAC

  • Least privilege: להעניק רק את ההרשאות הנדרשות
  • להימנע מ-ClusterAdmin: ליצור roles ספציפיים לפי תפקיד
  • Service accounts: לכל pod צריך להיות SA ייעודי
  • Namespace isolation: RoleBindings במקום ClusterRoleBindings

Pod Security

Pod Security Standards

Kubernetes 1.25+ משתמש ב-Pod Security Admission במקום ה-PSPs המיושנים:

  • Privileged: ללא הגבלה, עבור workloads מהימנים
  • Baseline: מגביל באופן מינימלי, מונע הסלמות ידועות
  • Restricted: מוגבל מאוד, עוקב אחר שיטות העבודה המומלצות להקשחה

Security Context

      apiVersion: v1
      kind: Pod
      metadata:
      name: secure-pod
      spec:
      securityContext:
      runAsNonRoot: true
      runAsUser: 1000
      fsGroup: 2000
      seccompProfile:
      type: RuntimeDefault
      containers:
      - name: app
      image: myapp:latest
      securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
      drop:
      - ALL
      

Network Policies

כברירת מחדל, pods יכולים לתקשר באופן חופשי. Network Policies מיישמות סגמנטציה:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: api-allow-from-frontend
      namespace: production
      spec:
      podSelector:
      matchLabels:
      app: api
      policyTypes:
      - Ingress
      ingress:
      - from:
      - podSelector:
      matchLabels:
      app: frontend
      ports:
      - protocol: TCP
      port: 8080
      

ניהול Secrets

  • לעולם אל תקודדו secrets בקוד קשיח: השתמשו ב-Kubernetes Secrets או ב-vaults חיצוניים
  • etcd encryption: הפעילו encryption-at-rest עבור etcd
  • External Secrets Operator: שילוב עם Vault, AWS Secrets Manager
  • סבבו secrets: יישמו רוטציה אוטומטית
  • RBAC עבור secrets: הגבילו מי יכול לקרוא secrets

Image Security

  • Private registries: אל תשתמשו ב-registries ציבוריים בייצור
  • Image scanning: Trivy, Clair, Anchore לסריקת פגיעויות
  • Image signing: Cosign לאימות שלמות
  • Admission controllers: אמתו images לפני הפריסה
  • Distroless images: מזערו את משטח התקיפה

Admission Controllers

  • OPA/Gatekeeper: Policy-as-code עבור compliance
  • Kyverno: ניהול מדיניות נייטיב של Kubernetes
  • ImagePolicyWebhook: אמתו חתימות של images
  • ResourceQuota: הגבילו משאבים לפי namespace
  • LimitRanger: אכפו מגבלות CPU/זיכרון

הקשחת API Server

  • הפעילו audit logging
  • השתמשו ב-TLS לכל התקשורת
  • השביתו anonymous auth
  • יישמו API rate limiting
  • הגבילו את הגישה ל-API server (network ACLs)

Runtime Security

  • Falco: זיהוי איומים ב-runtime עבור K8s
  • Sysdig Secure: הגנת runtime ו-compliance
  • Aqua Security: אבטחת קונטיינרים לאורך כל מחזור החיים

Compliance וביקורת

  • CIS Kubernetes Benchmark: Framework להקשחה
  • kube-bench: בדיקות compliance אוטומטיות של CIS
  • kube-hunter: כלי penetration testing עבור K8s
  • Audit logs: רכזו ב-SIEM לצורך ניתוח

Service Mesh Security

Service meshes (Istio, Linkerd) מוסיפים שכבת אבטחה:

  • mTLS אוטומטי בין pods
  • מדיניות הרשאה fine-grained
  • הצפנת תעבורה in transit
  • Observability ו-auditability

המלצות מסכמות

אבטחת K8s היא אחריות משותפת. יישמו הגנה רב-שכבתית: RBAC, network policies, pod security, ניהול secrets והגנת runtime. השתמשו בכלי compliance אוטומטיים (kube-bench) ונטרו באופן רציף. הכשירו צוותים באבטחת K8s - מורכבות דורשת מומחיות ייעודית.