איסוף יומנים של ניתוח נתוני אבטחה בהתאמה אישית

גרסת מנתח הנתונים: 6.0

נתמך ב:

במאמר הזה מוסבר איך להטמיע נתוני ניתוח אבטחה מותאמים אישית ב-Google Security Operations באמצעות כמה שיטות הטמעה. המדריך הזה מיועד למקורות נתוני אבטחה מותאמים אישית שאין להם מנתח מובנה או סוג יומן מובנה.

ניתוח נתוני אבטחה בהתאמה אישית כולל טלמטריית אבטחה קניינית, יומני אפליקציות בהתאמה אישית, כלי אבטחה פנימיים או כל נתון שקשור לאבטחה ממקורות ללא שילוב מקורי של Google SecOps. אפשר להטמיע את הנתונים האלה כיומנים לא מובנים, ואם רוצים, אפשר לנרמל אותם באמצעות מנתחים מותאמים אישית.

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

חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:

  • מופע של Google SecOps
  • מקור נתוני אבטחה בהתאמה אישית שיכול לייצא יומנים בפורמט JSON,‏ CSV,‏ SYSLOG או בפורמטים מובְנים אחרים
  • גישה לאחד מהפריטים הבאים:
    • ‫מסוף Google Cloud (ליצירת מפתח API ו-GCS)
    • מסוף AWS (ל-S3 או ל-Firehose)
    • Azure Portal (for Azure Blob Storage)
    • לקוח HTTP או אפליקציה שיכולים לשלוח בקשות webhook
  • הרשאות ליצירה ולניהול של פידים ב-Google SecOps

בחירת שיטת ההטמעה

‫Google SecOps תומך בכמה שיטות להוספת נתוני אבטחה בהתאמה אישית. בוחרים את השיטה שהכי מתאימה ליכולות של מקור הנתונים:

שיטת הטמעה תרחיש לדוגמה זמן אחזור מורכבות ההגדרה
Webhook התראות בזמן אמת מאפליקציות שניות נמוכה
Amazon S3 V2 ייצוא באצווה לקטגוריית S3 דקות לשעות בינוני
Google Cloud Storage V2 ייצוא באצווה לקטגוריה של GCS דקות לשעות בינוני
Azure Blob Storage V2 ייצוא בכמות גדולה לאחסון ב-Azure דקות לשעות בינוני
Amazon Data Firehose סטרימינג בזמן אמת מ-AWS שניות גבוהה

אפשרות 1: הטמעה באמצעות webhook (דחיפה בזמן אמת)

משתמשים בשיטה הזו כשאפליקציית האבטחה המותאמת אישית יכולה לשלוח בקשות HTTP POST לנקודת קצה חיצונית.

יצירת פיד של webhook ב-Google SecOps

יצירת הפיד

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, custom-security-analytics-webhook).
  5. בוחרים באפשרות Webhook בתור סוג המקור.
  6. בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
  7. לוחצים על הבא.
  8. מציינים ערכים לפרמטרים הבאים של הקלט:
    • תו מפריד לפיצול: אופציונלי: מזינים תו מפריד כדי לפצל אירועים מרובי שורות. ערכים נפוצים:
      • \n – תו שורה חדשה כמפריד (הנפוץ ביותר ב-NDJSON)
      • אם כל בקשה מכילה אירוע יחיד, אפשר להשאיר את השדה ריק
    • מרחב שמות של נכס: מרחב השמות של הנכס
    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה
  9. לוחצים על הבא.
  10. בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.

יצירה ושמירה של מפתח סודי

אחרי שיוצרים את הפיד, צריך ליצור מפתח סודי לאימות:

  1. בדף הפרטים של הפיד, לוחצים על יצירת מפתח סודי.
  2. בתיבת דו-שיח מוצג המפתח הסודי.
  3. מעתיקים ושומרים את המפתח הסודי באופן מאובטח.

קבלת כתובת ה-URL של נקודת הקצה של הפיד

  1. עוברים לכרטיסייה פרטים של הפיד.
  2. בקטע Endpoint Information, מעתיקים את Feed endpoint URL.
  3. הפורמט של כתובת ה-URL הוא:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    או

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. שומרים את כתובת ה-URL הזו כדי לבצע את השלבים הבאים.

  5. לוחצים על סיום.

יצירת מפתח Google Cloud API

מערכת Google SecOps דורשת מפתח API לצורך אימות. יוצרים מפתח API מוגבל במסוף Google Cloud.

יצירת מפתח API

  1. נכנסים אל הדף Credentials במסוף Google Cloud.
  2. בוחרים את הפרויקט (הפרויקט שמשויך למופע Chronicle).
  3. לוחצים על Create credentials > API key.
  4. מפתח API נוצר ומוצג בתיבת דו-שיח.
  5. לוחצים על Edit API key כדי להגביל את המפתח.

