רישום ביומן ביקורת

סקירה כללית

במאמר הזה מוסבר איך להשתמש ביומני הביקורת של 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 בפרויקט של יומן הביקורת.

הפעלת Anthos Audit API

יצירת חשבון שירות ליומני ביקורת בענן

כבר יש לכם חשבונות שירות שיצרתם לשימוש ב-Google Distributed Cloud. כדי להשתמש בתכונה הזו, צריך ליצור חשבון שירות נוסף שנקרא חשבון שירות ליומני ביקורת.

  1. יוצרים את חשבון השירות ליומן הביקורת:

    gcloud iam service-accounts create audit-logging-service-account
  2. יוצרים קובץ מפתח 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 היא כתובת האימייל של חשבון השירות.

  3. שומרים את audit-logging-key.json בתחנת העבודה של האדמין באותו מיקום שבו נמצאים מפתחות חשבונות השירות האחרים.

אזהרה לפני שמוחקים את חשבון השירות הזה, חשוב להחליף אותו בחשבון השירות החדש בהגדרת האשכול. התהליך דומה להפעלת יומני ביקורת של Cloud עבור אשכול משתמשים קיים. אם שכחתם לעשות את זה, אתם יכולים לפעול לפי המדריך לניקוי.

יצירת אשכול אדמין עם יומני ביקורת של Cloud מופעלים

אפשר להפעיל את יומני הביקורת של Cloud עבור אשכול אדמין רק כשיוצרים את אשכול האדמין בפעם הראשונה. אי אפשר לשנות אשכול אדמין קיים כדי להפעיל את Cloud Audit Logs.

  1. אפשר להיעזר במאמר בנושא יצירת אשכול אדמין.

  2. בקובץ התצורה של אשכול האדמין, ממלאים את הקטע cloudAuditLogging.

  3. מגדירים את cloudAuditLogging.projectID למזהה של פרויקט יומני הביקורת.

  4. מגדירים את cloudAuditLogging.clusterLocation לאזור Google Cloud שבו רוצים לאחסן את יומני הביקורת. כדי לשפר את זמן האחזור, מומלץ לבחור אזור שקרוב למרכז הנתונים המקומי.

  5. מגדירים את cloudAuditLogging.serviceAccountKeyPath לנתיב של קובץ מפתח ה-JSON של חשבון השירות שלכם לרישום ביומן הביקורת.

לדוגמה:

cloudAuditLogging:
  projectID: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

ממשיכים ביצירת האשכול כרגיל.

יצירת אשכול משתמשים עם יומני ביקורת של Cloud

  1. מידע נוסף מופיע במאמר בנושא יצירת אשכול משתמשים.

  2. בקובץ התצורה של אשכול המשתמשים, ממלאים את הקטע cloudAuditLogging.

  3. מגדירים את cloudAuditLogging.projectID למזהה של פרויקט יומני הביקורת.

  4. מגדירים את cloudAuditLogging.clusterLocation לאזור Google Cloud שבו רוצים לאחסן את יומני הביקורת. כדי לשפר את זמן האחזור, מומלץ לבחור אזור שקרוב למרכז הנתונים המקומי.

  5. מגדירים את cloudAuditLogging.serviceAccounKeyPath לנתיב של קובץ מפתח ה-JSON של חשבון השירות של יומני הביקורת של Cloud.

  6. מוודאים שמילאתם את הקטע 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:

  1. מוסיפים קטע gkeConnect אל קובץ התצורה של אשכול המשתמשים. לדוגמה:

    gkeConnect:
      projectID: "my-project"
      registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
    
  2. מעדכנים את האשכול:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

אחרי שרושמים את אשכול המשתמשים, פועלים לפי השלבים הבאים כדי להפעיל את יומני הביקורת בענן:

  1. ממלאים את הקטע cloudAuditLogging בקובץ התצורה של אשכול המשתמשים. לפרטים על השדות הספציפיים, אפשר לעיין במאמר בנושא יצירת אשכול משתמשים עם יומני ביקורת של Cloud. הערך projectID במקטע cloudAuditLogging חייב להיות זהה לערך במקטע gkeConnect.

  2. מעדכנים את האשכול:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

השבתת יומני ביקורת ב-Cloud עבור אשכול משתמשים קיים

  1. בקטע cloudAuditLogging בקובץ התצורה של אשכול המשתמשים, מוחקים את השורה cloudAuditLogging.

  2. מעדכנים את אשכול המשתמשים:

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

המסוף

  1. במסוף Google Cloud , נכנסים לדף Logs Explorer בתפריט Logging.

    כניסה לדף Logs Explorer

    אם נפתח הדף Legacy Logs Viewer, בוחרים באפשרות Upgrade to the new Logs Explorer מהתפריט הנפתח Upgrade.

  2. לוחצים על השדה Query כדי להזין שאילתה.

  3. מזינים את השאילתה הבאה בשדה Query:

    resource.type="k8s_cluster"
    logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

  4. לוחצים על Run query (הפעלת שאילתה) כדי להציג את כל יומני הביקורת מאשכולות שהוגדרו להתחבר לפרויקט הזה.

gcloud

  1. מציגים את שני הערכים הראשונים ביומן פעילות האדמין של הפרויקט שרלוונטיים לסוג המשאב 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
  1. מחליפים את PROJECT_ID במזהה הפרויקט.

בפלט מוצגות שתי רשומות ביומן. שימו לב שבכל רשומה ביומן, הערך בשדה logName הוא projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity והערך בשדה protoPayload.serviceName שווה לערך בשדה anthosgke.googleapis.com.

מדיניות ביקורת

מדיניות הביקורת של Kubernetes מגדירה כללים לגבי האירועים שמתועדים כרשומות ביומן, ומציינת אילו נתונים צריכים להיכלל ברשומות ביומן. ההתנהגות של יומני הביקורת של Cloud נקבעת על ידי מדיניות סטטית של יומני ביקורת ב-Kubernetes. אין תמיכה בשינוי המדיניות הזו כדי לשנות את אופן הפעולה של יומני הביקורת ב-Cloud.