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

גרסת המנתח: 6.0

נתמך ב:

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

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

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

חשוב לוודא שיש לכם את הדברים הבאים:

  • מכונה של Google SecOps
  • מקור נתוני אבטחה בהתאמה אישית שיכול לייצא יומנים בפורמט JSON,‏ CSV,‏ SYSLOG או בפורמטים מובְנים אחרים
  • גישה לאחד מהבאים:
    • מסוף Google Cloud (ליצירת מפתח API ו-GCS)
    • ‫AWS Console (ל-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://{region}-chronicle.googleapis.com/v1/{parent}/logs:import
    

    כאשר {region} הוא האזור של המופע של Google SecOps (לדוגמה, us,‏ europe או asia-southeast1), ו-{parent} הוא נתיב המשאב בפורמט projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>.

  4. שומרים את כתובת ה-URL הזו לשלבים הבאים.

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

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

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

יצירת מפתח ה-API

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

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

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

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

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

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

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

    <ENDPOINT_URL>?key=<API_KEY>
    

    לדוגמה:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...
    

פורמט בקשת HTTP:

  • שיטה: POST

  • כתובת ה-URL:‏

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

    Content-Type: application/json
    x-chronicle-auth: <SECRET_KEY>
    
  • גוף ההודעה (אירוע בודד):

    {
        "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"
    }
    
  • גוף הבקשה (כמה אירועים עם תו מפריד של שורה חדשה):

    {"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://{region}-chronicle.googleapis.com/v1/{parent}/logs:import"
    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://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?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 webhook תומכים בכמה שיטות אימות. בוחרים את השיטה שנתמכת באפליקציה.

אם האפליקציה תומכת בכותרות 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://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?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

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

הגבלה ערך
גודל בקשה מקסימלי 4 MB
מספר 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. מזינים את פרטי ההגדרה הבאים:
    • ‫Bucket Name: נותנים לקטגוריה שם בעל משמעות (לדוגמה, custom-security-analytics-logs).
    • אזור: בוחרים את האזור המועדף ב-AWS (לדוגמה, us-east-1).
  4. לוחצים על יצירה.

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

  1. פותחים את מסוף IAM.
  2. לוחצים על משתמשים > הוספת משתמש.
  3. מזינים שם משתמש (לדוגמה, chronicle-s3-reader).
  4. בוחרים באפשרות גישה פרוגרמטית.
  5. לוחצים על הבא: הרשאות.
  6. בוחרים באפשרות צירוף מדיניות קיימת ישירות.
  7. מחפשים את AmazonS3FullAccess ובוחרים בה.
  8. לוחצים על Next: Tags.
  9. לוחצים על הבא: בדיקה.
  10. לוחצים על יצירת משתמש.
  11. לוחצים על Download .csv file כדי לשמור את Access Key ID ואת Secret Access Key.
  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.
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, custom-security-analytics-s3).
  5. בוחרים באפשרות Amazon S3 V2 בתור סוג המקור.
  6. בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
  7. לוחצים על הבא.
  8. מציינים ערכים לפרמטרים הבאים של הקלט:

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

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

      • Never: אף פעם לא למחוק קבצים אחרי העברות (מומלץ לבדיקה).
      • מחיקת קבצים שהועברו: מחיקת קבצים אחרי שהם הועברו בהצלחה.
      • מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
    • הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 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.
  2. לוחצים על הוספת פיד חדש.
  3. לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, custom-security-analytics-gcs).
  5. בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
  6. בוחרים באפשרות Custom Security Data Analytics בתור Log type.
  7. לוחצים על Get Service Account (קבלת חשבון שירות).
  8. תוצג כתובת אימייל ייחודית של חשבון שירות, לדוגמה:

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

מתן הרשאות IAM

  1. נכנסים לדף Cloud Storage > Buckets.
  2. לוחצים על שם הקטגוריה.
  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/
      
    • אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:

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

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

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

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

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

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

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

יצירת חשבון אחסון ב-Azure

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

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

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

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

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

  1. עוברים אל חשבון האחסון שיצרתם.
  2. בסרגל הניווט הימני, בקטע Security + networking, לוחצים על Access keys.
  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.
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, custom-security-analytics-azure).
  5. בקטע Source type, בוחרים באפשרות Microsoft Azure Blob Storage V2.
  6. בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
  7. לוחצים על הבא.
  8. מציינים ערכים לפרמטרים הבאים של הקלט:

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

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

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

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

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

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

  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. בוחרים באפשרות Custom Security Data Analytics בתור Log type.
  6. לוחצים על הבא.
  7. מציינים ערכים לפרמטרים הבאים של הקלט:
    • תו מפריד לפיצול: אופציונלי: מזינים \n כדי לפצל יומנים עם תו מפריד של שורה חדשה.
    • מרחב השמות של הנכס: מרחב השמות של הנכס.
    • תוויות הטמעה: התווית שתתווסף לאירועים מהפיד הזה.
  8. לוחצים על הבא.
  9. בודקים את הגדרות הפיד ולוחצים על שליחה.
  10. לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
  11. מעתיקים ושומרים את המפתח הסודי, כי לא תוכלו לראות אותו שוב.
  12. עוברים לכרטיסייה פרטים.
  13. מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה.
  14. לוחצים על סיום.

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

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

יצירת כתובת ה-URL של נקודת הקצה (endpoint)

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

    <FEED_ENDPOINT_URL>?key=<API_KEY>
    

    לדוגמה:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...
    
  2. שומרים את כתובת ה-URL המלאה הזו לשלב הבא.

יצירת מדיניות IAM ל-Firehose

  1. במסוף AWS, עוברים אל IAM > Policies > Create policy > הכרטיסייה 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. בוחרים באפשרות Custom trust policy ומדביקים:

    {
        "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. מספקים את פרטי ההגדרה הבאים:

    • מקור ויעד:

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

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

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

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

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

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

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

  4. מחכים שהסטטוס של מקור הנתונים ישתנה ל-Active (דקה או שתיים).

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

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

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

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

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

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

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

יצירת סוג יומן בהתאמה אישית

  1. עוברים אל SIEM Settings > Available Log Types (הגדרות SIEM > סוגי יומנים זמינים).
  2. לוחצים על בקשה לסוג יומן.
  3. בקטע Create a custom log type or request a prebuilt log type, בוחרים באפשרות Create a custom log type.
  4. ממלאים את הפרטים הבאים:
    • שם סוג היומן: מזינים שם תיאורי (לדוגמה, CUSTOM_SECURITY_ANALYTICS).
    • תיאור: מזינים תיאור של סוג היומן.
    • יומנים לדוגמה: מדביקים 5-10 רשומות יומן לדוגמה בפורמט הגולמי שלהן.
  5. לוחצים על שליחה.
  6. סוג היומן בהתאמה אישית יהיה זמין תוך כ-10 דקות.

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

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

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

  • לפורמט יומן 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.
  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
  • בעיה: קבצים ישנים לא נבלעים

    • הגורם: ההגדרה 'גיל מקסימלי של קובץ' מחריגה קבצים ישנים
    • פתרון: מגדילים את הערך של "גיל הקובץ המקסימלי" בהגדרות הפיד.

בעיות בהטמעה של 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.