הגבלת מפתח ה-API

  1. בדף ההגדרות API key:
    • שם: מזינים שם תיאורי (לדוגמה, Chronicle Webhook API Key).
  2. בקטע API restrictions (הגבלות על API):
    1. בוחרים באפשרות הגבלת המקש.
    2. בתפריט הנפתח Select APIs (בחירת ממשקי API), מחפשים ובוחרים באפשרות Google SecOps API (או Chronicle API).
  3. לוחצים על Save.
  4. מעתיקים את הערך של מפתח ה-API מהשדה מפתח ה-API בחלק העליון של הדף.
  5. שומרים את מפתח ה-API בצורה מאובטחת.

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

מגדירים את האפליקציה או הסקריפט המותאמים אישית לאבטחה לשליחת בקשות HTTP POST לנקודת הקצה של ה-webhook ב-Chronicle.

יוצרים את כתובת ה-URL של ה-webhook:

  • משלבים את כתובת ה-URL של נקודת הקצה של Chronicle ואת מפתח ה-API:

    <ENDPOINT_URL>?key=<API_KEY>
    

    לדוגמה:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
    

פורמט בקשת HTTP:

  • Method: POST

  • כתובת ה-URL:‏

    <ENDPOINT_URL>?key=<API_KEY>
    
  • כותרות:

    Content-Type: application/json
    x-chronicle-auth: <SECRET_KEY>
    
  • Body (single event):

    {
        "timestamp": "2025-01-15T10:30:00Z",
        "event_type": "authentication",
        "user": "john.doe@example.com",
        "action": "login",
        "result": "success",
        "source_ip": "203.0.113.45",
        "custom_field_1": "value1",
        "custom_field_2": "value2"
    }
    
  • Body (multiple events with newline delimiter):

    {"timestamp": "2025-01-15T10:30:00Z", "event_type": "authentication", "action": "login"}
    {"timestamp": "2025-01-15T10:30:05Z", "event_type": "file_access", "action": "read"}
    {"timestamp": "2025-01-15T10:30:10Z", "event_type": "authentication", "action": "logout"}
    

דוגמאות:

  • דוגמה: סקריפט Python:

    import requests
    import json
    from datetime import datetime
    
    # Configuration
    ENDPOINT_URL = "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate"
    API_KEY = "your-api-key-here"
    SECRET_KEY = "your-secret-key-here"
    
    # Construct full URL
    url = f"{ENDPOINT_URL}?key={API_KEY}"
    
    # Headers
    headers = {
        "Content-Type": "application/json",
        "x-chronicle-auth": SECRET_KEY
    }
    
    # Sample event
    event = {
        "timestamp": datetime.utcnow().isoformat() + "Z",
        "event_type": "custom_security_event",
        "severity": "high",
        "source": "custom_security_tool",
        "message": "Suspicious activity detected",
        "user": "admin@example.com",
        "ip_address": "192.168.1.100"
    }
    
    # Send request
    response = requests.post(url, headers=headers, data=json.dumps(event))
    
    if response.status_code == 200:
        print("Event sent successfully")
    else:
        print(f"Error: {response.status_code} - {response.text}")
    
  • דוגמה: פקודת cURL:

    curl -X POST \
        "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \
        -H "Content-Type: application/json" \
        -H "x-chronicle-auth: YOUR_SECRET_KEY" \
        -d '{
            "timestamp": "2025-01-15T10:30:00Z",
            "event_type": "security_alert",
            "severity": "critical",
            "source": "custom_tool",
            "message": "Threat detected"
        }'
    

הפניה לשיטות אימות

פידים של וווב-הוק ב-Google SecOps תומכים בכמה שיטות אימות. בוחרים את השיטה שהאפליקציה תומכת בה.

אם האפליקציה תומכת בכותרות HTTP בהתאמה אישית, כדאי להשתמש בשיטה הזו כדי לשפר את האבטחה.

  • פורמט הבקשה:

    POST <ENDPOINT_URL> HTTP/1.1
    Content-Type: application/json
    x-goog-chronicle-auth: <API_KEY>
    x-chronicle-auth: <SECRET_KEY>
    
    {
      "event": "data",
      "timestamp": "2025-01-15T10:30:00Z"
    }
    
  • היתרונות:

    • מפתח ה-API והסוד לא מוצגים בכתובת ה-URL.
    • מאובטח יותר כי הכותרות לא מתועדות ביומני הגישה של שרת האינטרנט.
    • השיטה המועדפת אם האפליקציה תומכת בה.

שיטה 2: פרמטרים של שאילתה

אם האפליקציה לא תומכת בכותרות מותאמות אישית, צריך לצרף את פרטי הכניסה לכתובת ה-URL.

  • פורמט כתובת ה-URL:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    

    לדוגמה:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    
  • פורמט הבקשה:

    POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1
    Content-Type: application/json
    
    {
      "event": "data",
      "timestamp": "2025-01-15T10:30:00Z"
    }
    
  • החסרונות:

    • פרטי הכניסה גלויים בכתובת ה-URL.
    • יכול להיות שפרטי הכניסה יתועדו ביומני הגישה של שרת האינטרנט.
    • פחות מאובטח מכותרות.

