בדף הזה מוסבר איך להפעיל יומני ביקורת מפורטים של מערכת ההפעלה בצמתים של Google Kubernetes Engine שמופעלת בהם מערכת הפעלה שמותאמת לקונטיינרים. בדף הזה מוסבר גם איך להגדיר סוכן Logging של fluent-bit כדי לשלוח יומנים ל-Cloud Logging. הפעלת יומנים מפורטים יכולה לספק מידע חשוב על מצב האשכול ועומסי העבודה, כמו הודעות שגיאה, ניסיונות התחברות והפעלות של קבצים בינאריים. אתם יכולים להשתמש במידע הזה כדי לנפות באגים בבעיות או לבדוק אירועי אבטחה.
הפעלת רישום ביומן של auditd ב-Linux לא נתמכת באשכולות GKE Autopilot, כי Google מנהלת את הצמתים ואת המכונות הווירטואליות (VM) הבסיסיות.
הדף הזה מיועד למומחי אבטחה שבודקים ומנתחים יומני אבטחה. המידע הזה יעזור לכם להבין את הדרישות והמגבלות של יומני מערכת ההפעלה המפורטים, וידריך אתכם בהטמעה שלהם כשתפעילו אותם בצומתי GKE. למידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloud , קראו את המאמר תפקידים ומשימות נפוצים של משתמשי GKE.
לפני שקוראים את הדף הזה, חשוב לוודא שמכירים את יומני הביקורת של מערכת ההפעלה Linux.
רישום ביומן של ביקורת במערכת ההפעלה שונה מיומני הביקורת של Cloud ומיומני הביקורת של Kubernetes.
סקירה כללית
כדי לאסוף יומנים מכל צומת באשכול, משתמשים ב-DaemonSet שמריץ בדיוק Pod אחד בכל צומת באשכול שבו ה-DaemonSet עומד בדרישות לתזמון. ה-Pod הזה מגדיר את דמון הרישום ביומן auditd במארח, ומגדיר את סוכן Logging לשליחת היומנים אל Logging או אל כל שירות אחר להזנת יומנים.
הגדרה: ביקורת מתבצעת אחרי אירוע, והיא אמצעי אבטחה רטרוספקטיבי. יומני auditd לבדם כנראה לא מספיקים לביצוע ניתוח פורנזי של האשכול. כדאי לחשוב איך הכי טוב להשתמש ברישום ביומן של auditd כחלק מאסטרטגיית האבטחה הכוללת.
מגבלות
מנגנוני הרישום ביומן שמתוארים בדף הזה פועלים רק בצמתים שמופעלת בהם מערכת הפעלה שמותאמת לקונטיינרים באשכולות GKE Standard.
איך פועל ה-DaemonSet של הרישום ביומן
בקטע הזה מוסבר איך פועל ה-DaemonSet של רישום ביומן לדוגמה, כדי שתוכלו להגדיר אותו בהתאם לצרכים שלכם. בקטע הבא מוסבר איך לפרוס את ה-DaemonSet.
המניפסט לדוגמה מגדיר DaemonSet, ConfigMap ומרחב שמות כדי להכיל אותם.
ה-DaemonSet פורס Pod לכל צומת באשכול. ה-Pod מכיל שני קונטיינרים. הראשון הוא init container שמתחיל את שירות cloud-audit-setup systemd שזמין בצמתים של מערכת הפעלה שמותאמת לקונטיינרים.
הקונטיינר השני, cos-auditd-fluent-bit, מכיל מופע של fluent-bit שמוגדר לאיסוף יומני הביקורת של Linux מיומן הצמתים ולייצוא שלהם ל-Cloud Logging.
הדוגמה של DaemonSet לרישום ביומן מתעדת את האירועים הבאים:
auditdשינויים בהגדרות המערכת- בדיקות הרשאות של AppArmor
-
execve(),socket(),setsockopt()ו-mmap()הפעלות - חיבורים לרשת
- התחברויות של משתמשים
- סשן SSH וכל שאר ה-TTY (כולל סשנים של
kubectl exec -t)
הגדרת DaemonSet של רישום ביומן
מגדירים את DaemonSet של רישום ביומן באמצעות ConfigMap,
cos-auditd-fluent-bit-config. בדוגמה שמופיעה כאן, יומני הביקורת נשלחים ל-Logging, אבל אפשר להגדיר אותה כך שהיומנים יישלחו ליעדים אחרים.
נפח היומנים שנוצרים על ידי auditd יכול להיות גדול מאוד, ועלול לגרום לעלויות נוספות כי הוא צורך משאבי מערכת ושולח יותר יומנים מהגדרת ברירת המחדל של הרישום ביומן. אפשר להגדיר מסננים כדי לנהל את נפח הרישום:
- אפשר להגדיר מסננים ב-
cos-auditd-fluent-bit-configConfigMap כדי שנתונים מסוימים לא יתועדו. למידע נוסף, קראו את המסמכים של fluent-bit בנושא Grep, Modify, Record Modifier ומסננים אחרים. - אפשר גם להגדיר את Logging כך שיסנן יומנים נכנסים. לפרטים נוספים, קראו את המאמר הגדרה וניהול של אובייקטים מסוג sink.
פריסת ה-DaemonSet של הרישום ביומן
אפשר להשתמש באשכול קיים או ליצור אשכול חדש.
מורידים את המניפסטים לדוגמה:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/troubleshooting/os-audit/cos-auditd-logging.yaml > cos-auditd-logging.yamlעורכים את קובצי המניפסט לדוגמה בהתאם לצרכים שלכם. בקטע הקודם מוסבר איך DaemonSet פועל. שימו לב שהתמונה
fluent-bitשמשמשת במניפסט לדוגמה הזה היא למטרות הדגמה בלבד. מומלץ להחליף את התמונה בתמונה ממקור מבוקר עם תקציר SHA-256.מאתחלים משתנים נפוצים:
export CLUSTER_NAME=CLUSTER_NAME export CLUSTER_LOCATION=COMPUTE_REGIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
COMPUTE_REGION: האזור ב-Compute Engine שבו נמצא האשכול. במקום זאת, משתמשים באזור עבור אשכולות אזוריים.
-
פורסים את מרחב השמות, DaemonSet ו-ConfigMap של הרישום ביומן:
envsubst '$CLUSTER_NAME,$CLUSTER_LOCATION' < cos-auditd-logging.yaml \ | kubectl apply -f -מוודאים שה-Pods של הרישום ביומן התחילו. אם הגדרתם מרחב שמות שונה במניפסטים, צריך להחליף את cos-auditd בשם של מרחב השמות שבו אתם משתמשים.
kubectl get pods --namespace=cos-auditdאם ה-Pods פועלים, הפלט נראה כך:
NAME READY STATUS RESTARTS AGE cos-auditd-logging-g5sbq 1/1 Running 0 27s cos-auditd-logging-l5p8m 1/1 Running 0 27s cos-auditd-logging-tgwz6 1/1 Running 0 27sPod אחד נפרס בכל צומת באשכול, ובמקרה הזה יש באשכול שלושה צמתים.
עכשיו אפשר לגשת ליומני הביקורת ב-Logging. ב-Logs Explorer, מסננים את התוצאות באמצעות השאילתה הבאה:
LOG_ID("linux-auditd") resource.labels.cluster_name = "CLUSTER_NAME" resource.labels.location = "COMPUTE_REGION"לחלופין, אפשר להשתמש ב-CLI של gcloud (משתמשים ב-
--limitכי קבוצת התוצאות יכולה להיות גדולה מאוד):gcloud logging read --limit=100 "LOG_ID("linux-auditd") AND resource.labels.cluster_name = "${CLUSTER_NAME}" AND resource.labels.location = "${CLUSTER_LOCATION}""
ייצוא היומנים
במאמר הגדרה וניהול של אובייקטים מסוג sink מוסבר איך לנתב את היומנים ליעדים נתמכים.
השבתת היומנים
כדי להשבית את הרישום של auditd ביומן בצמתים, מוחקים את DaemonSet של רישום ביומן ואז פורסים את cos-auditd-logging-disable DaemonSet כדי להחזיר את השינויים בשירות systemd בכל צומת. אחרי שפורסים את DaemonSet הזה, אי אפשר להפעיל את auditd רישום ביומן, אלא אם יוצרים מחדש את הצמתים.
מוחקים את ה-DaemonSet המקורי של רישום ביומן ואת המשאבים שקשורים אליו:
kubectl delete daemonset cos-auditd-logging -n cos-auditd kubectl delete configmap fluent-bit-config -n cos-auditd # The namespace will be deleted by the cleanup daemonset's namespace definitionמחילים את ה-DaemonSet של cos-auditd-logging-disable לניקוי:
kubectl apply -f 'https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/troubleshooting/os-audit/cos-auditd-logging-disable.yaml'מוודאים שה-Pods של
cleanup-auditdפועלים בכל הצמתים:kubectl get pods -n cos-auditd -l name=cleanup-auditd -wמחכים עד שכל ה-Pods יציגו
Running.אחרי שרכיבי ה-Pod של הניקוי פועלים, מריצים את השאילתות מהקטע פריסת ה-DaemonSet של הרישום ביומן כדי לוודא שלא נוצרים יומנים חדשים של
linux-auditd. לדוגמה, אפשר להשתמש בפקודה הבאה ב-CLI של gcloud:gcloud logging read --limit=10 --freshness="5m" \ "LOG_ID(\"linux-auditd\") AND \ resource.labels.cluster_name = \"${CLUSTER_NAME}\" AND \ resource.labels.location = \"${CLUSTER_LOCATION}\""הפקודה הזו בודקת את היומנים בחמש הדקות האחרונות. אם הניקוי הצליח, הפלט ריק.
באופן דומה, כשמשתמשים ב-Cloud Explorer עם אותו מסנן, לא אמורות להופיע רשומות חדשות ביומן אחרי זמן הניקוי.
מוחקים את ה-DaemonSet והמרחב השמות של הניקוי:
kubectl delete -f cleanup-auditd-daemonset.yamlהפקודה הזו תמחק גם את ה-DaemonSet וגם את מרחב השמות
cos-auditd.
המאמרים הבאים
- כדי להתחיל להשתמש בפורנזיקה בענן, מומלץ לצפות בסרטון Cloud Forensics 101.
- מידע נוסף על רישום ביומן ביקורת של Kubernetes ועל מדיניות הביקורת.
- קריאת הסקירה הכללית על אבטחה ב-Kubernetes Engine
- מידע על יומני ביקורת של Cloud