סקירה כללית
במאמר הזה מוסבר איך להשתמש ביומני הביקורת של Cloud ב-Google Distributed Cloud (תוכנה בלבד). ב-Google Distributed Cloud נעשה שימוש ביומני ביקורת של Kubernetes, שכוללים רשומה כרונולוגית של קריאות שבוצעו לשרת Kubernetes API של אשכול. יומני ביקורת שימושיים לחקירת בקשות API חשודות ולאיסוף נתונים סטטיסטיים. מידע על יומני הביקורת של GKE On-Prem API זמין במאמר יומני ביקורת של Cloud API.
מידע על יומני ביקורת של Cloud
יומני הביקורת נכתבים ביומני הביקורת של Cloud ב Google Cloud פרויקט. יש כמה יתרונות לכתיבה ליומני הביקורת של Cloud לעומת כתיבה לדיסק או שמירת יומנים במערכת רישום מקומית:
- אפשר לרכז את יומני הביקורת של כל האשכולות.
- אי אפשר לשנות רשומות ביומני הביקורת של Cloud.
- רשומות ביומני הביקורת של Cloud נשמרות למשך 400 ימים.
- התכונה Cloud Audit Logs כלולה במחיר של Google Distributed Cloud.
- אתם יכולים להגדיר את Google Distributed Cloud כך שיומנים ייכתבו לדיסק או ליומני ביקורת בענן.
רישום ביומן ביקורת שמבוסס על דיסק
כברירת מחדל, יומני הביקורת נכתבים לדיסק קבוע, כך שהפעלות מחדש ושדרוגים של מכונות וירטואליות לא גורמים להיעלמות של היומנים.
אם אשכול מתקדם לא מופעל:
Google Distributed Cloud שומר עד 12GB של רשומות ביומן הביקורת.
אם אשכול מתקדם מופעל
Google Distributed Cloud שומר עד 1GB של רשומות ביומן הביקורת.
יומני ביקורת של Cloud
אם מפעילים את יומני הביקורת של Cloud עבור אשכול, רשומות של יומני הביקורת Admin Activity משרת ה-API של Kubernetes באשכול נשלחות אל Google Cloud, באמצעות הפרויקט Google Cloud שמצוין בשדהcloudAuditLogging.projectID בקובץ התצורה של האשכול.
הפרויקט הזה נקרא Google Cloud פרויקט לרישום ביומן הביקורת.
פרויקט יומני הביקורת צריך להיות זהה לפרויקט המארח של הצי.
כדי לשמור בזיכרון הזמני ולכתוב רשומות ביומן הביקורת של Cloud, Google Distributed Cloud פורס audit-proxy Pod באשכול הניהול.
הרכיב הזה זמין גם כקונטיינר sidecar באשכולות משתמשים.
מגבלות
אלו המגבלות שחלות על יומני הביקורת של Cloud:
- אין תמיכה ברישום ביומן של גישה לנתונים (בקשות get, list, watch).
- אין תמיכה בשינוי מדיניות הביקורת של Kubernetes.
- יומני הביקורת של Cloud לא עמידים להפסקות ארוכות ברשת. אם אי אפשר לייצא את רשומות היומן אל Google Cloud, הן נשמרות במטמון במאגר דיסק של 10GB. אם המאגר הזה מתמלא, הרשומות הכי ישנות נמחקות.
- פרויקט אחד יכול לתמוך בשימוש ביומני ביקורת של Cloud עם עד 1,000 חשבונות שירות. יכולים להיות כמה אשכולות שמשתמשים באותו חשבון שירות.
הפעלת Anthos Audit API
מפעילים את Anthos Audit API בפרויקט של יומן הביקורת.
יצירת חשבון שירות ליומני ביקורת בענן
כבר יש לכם חשבונות שירות שיצרתם לשימוש ב-Google Distributed Cloud. כדי להשתמש בתכונה הזו, צריך ליצור חשבון שירות נוסף שנקרא חשבון שירות ליומני ביקורת.
יוצרים את חשבון השירות ליומן הביקורת:
gcloud iam service-accounts create audit-logging-service-account
יוצרים קובץ מפתח JSON לחשבון השירות של Cloud Audit Logs:
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
כאשר AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL היא כתובת האימייל של חשבון השירות.
שומרים את
audit-logging-key.jsonבתחנת העבודה של האדמין באותו מיקום שבו נמצאים מפתחות חשבונות השירות האחרים.
אזהרה לפני שמוחקים את חשבון השירות הזה, חשוב להחליף אותו בחשבון השירות החדש בהגדרת האשכול. התהליך דומה להפעלת יומני ביקורת של Cloud עבור אשכול משתמשים קיים. אם שכחתם לעשות את זה, אתם יכולים לפעול לפי המדריך לניקוי.
יצירת אשכול אדמין עם יומני ביקורת של Cloud מופעלים
אפשר להפעיל את יומני הביקורת של Cloud עבור אשכול אדמין רק כשיוצרים את אשכול האדמין בפעם הראשונה. אי אפשר לשנות אשכול אדמין קיים כדי להפעיל את Cloud Audit Logs.
אפשר להיעזר במאמר בנושא יצירת אשכול אדמין.
בקובץ התצורה של אשכול האדמין, ממלאים את הקטע
cloudAuditLogging.מגדירים את
cloudAuditLogging.projectIDלמזהה של פרויקט יומני הביקורת.מגדירים את
cloudAuditLogging.clusterLocationלאזור Google Cloud שבו רוצים לאחסן את יומני הביקורת. כדי לשפר את זמן האחזור, מומלץ לבחור אזור שקרוב למרכז הנתונים המקומי.מגדירים את
cloudAuditLogging.serviceAccountKeyPathלנתיב של קובץ מפתח ה-JSON של חשבון השירות שלכם לרישום ביומן הביקורת.
לדוגמה:
cloudAuditLogging:
projectID: "my-project"
clusterLocation: "us-west1"
serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"
ממשיכים ביצירת האשכול כרגיל.
יצירת אשכול משתמשים עם יומני ביקורת של Cloud
מידע נוסף מופיע במאמר בנושא יצירת אשכול משתמשים.
בקובץ התצורה של אשכול המשתמשים, ממלאים את הקטע
cloudAuditLogging.מגדירים את
cloudAuditLogging.projectIDלמזהה של פרויקט יומני הביקורת.מגדירים את
cloudAuditLogging.clusterLocationלאזור Google Cloud שבו רוצים לאחסן את יומני הביקורת. כדי לשפר את זמן האחזור, מומלץ לבחור אזור שקרוב למרכז הנתונים המקומי.מגדירים את
cloudAuditLogging.serviceAccounKeyPathלנתיב של קובץ מפתח ה-JSON של חשבון השירות של יומני הביקורת של Cloud.מוודאים שמילאתם את הקטע
gkeConnectושהערך שלgkeConnect.projectIDזהה לערך שלcloudAuditLogging.projectID.
לדוגמה:
gkeConnect:
projectID: "my-project"
registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
cloudAuditLogging:
projectID: "my-project"
clusterLocation: "us-west1"
serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"
ממשיכים ביצירת האשכול כרגיל.
הפעלת יומני ביקורת בענן עבור אשכול משתמשים קיים
אפשר להפעיל את Cloud Audit Logs רק ב Google Cloud פרויקט שבו רשום אשכול המשתמשים.
אם אשכול משתמשים קיים לא רשום, צריך לרשום אותו לפי השלבים הבאים לפני שמפעילים את יומני הביקורת של Cloud:
מוסיפים קטע
gkeConnectאל קובץ התצורה של אשכול המשתמשים. לדוגמה:gkeConnect: projectID: "my-project" registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"מעדכנים את האשכול:
gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
אחרי שרושמים את אשכול המשתמשים, פועלים לפי השלבים הבאים כדי להפעיל את יומני הביקורת בענן:
ממלאים את הקטע
cloudAuditLoggingבקובץ התצורה של אשכול המשתמשים. לפרטים על השדות הספציפיים, אפשר לעיין במאמר בנושא יצירת אשכול משתמשים עם יומני ביקורת של Cloud. הערךprojectIDבמקטעcloudAuditLoggingחייב להיות זהה לערך במקטעgkeConnect.מעדכנים את האשכול:
gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
השבתת יומני ביקורת ב-Cloud עבור אשכול משתמשים קיים
בקטע
cloudAuditLoggingבקובץ התצורה של אשכול המשתמשים, מוחקים את השורהcloudAuditLogging.מעדכנים את אשכול המשתמשים:
gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG]
גישה ליומני ביקורת
רישום ביומן ביקורת שמבוסס על דיסק
אפשר למצוא את יומני הביקורת של אשכול האדמין בצמתים של מישור הבקרה (control-plane) בקטע /var/log/kube-audit/kube-apiserver-audit.log. יומני הביקורת של אשכול המשתמשים נמצאים ב-PersistentVolumeClaim בשם kube-audit-kube-apiserver-0. אתם יכולים לגשת לנתונים האלה ב-Pods שלכם דרך volumes רשומות:
מוסיפים את הרשומה הזו לאשכול הניהול:
volumes:
- name: kube-audit
hostPath:
path: /var/log/kube-audit
type: ""
מוסיפים את הרשומה הזו לאשכול המשתמשים:
volumes:
- name: kube-audit
persistentVolumeClaim:
claimName: kube-audit-kube-apiserver-0
כדי לתזמן את ה-Pod שלכם בצומת המתאים של אשכול האדמין (ורק בצומת הזה), תצטרכו להוסיף את הקטעים nodeSelector ו-tolerations למפרט ה-Pod, כך:
spec:
nodeSelector:
node-role.kubernetes.io/master: ''
tolerations:
- key: node-role.kubernetes.io/master
value: ""
effect: NoSchedule
בקטע user cluster, מגדירים את namespace כשם של אשכול משתמשים, ואז מגדירים את
nodeName לאותו ערך כמו kube-apiserver-0:
spec:
nodeName: NODE_NAME
כדי לציין את nodeName של kube-apiserver-0, מריצים את הפקודה הבאה:
kubectl get pod kube-apiserver-0 -n USER_CLUSTER_NAME --kubeconfig kubeconfig -o jsonpath='{.spec.nodeName}'
שם הקובץ של כל יומן ביקורת כולל חותמת זמן שמציינת מתי בוצע סיבוב של הקובץ. הקובץ מכיל יומני ביקורת עד התאריך והשעה האלה.
גישה ליומני ביקורת של Cloud
המסוף
במסוף Google Cloud , נכנסים לדף Logs Explorer בתפריט Logging.
אם נפתח הדף Legacy Logs Viewer, בוחרים באפשרות Upgrade to the new Logs Explorer מהתפריט הנפתח Upgrade.
לוחצים על השדה Query כדי להזין שאילתה.
מזינים את השאילתה הבאה בשדה Query:
resource.type="k8s_cluster" logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"מחליפים את
PROJECT_IDבמזהה הפרויקט.לוחצים על Run query (הפעלת שאילתה) כדי להציג את כל יומני הביקורת מאשכולות שהוגדרו להתחבר לפרויקט הזה.
gcloud
- מציגים את שני הערכים הראשונים ביומן פעילות האדמין של הפרויקט שרלוונטיים לסוג המשאב
k8s_cluster:
gcloud logging read \
'logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" \
AND resource.type="k8s_cluster" \
AND protoPayload.serviceName="anthosgke.googleapis.com" ' \
--limit 2 \
--freshness 300d
- מחליפים את
PROJECT_IDבמזהה הפרויקט.
בפלט מוצגות שתי רשומות ביומן. שימו לב שבכל רשומה ביומן, הערך בשדה logName הוא projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity והערך בשדה protoPayload.serviceName שווה לערך בשדה anthosgke.googleapis.com.
מדיניות ביקורת
מדיניות הביקורת של Kubernetes מגדירה כללים לגבי האירועים שמתועדים כרשומות ביומן, ומציינת אילו נתונים צריכים להיכלל ברשומות ביומן. ההתנהגות של יומני הביקורת של Cloud נקבעת על ידי מדיניות סטטית של יומני ביקורת ב-Kubernetes. אין תמיכה בשינוי המדיניות הזו כדי לשנות את אופן הפעולה של יומני הביקורת ב-Cloud.