שיטה 3: היברידית (כתובת URL + כותרת)

חלק מההגדרות משתמשות במפתח API בכתובת ה-URL ובמפתח סודי בכותרת.

  • פורמט הבקשה:

    POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1
    Content-Type: application/json
    x-chronicle-auth: <SECRET_KEY>
    
    {
        "event": "data",
        "timestamp": "2025-01-15T10:30:00Z"
    }
    

מגבלות ושיטות מומלצות לשימוש ב-Webhook

מגבלות על בקשות

הגבלה ערך
גודל בקשה מקסימלי ‫4MB
מספר QPS מקסימלי (שאילתות לשנייה) 15,000
זמן קצוב לתפוגה של בקשה ‫30 שניות
התנהגות של ניסיון חוזר אוטומטי עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff)

שיטות מומלצות

  • אירועים באצווה: כדי לצמצם את התקורה, אפשר לשלוח כמה אירועים בבקשה אחת באמצעות פורמט JSON שמופרד בתו שורה חדשה (NDJSON).
  • הוספת חותמות זמן: כדי להבטיח שהאירועים יסודרו בצורה מדויקת, צריך תמיד לכלול שדה של חותמת זמן בפורמט ISO 8601.
  • שימוש בנתונים מובְנים: שליחת נתונים בפורמט JSON כדי להקל על הניתוח והחילוץ של שדות.
  • הטמעת לוגיקה של ניסיון חוזר: טיפול בכשלים זמניים באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff).
  • מעקב אחר קודי תגובה: רישום ביומן והתראה על תגובות שאינן 200.

אפשרות 2: הטמעה של Amazon S3 V2 (ייצוא באצווה)

משתמשים בשיטה הזו כשאפשר לייצא יומנים לקטגוריה של Amazon S3 מאפליקציית האבטחה המותאמת אישית.

יצירת קטגוריה ב-Amazon S3

  1. פותחים את מסוף Amazon S3.
  2. לוחצים על Create Bucket.
  3. מזינים את פרטי ההגדרה הבאים:
    • שם הקטגוריה: מזינים שם בעל משמעות לקטגוריה (לדוגמה, custom-security-analytics-logs).
    • אזור: בוחרים את האזור המועדף ב-AWS (לדוגמה, us-east-1).
  4. לוחצים על יצירה.

יצירת משתמש IAM עם גישה ל-S3

  1. פותחים את מסוף IAM.
  2. לוחצים על משתמשים > הוספת משתמש.
  3. מזינים שם משתמש (לדוגמה, chronicle-s3-reader).
  4. בוחרים באפשרות גישה פרוגרמטית.
  5. לוחצים על הבא: הרשאות.
  6. בוחרים באפשרות צירוף מדיניות קיימת באופן ישיר.
  7. מחפשים את האפשרות AmazonS3FullAccess ובוחרים בה.
  8. לוחצים על הבא: תגים.
  9. לוחצים על הבא: בדיקה.
  10. לוחצים על יצירת משתמש.
  11. לוחצים על הורדת קובץ CSV כדי לשמור את מזהה מפתח הגישה ואת מפתח הגישה הסודי.
  12. לוחצים על Close.

הגדרת האפליקציה לייצוא ל-S3

מגדירים את אפליקציית האבטחה בהתאמה אישית כך שתכתוב קובצי יומן לקטגוריית S3. האפליקציה צריכה:

  • כתיבת יומנים בפורמט מובנה (JSON,‏ CSV או טקסט פשוט).
  • להשתמש במוסכמה עקבית למתן שמות לקבצים.
  • אופציונלי: ארגון הקבצים לפי תאריך (לדוגמה, logs/2025/01/15/events.json).
  • כתיבת קבצים מלאים (לא חלקיים).

  • דוגמה למבנה קובץ:

    s3://custom-security-analytics-logs/
    ├── security-events/
    │   ├── 2025/01/15/
    │   │   ├── events-10-00.json
    │   │   ├── events-11-00.json
    │   │   └── events-12-00.json
    
  • דוגמה לפורמט של קובץ יומן (NDJSON):

    {"timestamp": "2025-01-15T10:00:00Z", "event_type": "login", "user": "alice@example.com", "result": "success"}
    {"timestamp": "2025-01-15T10:05:00Z", "event_type": "file_access", "user": "bob@example.com", "file": "/data/sensitive.txt"}
    {"timestamp": "2025-01-15T10:10:00Z", "event_type": "logout", "user": "alice@example.com"}
    

