שילוב של Logging עם Google SecOps

במאמר הזה מוסבר איך לשלב את Cloud Logging עם Google Security Operations.

תרחישים לדוגמה

השילוב Logging משתמש ביכולות של Google SecOps כדי לתמוך בתרחישי השימוש הבאים:

  • אחזור יומנים לצורך חקירה משפטית: הרצת שאילתות מתקדמות כדי למצוא אירועי אבטחה ספציפיים בסביבת Google Cloud במהלך חקירה.

  • איתור אוטומטי של איומים: שימוש ב-playbooks כדי לשלוח שאילתות ליומנים באופן תקופתי ולחפש אינדיקטורים ידועים לפריצה (IoC) או דפוסים חשודים.

לפני שמתחילים

לפני שמגדירים את השילוב של Logging ב-Google SecOps, צריך לבצע את השלבים המקדימים הבאים:

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

  2. בוחרים ומגדירים אחת משיטות האימות הבאות:

    • אפשרות 1: Workload Identity (מומלץ): בשיטה הזו נעשה שימוש באסימוני גישה זמניים לטווח קצר באמצעות התחזות לחשבון שירות, כך שלא צריך לאחסן סודות.

    • אפשרות 2: מפתח JSON של חשבון שירות: השיטה הזו מסתמכת על קובץ מפתח סודי סטטי לטווח ארוך. משתמשים בשיטה הזו רק אם אימות Workload Identity לא זמין בסביבה שלכם.

יצירה של חשבון שירות

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

  1. במסוף Google Cloud , נכנסים אל IAM & Admin > Service Accounts.

    לדף Service accounts

  2. לוחצים על addCreate service account (הוספה של יצירת חשבון שירות).

  3. מזינים שם (לדוגמה, SecOps Logging Integration) ותיאור, ולוחצים על Create and continue (יצירה והמשך).

  4. בשלב Grant this service account access to project (מתן גישה של חשבון השירות הזה לפרויקט), מוסיפים את התפקיד Logs Viewer (צפייה ביומנים) (roles/logging.viewer).

  5. לוחצים על סיום. כתובת האימייל של חשבון השירות הזה משמשת במהלך ההגדרה.

הגדרת פרטי כניסה של Workload Identity

כדי לאמת את השילוב, בוחרים בשיטה הזו או בשיטת מפתח ה-JSON. השיטה המומלצת היא שימוש ב-Workload Identity, כי היא משתמשת

אסימוני גישה זמניים לטווח קצר באמצעות התחזות לחשבון שירות.

זיהוי הזהות הייחודית של המופע

השלב האחרון כדי לאבטח את הגישה הוא לתת למופע של Google SecOps הרשאה להתחזות לחשבון השירות שלכם.

  1. ב-Google SecOps, עוברים אל Content Hub > Response Integrations.

  2. מחפשים את השילוב Cloud Logging ובוחרים אותו. מזינים את כתובת האימייל של חשבון השירות בWorkload Identity Email.

  3. מזינים מזהה פרויקט תקין במזהה פרויקט של מכסת השימוש.

  4. לוחצים על שמירה > בדיקה. הבדיקה צפויה להיכשל.

  5. לוחצים על close_small משמאל לבדיקה ומחפשים בהודעת השגיאה את כתובת האימייל של הזהות שמתחילה ב-gke-init-python@... או ב-soar-python@....

  6. מעתיקים את כתובת האימייל הייחודית.

איך מאשרים את זהות המכונה ב- Google Cloud

הרשאת הזהות הייחודית שאוחזרה מאפשרת התחזות לחשבון שירות, כך שהפלטפורמה יכולה לפעול בשמכם בלי מפתחות סטטיים.

  1. במסוף Google Cloud , נכנסים אל IAM & Admin > Service Accounts.

    לדף Service accounts

  2. בוחרים את חשבון השירות של היעד ועוברים אל Permissions > Grant Access (הרשאות > הענקת גישה).

  3. מדביקים את כתובת האימייל הייחודית בשדה New principals ומקצים את התפקיד Service Account Token Creator (roles/iam.serviceAccountTokenCreator).

הענקת גישה לפרויקט של המכסה

