איסוף יומנים של ניתוח נתוני אבטחה בהתאמה אישית
גרסת מנתח הנתונים: 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
יצירת הפיד
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-webhook). - בוחרים באפשרות Webhook בתור סוג המקור.
- בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- תו מפריד לפיצול: אופציונלי: מזינים תו מפריד כדי לפצל אירועים מרובי שורות. ערכים נפוצים:
-
\n– תו שורה חדשה כמפריד (הנפוץ ביותר ב-NDJSON) - אם כל בקשה מכילה אירוע יחיד, אפשר להשאיר את השדה ריק
-
- מרחב שמות של נכס: מרחב השמות של הנכס
- תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה
- תו מפריד לפיצול: אופציונלי: מזינים תו מפריד כדי לפצל אירועים מרובי שורות. ערכים נפוצים:
- לוחצים על הבא.
- בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
יצירה ושמירה של מפתח סודי
אחרי שיוצרים את הפיד, צריך ליצור מפתח סודי לאימות:
- בדף הפרטים של הפיד, לוחצים על יצירת מפתח סודי.
- בתיבת דו-שיח מוצג המפתח הסודי.
מעתיקים ושומרים את המפתח הסודי באופן מאובטח.
קבלת כתובת ה-URL של נקודת הקצה של הפיד
- עוברים לכרטיסייה פרטים של הפיד.
- בקטע Endpoint Information, מעתיקים את Feed endpoint URL.
הפורמט של כתובת ה-URL הוא:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateאו
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateשומרים את כתובת ה-URL הזו כדי לבצע את השלבים הבאים.
לוחצים על סיום.
יצירת מפתח Google Cloud API
מערכת Google SecOps דורשת מפתח API לצורך אימות. יוצרים מפתח API מוגבל במסוף Google Cloud.
יצירת מפתח API
- נכנסים אל הדף Credentials במסוף Google Cloud.
- בוחרים את הפרויקט (הפרויקט שמשויך למופע Chronicle).
- לוחצים על Create credentials > API key.
- מפתח API נוצר ומוצג בתיבת דו-שיח.
- לוחצים על Edit API key כדי להגביל את המפתח.
הגבלת מפתח ה-API
- בדף ההגדרות API key:
- שם: מזינים שם תיאורי (לדוגמה,
Chronicle Webhook API Key).
- שם: מזינים שם תיאורי (לדוגמה,
- בקטע API restrictions (הגבלות על API):
- בוחרים באפשרות הגבלת המקש.
- בתפריט הנפתח Select APIs (בחירת ממשקי API), מחפשים ובוחרים באפשרות Google SecOps API (או Chronicle API).
- לוחצים על Save.
- מעתיקים את הערך של מפתח ה-API מהשדה מפתח ה-API בחלק העליון של הדף.
שומרים את מפתח ה-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 תומכים בכמה שיטות אימות. בוחרים את השיטה שהאפליקציה תומכת בה.
שיטה 1: כותרות מותאמות אישית (מומלץ)
אם האפליקציה תומכת בכותרות 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
- פותחים את מסוף Amazon S3.
- לוחצים על Create Bucket.
- מזינים את פרטי ההגדרה הבאים:
- שם הקטגוריה: מזינים שם בעל משמעות לקטגוריה (לדוגמה,
custom-security-analytics-logs). - אזור: בוחרים את האזור המועדף ב-AWS (לדוגמה,
us-east-1).
- שם הקטגוריה: מזינים שם בעל משמעות לקטגוריה (לדוגמה,
- לוחצים על יצירה.
יצירת משתמש IAM עם גישה ל-S3
- פותחים את מסוף IAM.
- לוחצים על משתמשים > הוספת משתמש.
- מזינים שם משתמש (לדוגמה,
chronicle-s3-reader). - בוחרים באפשרות גישה פרוגרמטית.
- לוחצים על הבא: הרשאות.
- בוחרים באפשרות צירוף מדיניות קיימת באופן ישיר.
- מחפשים את האפשרות AmazonS3FullAccess ובוחרים בה.
- לוחצים על הבא: תגים.
- לוחצים על הבא: בדיקה.
- לוחצים על יצירת משתמש.
- לוחצים על הורדת קובץ CSV כדי לשמור את מזהה מפתח הגישה ואת מפתח הגישה הסודי.
- לוחצים על 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
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-s3). - בוחרים באפשרות Amazon S3 V2 בתור סוג המקור.
- בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
S3 URI: ה-URI של הדלי בפורמט:
s3://custom-security-analytics-logs/security-events/אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
- מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת בהצלחה.
- מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).
מזהה מפתח הגישה: מזינים את מפתח הגישה של משתמש IAM.
מפתח גישה סודי: מזינים את המפתח הסודי מהמשתמש ב-IAM.
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
אפשרות 3: העברה של נתונים ל-Google Cloud Storage V2 (ייצוא באצווה)
משתמשים בשיטה הזו אם אפשר לייצא יומנים לקטגוריה של Google Cloud Storage מאפליקציית האבטחה המותאמת אישית.
יצירת קטגוריית GCS
- נכנסים אל מסוף Google Cloud.
- בוחרים פרויקט או יוצרים פרויקט חדש.
- בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
- לוחצים על Create bucket.
מזינים את פרטי ההגדרה הבאים:
הגדרה ערך Name your bucket (שם הקטגוריה) מזינים שם ייחודי גלובלית (לדוגמה, custom-security-analytics-logs)סוג מיקום בוחרים לפי הצרכים שלכם (אזור, בשני אזורים, במספר אזורים) Location בוחרים את המיקום (לדוגמה, us-central1).סוג אחסון (storage class) רגיל (מומלץ ליומנים שמתבצעת אליהם גישה לעיתים קרובות) בקרת גישה אחיד (מומלץ) כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים לוחצים על יצירה.
הגדרת האפליקציה לייצוא ל-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
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-gcs). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
- לוחצים על Get Service Account (קבלת חשבון שירות).
תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comמעתיקים את כתובת האימייל הזו לשימוש בשלב הבא.
מתן הרשאות IAM
- נכנסים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם ה-bucket.
- עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מזינים את פרטי ההגדרה הבאים:
- Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps.
- הקצאת תפקידים: בוחרים באפשרות צפייה באובייקט אחסון.
לוחצים על Save.
הגדרת פיד של Google SecOps ל-GCS
- ממשיכים מהדף ליצירת פיד (או עוברים אל הגדרות SIEM > פידים > הוספת פיד חדש).
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:
gs://custom-security-analytics-logs/security-events/אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
- מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת בהצלחה.
- מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
אפשרות 4: הטמעה של Azure Blob Storage V2 (ייצוא באצווה)
משתמשים בשיטה הזו כשאפשר לייצא יומנים לאחסון Blob ב-Azure מאפליקציית האבטחה המותאמת אישית.
יצירת חשבון Azure Storage
- ב-Azure portal, מחפשים Storage accounts.
- לוחצים על + Create.
מזינים את פרטי ההגדרה הבאים:
הגדרה ערך מינוי בוחרים את המינוי ל-Azure קבוצת משאבים בוחרים באפשרות 'קיים' או 'יצירה של קהל חדש' שם חשבון האחסון מזינים שם ייחודי (לדוגמה, customsecuritylogs).אזור בוחרים את האזור (לדוגמה, East US)ביצועים רגיל (מומלץ) יתירות GRS (Geo-redundant storage) או LRS (Locally redundant storage) לוחצים על בדיקה + יצירה.
בודקים את הסקירה הכללית של החשבון ולוחצים על יצירה.
מחכים שהפריסה תסתיים.
קבלת פרטי כניסה לחשבון אחסון
- עוברים אל חשבון האחסון שיצרתם.
- בחלונית הניווט שמימין, בוחרים באפשרות מפתחות גישה בקטע אבטחה + רשת.
- לוחצים על הצגת המקשים.
- מעתיקים ושומרים את הפרטים הבאים לשימוש מאוחר יותר:
- שם חשבון האחסון:
customsecuritylogs - מפתח 1 או מפתח 2: מפתח הגישה המשותף
- שם חשבון האחסון:
יצירת מאגר blob
- באותו חשבון אחסון, בוחרים באפשרות Containers (מאגרי נתונים) מתוך תפריט הניווט הימני.
- לוחצים על + מאגר תגים.
- מזינים את פרטי ההגדרה הבאים:
- שם: מזינים שם של מאגר תגים (לדוגמה,
security-events) - רמת הגישה הציבורית: בוחרים באפשרות פרטית (ללא גישה אנונימית)
- שם: מזינים שם של מאגר תגים (לדוגמה,
- לוחצים על יצירה.
הגדרת האפליקציה לייצוא אל 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
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-azure). - בוחרים באפשרות Microsoft Azure Blob Storage V2 בתור סוג המקור.
- בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
Azure URI: מזינים את כתובת ה-URL של נקודת הקצה של Blob Service עם הנתיב של המאגר:
https://customsecuritylogs.blob.core.windows.net/security-events/אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- אף פעם: הקבצים לא נמחקים אחרי ההעברה.
- מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת בהצלחה.
- מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).
Shared key (מפתח משותף): מזינים את הערך של המפתח המשותף (מפתח גישה) מחשבון האחסון.
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
אפשרות 5: הטמעה של Amazon Data Firehose (סטרימינג בזמן אמת)
משתמשים בשיטה הזו כשהאפליקציה המותאמת אישית לאבטחה כותבת יומנים ל-Amazon CloudWatch Logs, וצריך סטרימינג בזמן אמת ל-Google SecOps.
יצירת פיד Firehose ב-Google SecOps
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-firehose). - בוחרים באפשרות Amazon Data Firehose בתור סוג המקור.
- בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- Split delimiter (תו מפריד לפיצול): אופציונלי: מזינים
\nכדי לפצל יומנים שמופרדים על ידי שורות חדשות. - מרחב השמות של הנכס: מרחב השמות של הנכס.
- תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
- Split delimiter (תו מפריד לפיצול): אופציונלי: מזינים
- לוחצים על הבא.
- בודקים את הגדרות הפיד ולוחצים על שליחה.
- לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
- מעתיקים ושומרים את המפתח הסודי, כי לא תהיה אפשרות לראות אותו שוב.
- עוברים לכרטיסייה פרטים.
- מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה.
- לוחצים על סיום.
יצירת מפתח Google Cloud API
- נכנסים לדף Credentials במסוף Google Cloud בכתובת https://console.cloud.google.com/apis/credentials
- לוחצים על Create credentials ואז על API key.
- לוחצים על Edit API key כדי להגביל את המפתח.
- בקטע API restrictions, בוחרים באפשרות Restrict key.
- מחפשים את Google SecOps API ובוחרים בו.
- לוחצים על Save.
- מעתיקים את מפתח ה-API ושומרים אותו.
הרכבת כתובת ה-URL של נקודת הקצה
מוסיפים את מפתח ה-API לכתובת ה-URL של נקודת הקצה של הפיד בפורמט הבא:
<FEED_ENDPOINT_URL>?key=<API_KEY>לדוגמה:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...שומרים את כתובת ה-URL המלאה הזו לשלב הבא.
יצירת מדיניות IAM עבור Firehose
- ב-AWS Console, עוברים אל IAM > Policies > Create policy > JSON tab (מדיניות > יצירת מדיניות > כרטיסיית JSON).
מדביקים את מדיניות ה-JSON הבאה:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/CustomSecurityToChronicle" } ] }מחליפים את מה שכתוב בשדות הבאים:
-
<REGION>: האזור שלכם ב-AWS (לדוגמה,us-east-1). -
<ACCOUNT_ID>: מזהה החשבון ב-AWS (מספר בן 12 ספרות).
-
נותנים למדיניות את השם
CloudWatchLogsToFirehosePolicy.לוחצים על יצירת מדיניות.
יצירת תפקיד IAM ל-CloudWatch Logs
- עוברים אל IAM > Roles > Create role (ניהול זהויות וגישה > תפקידים > יצירת תפקיד).
בוחרים באפשרות מדיניות אמון בהתאמה אישית ומדביקים את הטקסט הבא:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<REGION>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }מחליפים את
<REGION>באזור AWS.לוחצים על הבא.
מחפשים את המדיניות
CloudWatchLogsToFirehosePolicyשיצרתם בשלב הקודם ובוחרים אותה.לוחצים על הבא.
נותנים לתפקיד את השם
CloudWatchLogsToFirehoseRole.לוחצים על יצירת תפקיד.
יצירת נתוני משלוח של Kinesis Data Firehose
- ב-AWS Console, עוברים אל Kinesis > Data Firehose > Create delivery stream.
מזינים את פרטי ההגדרה הבאים:
מקור ויעד:
- מקור: בוחרים באפשרות 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: בוחרים קטגוריה קיימת או יוצרים קטגוריה חדשה בשביל רשומות שנכשלו
רמזים לגבי מאגרים זמניים:
- שטח אחסון זמני: מזינים
1MiB (הערך המינימלי לנקודות קצה של HTTP) - הפסקה בין פגישות: מזינים
60שניות
- שטח אחסון זמני: מזינים
משך הניסיון החוזר:
- משך הניסיון החוזר: מזינים
300שניות (5 דקות)
- משך הניסיון החוזר: מזינים
לוחצים על יצירת מקור נתונים.
מחכים שהסטטוס של זרם ההעברה ישתנה לפעיל (דקה או שתיים).
הרשמה של קבוצת יומנים ב-CloudWatch ל-Firehose
- ב-AWS Console, עוברים אל CloudWatch > Logs > Log groups.
- בוחרים את קבוצת יומני היעד שמכילה את יומני ניתוח האבטחה המותאמים אישית.
- לוחצים על הכרטיסייה מסנני מינויים.
- לוחצים על יצירה > יצירת מסנן מינוי ל-Amazon Kinesis Data Firehose.
- מזינים את פרטי ההגדרה הבאים:
- יעד: בוחרים את מקור הנתונים של העברת הנתונים
CustomSecurityToChronicle. - Grant permission (הענקת הרשאה): בוחרים בתפקיד
CloudWatchLogsToFirehoseRole. - שם מסנן המינויים: מזינים
CustomSecurityToChronicle. - פורמט יומן: בוחרים באפשרות אחר (המערכת של Google SecOps מטפלת בניתוח).
- תבנית לסינון מינויים: משאירים את השדה ריק כדי לשלוח את כל האירועים, או מזינים תבנית לסינון כדי לשלוח רק אירועים ספציפיים.
- יעד: בוחרים את מקור הנתונים של העברת הנתונים
- לוחצים על התחלת השידור.
- היומנים יועברו עכשיו בסטרימינג בזמן אמת אל Google SecOps דרך Firehose.
יצירת מנתח מותאם אישית (אופציונלי)
אחרי שמטמיעים נתוני אבטחה בהתאמה אישית כיומנים לא מובנים, אפשר ליצור מנתח מותאם אישית כדי לנרמל את הנתונים לפורמט UDM, וכך לשפר את יכולת החיפוש והזיהוי.
מתי כדאי ליצור מנתח נתונים בהתאמה אישית
יוצרים מנתח מותאם אישית במקרים הבאים:
- צריך לחלץ שדות ספציפיים מפורמט יומן מותאם אישית
- רוצים להפעיל חיפוש ב-UDM בנתונים בהתאמה אישית
- כדי להשתמש בכללי זיהוי, צריך למפות שדות מותאמים אישית לשדות UDM רגילים
- רוצים לשפר את הביצועים של החיפוש על ידי הוספת אינדקס לשדות ספציפיים
יצירת סוג יומן מותאם אישית
- עוברים אל הגדרות SIEM > סוגי יומנים זמינים.
- לוחצים על בקשה של סוג יומן.
- בקטע יצירת סוג יומן בהתאמה אישית או בקשה של סוג יומן מוכן מראש, בוחרים באפשרות יצירת סוג יומן בהתאמה אישית.
- מציינים את הפרטים הבאים:
- שם סוג היומן: מזינים שם תיאורי (לדוגמה,
CUSTOM_SECURITY_ANALYTICS). - תיאור: מזינים תיאור של סוג היומן.
- יומנים לדוגמה: מדביקים 5-10 רשומות יומן לדוגמה בפורמט הגולמי שלהן.
- שם סוג היומן: מזינים שם תיאורי (לדוגמה,
- לוחצים על שליחה.
- סוג היומן המותאם אישית יהיה זמין תוך כ-10 דקות.
יצירת מנתח מותאם אישית
- עוברים אל SIEM Settings > Parsers (הגדרות SIEM > מנתחי נתונים).
- לוחצים על יצירת כלי ניתוח.
- בוחרים באפשרות Custom Parser (מנתח מותאם אישית).
- מציינים את הפרטים הבאים:
- שם מנתח: מזינים שם תיאורי
- סוג היומן: בוחרים את סוג היומן המותאם אישית (לדוגמה,
CUSTOM_SECURITY_ANALYTICS) - קוד מנתח התוכן: מזינים את הגדרות מנתח התוכן באמצעות שפת ההגדרות של מנתח התוכן של Google SecOps
- בודקים את מנתח היומנים באמצעות יומנים לדוגמה.
- לוחצים על שליחה כדי להפעיל את מנתח הנתונים.
דוגמה להגדרת כלי הניתוח
לפורמט יומן 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") }מידע נוסף על יצירת מנתחי נתונים בהתאמה אישית זמין במאמר ניהול מנתחי נתונים מוכנים מראש ומנתחי נתונים בהתאמה אישית.
אימות הטמעת הנתונים
אחרי שמגדירים את הפיד, צריך לוודא שהנתונים נקלטים בהצלחה.
בדיקת סטטוס הפיד
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- מוצאים את הפיד ברשימה.
- בודקים את העמודה סטטוס:
- פעיל: הפיד פועל ומבצע המרת נתונים
- שגיאה: אירעה שגיאה בפיד (לחיצה להצגת פרטים)
- מושהה: הפיד מושהה
חיפוש יומנים שהועברו
- עוברים אל חיפוש > סריקת יומן גולמי.
מזינים שאילתת חיפוש כדי למצוא את היומנים המותאמים אישית:
metadata.log_type = "CUSTOM_SECURITY_DATA_ANALYTICS"אם צריך, משנים את טווח הזמן.
לוחצים על חיפוש.
מוודאים שהיומנים מופיעים בתוצאות.
מעקב אחרי מדדי פיד
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על שם הפיד.
- עוברים לכרטיסייה מדדים.
- מעיינים במדדים הבאים:
- אירועים שהועברו: המספר הכולל של אירועים שהועברו
- 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.