הגדרת פיד של Google SecOps ל-S3

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, custom-security-analytics-s3).
  5. בוחרים באפשרות Amazon S3 V2 בתור סוג המקור.
  6. בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
  7. לוחצים על הבא.
  8. מציינים ערכים לפרמטרים הבאים של הקלט:

    • S3 URI: ה-URI של הדלי בפורמט: s3://custom-security-analytics-logs/security-events/

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

      • אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
      • מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת בהצלחה.
      • מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
    • הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).

    • מזהה מפתח הגישה: מזינים את מפתח הגישה של משתמש IAM.

    • מפתח גישה סודי: מזינים את המפתח הסודי מהמשתמש ב-IAM.

    • מרחב השמות של הנכס: מרחב השמות של הנכס.

    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.

  9. לוחצים על הבא.

  10. בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.

אפשרות 3: העברה של נתונים ל-Google Cloud Storage V2 (ייצוא באצווה)

משתמשים בשיטה הזו אם אפשר לייצא יומנים לקטגוריה של Google Cloud Storage מאפליקציית האבטחה המותאמת אישית.

יצירת קטגוריית GCS

  1. נכנסים אל מסוף Google Cloud.
  2. בוחרים פרויקט או יוצרים פרויקט חדש.
  3. בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
  4. לוחצים על Create bucket.
  5. מזינים את פרטי ההגדרה הבאים:

    הגדרה ערך
    Name your bucket (שם הקטגוריה) מזינים שם ייחודי גלובלית (לדוגמה, custom-security-analytics-logs)
    סוג מיקום בוחרים לפי הצרכים שלכם (אזור, בשני אזורים, במספר אזורים)
    Location בוחרים את המיקום (לדוגמה, us-central1).
    סוג אחסון (storage class) רגיל (מומלץ ליומנים שמתבצעת אליהם גישה לעיתים קרובות)
    בקרת גישה אחיד (מומלץ)
    כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים
  6. לוחצים על יצירה.

הגדרת האפליקציה לייצוא ל-GCS

מגדירים את אפליקציית האבטחה המותאמת אישית כך שתכתוב קובצי יומן לקטגוריית GCS באמצעות אחת מהשיטות הבאות:

  • Google Cloud SDK: שימוש ב-gsutil או בספריות לקוח
  • חשבון שירות: יצירת חשבון שירות עם התפקיד 'יצירת אובייקטים של אחסון'
  • כתובות URL חתומות: יצירת כתובות URL חתומות לגישת כתיבה זמנית

  • דוגמה לשימוש ב-gsutil:

    gsutil cp /path/to/logs/events.json gs://custom-security-analytics-logs/security-events/
    
  • דוגמה לשימוש בספריית לקוח של Python:

    from google.cloud import storage
    import json
    
    # Initialize client
    client = storage.Client()
    bucket = client.bucket('custom-security-analytics-logs')
    
    # Upload log file
    blob = bucket.blob('security-events/2025/01/15/events.json')
    
    # Write NDJSON data
    events = [
        {"timestamp": "2025-01-15T10:00:00Z", "event_type": "login"},
        {"timestamp": "2025-01-15T10:05:00Z", "event_type": "logout"}
    ]
    
    ndjson_data = '\n'.join([json.dumps(event) for event in events]) + '\n'
    blob.upload_from_string(ndjson_data, content_type='application/x-ndjson')
    

קבלת חשבון שירות של Google SecOps

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, custom-security-analytics-gcs).
  5. בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
  6. בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
  7. לוחצים על Get Service Account (קבלת חשבון שירות).
  8. תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. מעתיקים את כתובת האימייל הזו לשימוש בשלב הבא.

מתן הרשאות IAM

  1. נכנסים אל Cloud Storage > Buckets (קטגוריות).
  2. לוחצים על שם ה-bucket.
  3. עוברים לכרטיסייה Permissions.
  4. לוחצים על הענקת גישה.
  5. מזינים את פרטי ההגדרה הבאים:
    • Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps.
    • הקצאת תפקידים: בוחרים באפשרות צפייה באובייקט אחסון.
  6. לוחצים על Save.

הגדרת פיד של Google SecOps ל-GCS

  1. ממשיכים מהדף ליצירת פיד (או עוברים אל הגדרות SIEM > פידים > הוספת פיד חדש).
  2. לוחצים על הבא.
  3. מציינים ערכים לפרמטרים הבאים של הקלט:

    • כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:

      gs://custom-security-analytics-logs/security-events/
      
    • אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:

      • אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
      • מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת בהצלחה.
      • מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
    • הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).

    • מרחב השמות של הנכס: מרחב השמות של הנכס.

    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.

  4. לוחצים על הבא.

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

אפשרות 4: הטמעה של Azure Blob Storage V2 (ייצוא באצווה)

משתמשים בשיטה הזו כשאפשר לייצא יומנים לאחסון Blob ב-Azure מאפליקציית האבטחה המותאמת אישית.