כדי לבצע אימות באמצעות Workload Identity, צריך Quota Project ID כדי לעקוב אחרי השימוש ב-API והחיוב.

  1. במסוף Google Cloud , נכנסים אל IAM & Admin > IAM ובוחרים את הפרויקט שמשמש כמזהה פרויקט המכסה.

    כניסה לדף IAM

  2. מחפשים את חשבון השירות ולוחצים על Edit principal (עריכת הגורם המורשה).

  3. לוחצים על Add another role ובוחרים את התפקיד Service Usage Consumer (roles/serviceusage.serviceUsageConsumer).

  4. לוחצים על Save.

הגדרת מפתח JSON

קבצים של מפתחות סודיים סטטיים עם תוקף ארוך דורשים ניהול ידני. צריך להשתמש בשיטה הזו רק אם פרטי הכניסה של Workload Identity לא זמינים.

  1. במסוף Google Cloud , נכנסים אל IAM & Admin > Service Accounts ובוחרים את חשבון השירות.

    לדף Service accounts

  2. עוברים לכרטיסייה Keys ולוחצים על Add key > Create new key.

  3. בוחרים באפשרות JSON בתור סוג המפתח ולוחצים על Create.

  4. מעתיקים את כל התוכן של הקובץ שהורדתם ומדביקים אותו בקובץ User's Service Account במהלך ההגדרה.

פרמטרים של שילוב

השילוב Logging דורש את הפרמטרים הבאים:

פרמטר תיאור
API Root

זה שינוי אופציונלי.