יצירת חשבון Azure Storage

  1. ב-Azure portal, מחפשים Storage accounts.
  2. לוחצים על ‎+ Create.
  3. מזינים את פרטי ההגדרה הבאים:

    הגדרה ערך
    מינוי בוחרים את המינוי ל-Azure
    קבוצת משאבים בוחרים באפשרות 'קיים' או 'יצירה של קהל חדש'
    שם חשבון האחסון מזינים שם ייחודי (לדוגמה, customsecuritylogs).
    אזור בוחרים את האזור (לדוגמה, East US)
    ביצועים רגיל (מומלץ)
    יתירות ‫GRS (Geo-redundant storage) או LRS (Locally redundant storage)
  4. לוחצים על בדיקה + יצירה.

  5. בודקים את הסקירה הכללית של החשבון ולוחצים על יצירה.

  6. מחכים שהפריסה תסתיים.

קבלת פרטי כניסה לחשבון אחסון

  1. עוברים אל חשבון האחסון שיצרתם.
  2. בחלונית הניווט שמימין, בוחרים באפשרות מפתחות גישה בקטע אבטחה + רשת.
  3. לוחצים על הצגת המקשים.
  4. מעתיקים ושומרים את הפרטים הבאים לשימוש מאוחר יותר:
    • שם חשבון האחסון: customsecuritylogs
    • מפתח 1 או מפתח 2: מפתח הגישה המשותף

יצירת מאגר blob

  1. באותו חשבון אחסון, בוחרים באפשרות Containers (מאגרי נתונים) מתוך תפריט הניווט הימני.
  2. לוחצים על + מאגר תגים.
  3. מזינים את פרטי ההגדרה הבאים:
    • שם: מזינים שם של מאגר תגים (לדוגמה, security-events)
    • רמת הגישה הציבורית: בוחרים באפשרות פרטית (ללא גישה אנונימית)
  4. לוחצים על יצירה.

הגדרת האפליקציה לייצוא אל Azure Blob

מגדירים את אפליקציית האבטחה המותאמת אישית כך שתכתוב קובצי יומן למאגר Azure Blob באחת מהשיטות הבאות:

  • Azure CLI: משתמשים ב-az storage blob upload
  • Azure SDK: שימוש בספריות לקוח לשפת התכנות שלכם
  • AzCopy: שימוש בכלי שורת הפקודה AzCopy

דוגמאות:

  • דוגמה לשימוש ב-Azure CLI:

    az storage blob upload \
        --account-name customsecuritylogs \
        --container-name security-events \
        --name logs/2025/01/15/events.json \
        --file /path/to/events.json \
        --account-key <YOUR_ACCESS_KEY>
    
  • דוגמה לשימוש ב-Python SDK:

    from azure.storage.blob import BlobServiceClient
    import json
    
    # Initialize client
    connection_string = "DefaultEndpointsProtocol=https;AccountName=customsecuritylogs;AccountKey=<YOUR_KEY>;EndpointSuffix=core.windows.net"
    blob_service_client = BlobServiceClient.from_connection_string(connection_string)
    
    # Get container client
    container_client = blob_service_client.get_container_client("security-events")
    
    # Upload log file
    blob_client = container_client.get_blob_client("logs/2025/01/15/events.json")
    
    # Write NDJSON data
    events = [
        {"timestamp": "2025-01-15T10:00:00Z", "event_type": "login"},
        {"timestamp": "2025-01-15T10:05:00Z", "event_type": "logout"}
    ]
    
    ndjson_data = '\n'.join([json.dumps(event) for event in events]) + '\n'
    blob_client.upload_blob(ndjson_data, overwrite=True)
    

הגדרת פיד של Google SecOps ל-Azure Blob

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, custom-security-analytics-azure).
  5. בוחרים באפשרות Microsoft Azure Blob Storage V2 בתור סוג המקור.
  6. בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
  7. לוחצים על הבא.
  8. מציינים ערכים לפרמטרים הבאים של הקלט:

    • Azure URI: מזינים את כתובת ה-URL של נקודת הקצה של Blob Service עם הנתיב של המאגר:

      https://customsecuritylogs.blob.core.windows.net/security-events/
      
    • אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:

      • אף פעם: הקבצים לא נמחקים אחרי ההעברה.
      • מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת בהצלחה.
      • מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
    • הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).

    • Shared key (מפתח משותף): מזינים את הערך של המפתח המשותף (מפתח גישה) מחשבון האחסון.

    • מרחב השמות של הנכס: מרחב השמות של הנכס.

    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.

  9. לוחצים על הבא.

  10. בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.

אפשרות 5: הטמעה של Amazon Data Firehose (סטרימינג בזמן אמת)

משתמשים בשיטה הזו כשהאפליקציה המותאמת אישית לאבטחה כותבת יומנים ל-Amazon CloudWatch Logs, וצריך סטרימינג בזמן אמת ל-Google SecOps.