כתובת ה-URL הבסיסית של Cloud Logging API (לדוגמה, https://logging.googleapis.com).

User's Service Account

זה שינוי אופציונלי.

התוכן המלא של קובץ ה-JSON של מפתח חשבון השירות.

הפרמטר הזה רלוונטי רק אם אתם מבצעים אימות באמצעות מפתח JSON.

Workload Identity Email

זה שינוי אופציונלי.

כתובת האימייל של הלקוח בחשבון השירות.

הפרמטר הזה נדרש רק אם מבצעים אימות באמצעות פרטי כניסה של Workload Identity.

Project ID

זה שינוי אופציונלי.

מזהה הפרויקט שבו רוצים להשתמש בשילוב.

אם לא מציינים ערך, השילוב מאחזר את המזהה מפרטי הכניסה של חשבון השירות.

Quota Project ID

זה שינוי אופציונלי.

מזהה הפרויקט שמשמש לחיוב ולשימוש ב-API.

הפרמטר הזה הוא חובה כשמבצעים אימות באמצעות פרטי כניסה של Workload Identity.

Organization ID

זה שינוי אופציונלי.

מזהה הארגון שמשמש להגדרת היקף השאילתות.

Verify SSL

זה שינוי אופציונלי.

אם האפשרות הזו נבחרה, המערכת תאמת את אישור ה-SSL כשתתחבר לשרת הרישום.

ההגדרה הזו מופעלת כברירת מחדל.

הוראות להגדרת שילוב ב-Google SecOps מופיעות במאמר הגדרת שילובים.

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

פעולות

מידע נוסף על פעולות זמין במאמרים איך מגיבים לפעולות בהמתנה ממרכז העבודה ואיך מבצעים פעולה ידנית.

ביצוע שאילתה

משתמשים בפעולה Execute Query כדי להריץ שאילתות מותאמות אישית ב-Logging.

הפעולה הזו לא מופעלת בישויות של Google SecOps.

הוספת נתונים לפעולה

הפעולה Execute Query (הפעלת שאילתה) דורשת את הפרמטרים הבאים:

פרמטר תיאור
Project ID אופציונלי

מזהה הפרויקט שבו רוצים להשתמש בשילוב.

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

Organization ID אופציונלי

מזהה הארגון לשימוש בשילוב.

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

Query חובה

שאילתה למציאת היומנים.

Time Frame אופציונלי

תקופה שממנה יאוחזרו התוצאות.

אם בוחרים באפשרות Custom, צריך להגדיר גם את הפרמטר Start Time.

הערכים האפשריים הם:

  • Last Hour
  • Last 6 Hours
  • Last 24 Hours
  • Last Week
  • Last Month
  • Custom
ערך ברירת המחדל הוא Last Hour.
Start Time אופציונלי

שעת ההתחלה לאחזור התוצאות.

חובה לכלול את הפרמטר הזה אם בחרתם באפשרות Custom בפרמטר Time Frame.

כדי להגדיר את הפרמטר הזה, צריך להשתמש בפורמט ISO 8601.

End Time אופציונלי

שעת הסיום לאחזור התוצאות.

אם לא מגדירים ערך לפרמטר הזה ובוחרים באפשרות Custom לפרמטר Time Frame, הפעולה משתמשת בשעה הנוכחית כשעת הסיום.

כדי להגדיר את הפרמטר הזה, צריך להשתמש בפורמט ISO 8601.

Max Results To Return אופציונלי

המספר המקסימלי של תוצאות שיוחזרו.

ערך ברירת המחדל הוא 50.

פלטים של פעולות

הפעולה Execute Query מספקת את התוצאות הבאות:

סוג פלט הפעולה זמינות
קיר המארז לא זמין
קישור ל-Case wall לא זמין
טבלת קיר עם תושבת לא זמין
טבלת העשרה לא זמין
תוצאה בפורמט JSON יש גישה
הודעות פלט יש גישה
תוצאת הסקריפט יש גישה
תוצאה בפורמט JSON

בדוגמה הבאה מתואר פלט תוצאת ה-JSON שמתקבל כשמשתמשים בפעולה Execute Query:

[{
    "protoPayload": {
        "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
        "authenticationInfo": {
            "principalEmail": "system:clouddns"
        },
        "authorizationInfo": [
            {
                "granted": true,
                "permission": "io.k8s.coordination.v1.leases.update",
                "resource": "coordination.k8s.io/v1/namespaces/kube-system/leases/clouddns-lock"
            }
        ],
        "methodName": "io.k8s.coordination.v1.leases.update",
        "requestMetadata": {
            "callerIp": "192.0.2.6",
            "callerSuppliedUserAgent": "clouddns-leader-election"
        },
        "resourceName": "coordination.k8s.io/v1/namespaces/kube-system/leases/clouddns-lock",
        "serviceName": "k8s.io",
        "status": {
            "code": 0
        }
    },
    "insertId": "ID",
    "resource": {
        "type": "k8s_cluster",
        "labels": {
            "cluster_name": "CLUSTER_NAME",
            "project_id": "PROJECT_ID",
            "location": "us-central1"
        }
    },
    "timestamp": "2024-09-18T09:46:38.647428Z",
    "labels": {
        "authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"system:clouddns\" of ClusterRole \"system:clouddns-role\" to User \"system:clouddns\"",
        "authorization.k8s.io/decision": "allow"
    },
    "logName": "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity",
    "operation": {
        "id": "ID",
        "producer": "k8s.io",
        "first": true,
        "last": true
    },
    "receiveTimestamp": "2024-09-18T09:46:39.063264993Z"
}]
הודעות פלט

הפעולה Execute Query (ביצוע שאילתה) מספקת את הודעות הפלט הבאות:

הודעת הפלט תיאור ההודעה

Successfully executed query "QUERY" in Cloud Logging.

No results were found for the provided query.

הפעולה הסתיימה בהצלחה.
Error executing action "Execute Query". Reason: ERROR_REASON

הפעולה נכשלה.

צריך לבדוק את החיבור לשרת, את פרמטרי הקלט או את פרטי הכניסה.

תוצאת הסקריפט

בטבלה הבאה מפורטים הערכים של פלט התוצאות של הסקריפט כשמשתמשים בפעולה Execute Query:

שם התוצאה של הסקריפט ערך
is_success True או False

פינג

משתמשים בפעולה Ping כדי לבדוק את הקישוריות ל-Logging.

הפעולה הזו לא מופעלת בישויות של Google SecOps.

הוספת נתונים לפעולה

אין.

פלטים של פעולות

הפעולה Ping מספקת את הפלטים הבאים:

סוג פלט הפעולה זמינות
קיר המארז לא זמין
קישור ל-Case wall לא זמין
טבלת קיר עם תושבת לא זמין
טבלת העשרה לא זמין
תוצאה בפורמט JSON לא זמין
הודעות פלט יש גישה
תוצאת הסקריפט יש גישה
הודעות פלט

הפעולה Ping מספקת את הודעות הפלט הבאות:

הודעת הפלט תיאור ההודעה
Successfully connected to the Cloud Logging server with the provided connection parameters! הפעולה הסתיימה בהצלחה.
Failed to connect to the Cloud Logging server! Error is ERROR_REASON

הפעולה נכשלה.

צריך לבדוק את החיבור לשרת, את פרמטרי הקלט או את פרטי הכניסה.

תוצאת הסקריפט

בטבלה הבאה מפורטים הערכים של פלט התוצאה של הסקריפט כשמשתמשים בפעולה Ping:

שם התוצאה של הסקריפט ערך
is_success True או False

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.