יצירת פיד Firehose ב-Google SecOps

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, custom-security-analytics-firehose).
  4. בוחרים באפשרות Amazon Data Firehose בתור סוג המקור.
  5. בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
  6. לוחצים על הבא.
  7. מציינים ערכים לפרמטרים הבאים של הקלט:
    • Split delimiter (תו מפריד לפיצול): אופציונלי: מזינים \n כדי לפצל יומנים שמופרדים על ידי שורות חדשות.
    • מרחב השמות של הנכס: מרחב השמות של הנכס.
    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
  8. לוחצים על הבא.
  9. בודקים את הגדרות הפיד ולוחצים על שליחה.
  10. לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
  11. מעתיקים ושומרים את המפתח הסודי, כי לא תהיה אפשרות לראות אותו שוב.
  12. עוברים לכרטיסייה פרטים.
  13. מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה.
  14. לוחצים על סיום.

יצירת מפתח Google Cloud API

  1. נכנסים לדף Credentials במסוף Google Cloud בכתובת https://console.cloud.google.com/apis/credentials
  2. לוחצים על Create credentials ואז על API key.
  3. לוחצים על Edit API key כדי להגביל את המפתח.
  4. בקטע API restrictions, בוחרים באפשרות Restrict key.
  5. מחפשים את Google SecOps API ובוחרים בו.
  6. לוחצים על Save.
  7. מעתיקים את מפתח ה-API ושומרים אותו.

הרכבת כתובת ה-URL של נקודת הקצה

  1. מוסיפים את מפתח ה-API לכתובת ה-URL של נקודת הקצה של הפיד בפורמט הבא:

    <FEED_ENDPOINT_URL>?key=<API_KEY>
    

    לדוגמה:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
    
  2. שומרים את כתובת ה-URL המלאה הזו לשלב הבא.

יצירת מדיניות IAM עבור Firehose

  1. ב-AWS Console, עוברים אל IAM > Policies > Create policy > JSON tab (מדיניות > יצירת מדיניות > כרטיסיית JSON).
  2. מדביקים את מדיניות ה-JSON הבאה:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "firehose:PutRecord",
                    "firehose:PutRecordBatch"
                ],
                "Resource": "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/CustomSecurityToChronicle"
            }
        ]
    }
    
  3. מחליפים את מה שכתוב בשדות הבאים:

    • <REGION>: האזור שלכם ב-AWS (לדוגמה, us-east-1).
    • <ACCOUNT_ID>: מזהה החשבון ב-AWS (מספר בן 12 ספרות).
  4. נותנים למדיניות את השם CloudWatchLogsToFirehosePolicy.

  5. לוחצים על יצירת מדיניות.

יצירת תפקיד IAM ל-CloudWatch Logs

  1. עוברים אל IAM > Roles > Create role (ניהול זהויות וגישה > תפקידים > יצירת תפקיד).
  2. בוחרים באפשרות מדיניות אמון בהתאמה אישית ומדביקים את הטקסט הבא:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.<REGION>.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  3. מחליפים את <REGION> באזור AWS.

  4. לוחצים על הבא.

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

  6. לוחצים על הבא.

  7. נותנים לתפקיד את השם CloudWatchLogsToFirehoseRole.

  8. לוחצים על יצירת תפקיד.

יצירת נתוני משלוח של Kinesis Data Firehose

  1. ב-AWS Console, עוברים אל Kinesis > Data Firehose > Create delivery stream.
  2. מזינים את פרטי ההגדרה הבאים:

    • מקור ויעד:

      • מקור: בוחרים באפשרות Direct PUT or other sources (העלאה ישירה או מקורות אחרים).
      • יעד: בוחרים באפשרות נקודת קצה (endpoint) מסוג HTTP.
    • שם של זרם העברת נתונים:

      • שם של זרם העברה: מזינים CustomSecurityToChronicle
    • יעד של נקודת קצה (endpoint) מסוג HTTP:

      • כתובת URL של נקודת קצה HTTP: מזינים את כתובת ה-URL המלאה של נקודת הקצה שיצרתם קודם (נקודת קצה של הפיד + מפתח API)
      • קידוד תוכן: בוחרים באפשרות GZIP (מומלץ לחיסכון ברוחב הפס)
    • כותרות HTTP בהתאמה אישית:

      • לוחצים על הוספת כותרת HTTP בהתאמה אישית.
      • שם הכותרת: מזינים X-Goog-Chronicle-Auth
      • ערך הכותרת: מזינים את המפתח הסודי ששמרתם בשלב הקודם.
    • הגדרות הגיבוי:

      • גיבוי של רשומות המקור ב-Amazon S3: בוחרים באפשרות Failed data only (מומלץ)
      • S3 bucket: בוחרים קטגוריה קיימת או יוצרים קטגוריה חדשה בשביל רשומות שנכשלו
    • רמזים לגבי מאגרים זמניים:

      • שטח אחסון זמני: מזינים 1 MiB (הערך המינימלי לנקודות קצה של HTTP)
      • הפסקה בין פגישות: מזינים 60 שניות
    • משך הניסיון החוזר:

      • משך הניסיון החוזר: מזינים 300 שניות (5 דקות)
  3. לוחצים על יצירת מקור נתונים.

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

הרשמה של קבוצת יומנים ב-CloudWatch ל-Firehose

  1. ב-AWS Console, עוברים אל CloudWatch > Logs > Log groups.
  2. בוחרים את קבוצת יומני היעד שמכילה את יומני ניתוח האבטחה המותאמים אישית.
  3. לוחצים על הכרטיסייה מסנני מינויים.
  4. לוחצים על יצירה > יצירת מסנן מינוי ל-Amazon Kinesis Data Firehose.
  5. מזינים את פרטי ההגדרה הבאים:
    • יעד: בוחרים את מקור הנתונים של העברת הנתונים CustomSecurityToChronicle.
    • Grant permission (הענקת הרשאה): בוחרים בתפקיד CloudWatchLogsToFirehoseRole.
    • שם מסנן המינויים: מזינים CustomSecurityToChronicle.
    • פורמט יומן: בוחרים באפשרות אחר (המערכת של Google SecOps מטפלת בניתוח).
    • תבנית לסינון מינויים: משאירים את השדה ריק כדי לשלוח את כל האירועים, או מזינים תבנית לסינון כדי לשלוח רק אירועים ספציפיים.
  6. לוחצים על התחלת השידור.
  7. היומנים יועברו עכשיו בסטרימינג בזמן אמת אל Google SecOps דרך Firehose.

יצירת מנתח מותאם אישית (אופציונלי)

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

מתי כדאי ליצור מנתח נתונים בהתאמה אישית

יוצרים מנתח מותאם אישית במקרים הבאים:

  • צריך לחלץ שדות ספציפיים מפורמט יומן מותאם אישית
  • רוצים להפעיל חיפוש ב-UDM בנתונים בהתאמה אישית
  • כדי להשתמש בכללי זיהוי, צריך למפות שדות מותאמים אישית לשדות UDM רגילים
  • רוצים לשפר את הביצועים של החיפוש על ידי הוספת אינדקס לשדות ספציפיים

יצירת סוג יומן מותאם אישית

  1. עוברים אל הגדרות SIEM > סוגי יומנים זמינים.
  2. לוחצים על בקשה של סוג יומן.
  3. בקטע יצירת סוג יומן בהתאמה אישית או בקשה של סוג יומן מוכן מראש, בוחרים באפשרות יצירת סוג יומן בהתאמה אישית.
  4. מציינים את הפרטים הבאים:
    • שם סוג היומן: מזינים שם תיאורי (לדוגמה, CUSTOM_SECURITY_ANALYTICS).
    • תיאור: מזינים תיאור של סוג היומן.
    • יומנים לדוגמה: מדביקים 5-10 רשומות יומן לדוגמה בפורמט הגולמי שלהן.
  5. לוחצים על שליחה.
  6. סוג היומן המותאם אישית יהיה זמין תוך כ-10 דקות.

יצירת מנתח מותאם אישית

  1. עוברים אל SIEM Settings > Parsers (הגדרות SIEM > מנתחי נתונים).
  2. לוחצים על יצירת כלי ניתוח.
  3. בוחרים באפשרות Custom Parser (מנתח מותאם אישית).
  4. מציינים את הפרטים הבאים:
    • שם מנתח: מזינים שם תיאורי
    • סוג היומן: בוחרים את סוג היומן המותאם אישית (לדוגמה, CUSTOM_SECURITY_ANALYTICS)
    • קוד מנתח התוכן: מזינים את הגדרות מנתח התוכן באמצעות שפת ההגדרות של מנתח התוכן של Google SecOps
  5. בודקים את מנתח היומנים באמצעות יומנים לדוגמה.
  6. לוחצים על שליחה כדי להפעיל את מנתח הנתונים.

דוגמה להגדרת כלי הניתוח

  • לפורמט יומן JSON מותאם אישית:

    {
        "timestamp": "2025-01-15T10:30:00Z",
        "event_type": "authentication",
        "user": "john.doe@example.com",
        "action": "login",
        "result": "success",
        "source_ip": "203.0.113.45"
    }
    

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

    filter {
        json {
            fields {
                timestamp: timestamp
                event_type: event_type
                user: user
                action: action
                result: result
                source_ip: source_ip
            }
        }
    }
    
    event {
        $e.metadata.event_timestamp.seconds = parseTimestamp(timestamp, "yyyy-MM-dd'T'HH:mm:ss'Z'")
        $e.metadata.event_type = "USER_LOGIN"
        $e.principal.user.email_addresses = user
        $e.target.ip = source_ip
        $e.security_result.action = if(result == "success", "ALLOW", "BLOCK")
    }
    

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

אימות הטמעת הנתונים

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

בדיקת סטטוס הפיד

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. מוצאים את הפיד ברשימה.
  3. בודקים את העמודה סטטוס:
    • פעיל: הפיד פועל ומבצע המרת נתונים
    • שגיאה: אירעה שגיאה בפיד (לחיצה להצגת פרטים)
    • מושהה: הפיד מושהה

חיפוש יומנים שהועברו

  1. עוברים אל חיפוש > סריקת יומן גולמי.
  2. מזינים שאילתת חיפוש כדי למצוא את היומנים המותאמים אישית:

    metadata.log_type = "CUSTOM_SECURITY_DATA_ANALYTICS"
    
  3. אם צריך, משנים את טווח הזמן.

  4. לוחצים על חיפוש.

  5. מוודאים שהיומנים מופיעים בתוצאות.

מעקב אחרי מדדי פיד

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על שם הפיד.
  3. עוברים לכרטיסייה מדדים.
  4. מעיינים במדדים הבאים:
    • אירועים שהועברו: המספר הכולל של אירועים שהועברו
    • Bytes ingested: נפח הנתונים הכולל שהועבר
    • קצב הטמעת הנתונים: אירועים לשנייה
    • שגיאות: מספר השגיאות בהטמעה

פתרון בעיות

בעיות בהעברה של נתונים באמצעות webhook

  • הבעיה: HTTP 401 Unauthorized

    • הסיבה: מפתח API או מפתח סודי לא תקינים
    • פתרון: מוודאים שמפתח ה-API והמפתח הסודי נכונים ושהתוקף שלהם לא פג
  • הבעיה: HTTP 403 Forbidden

    • הסיבה: למפתח ה-API אין הרשאות ל-Chronicle API
    • פתרון: עורכים את מפתח ה-API ומוודאים ש-Chronicle API נבחר בהגבלות על ממשקי API
  • בעיה: בקשת HTTP 400 לא תקינה

    • הגורם: פורמט או מטען ייעודי (payload) לא תקינים של הבקשה
    • פתרון: מוודאים שהכותרת Content-Type מוגדרת ל-application/json ושהמטען הייעודי (payload) הוא קובץ JSON תקין

בעיות בהעברה של נתונים מ-S3, מ-GCS או מ-Azure Blob

  • בעיה: לא מתבצעת קליטה של נתונים

    • הסיבה: כתובת URI שגויה של קטגוריה או הרשאות חסרות
    • פתרון: מוודאים שכתובת ה-URI של הקטגוריה כוללת את קו הנטוי בסוף, ושלחשבון השירות יש את התפקיד 'צפייה באובייקט אחסון'
  • בעיה: קבצים לא נמחקים אחרי ההטמעה

    • הסיבה: לחשבון השירות אין הרשאות מחיקה
    • פתרון: צריך להקצות את התפקיד Storage Object Admin במקום Storage Object Viewer
  • בעיה: קבצים ישנים לא נבלעים

    • הסיבה: ההגדרה 'גיל מקסימלי של קובץ' לא כוללת קבצים ישנים
    • פתרון: הגדלת הערך של Maximum File Age (גיל מקסימלי של קובץ) בהגדרות הפיד

בעיות בהעברה של נתונים מ-Firehose

  • בעיה: בזרם העברת הנתונים מוצגות שגיאות

    • הסיבה: כתובת URL לא תקינה של נקודת קצה או אימות
    • פתרון: מוודאים שכתובת ה-URL של נקודת הקצה כוללת את פרמטר מפתח ה-API, ושכותרת X-Goog-Chronicle-Auth מכילה את המפתח הסודי הנכון
  • בעיה: מדד עדכניות הנתונים גבוה

    • הסיבה: יש הגבלת קצב ב-Firehose או שיש כשלים במסירה
    • פתרון: בודקים את המדדים של CloudWatch לגבי שיעור ThrottledRecords ושיעור DeliveryToHTTP.Success
  • בעיה: לא מתבצעת הזרמה של יומנים מ-CloudWatch

    • הסיבה: מסנן המינויים לא הוגדר או שההרשאות של התפקיד ב-IAM חסרות
    • פתרון: מוודאים שהמסנן של המינוי פעיל ושלתפקיד ב-IAM יש הרשאות firehose:PutRecord.

טבלת מיפוי UDM

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

אחרי שיוצרים מנתח מותאם אישית, השדות של UDM יאוכלסו על סמך הגדרות המנתח. שדות נפוצים ב-UDM לנתוני ניתוח אבטחה כוללים:

שדה UDM תיאור
metadata.event_timestamp חותמת זמן של אירוע
metadata.event_type סוג האירוע (לדוגמה, USER_LOGIN, FILE_ACCESS)
principal.user.email_addresses כתובת האימייל של המשתמש
principal.ip כתובת ה-IP של המקור
target.resource.name שם משאב היעד
security_result.action פעולת אבטחה (ALLOW,‏ BLOCK וכו')
security_result.severity חומרת האירוע

רשימה מלאה של שדות UDM מופיעה בחומר העזר בנושא שדות UDM.

שנה רישום

צפייה ביומן השינויים של כלי הניתוח הזה

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