איסוף יומנים של ניתוח נתוני אבטחה בהתאמה אישית
גרסת המנתח: 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
יצירת הפיד
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-webhook). - בוחרים באפשרות Webhook בתור סוג המקור.
- בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- תו מפריד לפיצול: אופציונלי: מזינים תו מפריד כדי לפצל אירועים עם כמה שורות. ערכים נפוצים:
-
\n– תו מפריד של שורה חדשה (הכי נפוץ ב-NDJSON) - אם כל בקשה מכילה אירוע אחד, אפשר להשאיר את השדה ריק
-
- מרחב השמות של הנכס: מרחב השמות של הנכס
- תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה
- תו מפריד לפיצול: אופציונלי: מזינים תו מפריד כדי לפצל אירועים עם כמה שורות. ערכים נפוצים:
- לוחצים על הבא.
- בודקים את הגדרות הפיד החדש במסך סיום ולוחצים על שליחה.
יצירה ושמירה של מפתח סודי
אחרי שיוצרים את הפיד, צריך ליצור מפתח סודי לאימות:
- בדף הפרטים של הפיד, לוחצים על יצירת מפתח סודי.
- תיפתח תיבת דו-שיח עם המפתח הסודי.
מעתיקים ושומרים את המפתח הסודי באופן מאובטח.
קבלת כתובת ה-URL של נקודת הקצה של הפיד
- עוברים לכרטיסייה פרטים של הפיד.
- בקטע Endpoint Information, מעתיקים את Feed endpoint URL.
הפורמט של כתובת ה-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>.שומרים את כתובת ה-URL הזו לשלבים הבאים.
לוחצים על סיום.
יצירת מפתח API של Google Cloud
כדי לבצע אימות ב-Google SecOps, צריך מפתח API. יוצרים מפתח API מוגבל במסוף Google Cloud.
יצירת מפתח ה-API
- נכנסים אל הדף Credentials במסוף Google Cloud.
- בוחרים את הפרויקט (הפרויקט שמשויך למכונה של Chronicle).
- לוחצים על Create credentials > מפתח API.
- מפתח API נוצר ומוצג בתיבת דו-שיח.
- לוחצים על מפתח API כדי להגביל את המפתח.
הגבלת מפתח ה-API
- בדף ההגדרות מפתח API:
- שם: מזינים שם תיאורי (לדוגמה,
Chronicle Webhook API Key).
- שם: מזינים שם תיאורי (לדוגמה,
- בקטע API restrictions (הגבלות על API):
- בוחרים באפשרות הגבלת מקש.
- בתפריט הנפתח Select APIs, מחפשים ובוחרים את Google SecOps API (או Chronicle API).
- לוחצים על Save.
- מעתיקים את הערך של מפתח ה-API מהשדה API key שבחלק העליון של הדף.
שומרים את מפתח ה-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 תומכים בכמה שיטות אימות. בוחרים את השיטה שנתמכת באפליקציה.
שיטה 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://{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
- פותחים את מסוף Amazon S3.
- לוחצים על Create Bucket.
- מזינים את פרטי ההגדרה הבאים:
- Bucket Name: נותנים לקטגוריה שם בעל משמעות (לדוגמה,
custom-security-analytics-logs). - אזור: בוחרים את האזור המועדף ב-AWS (לדוגמה,
us-east-1).
- Bucket Name: נותנים לקטגוריה שם בעל משמעות (לדוגמה,
- לוחצים על יצירה.
יצירת משתמש IAM עם גישה ל-S3
- פותחים את מסוף IAM.
- לוחצים על משתמשים > הוספת משתמש.
- מזינים שם משתמש (לדוגמה,
chronicle-s3-reader). - בוחרים באפשרות גישה פרוגרמטית.
- לוחצים על הבא: הרשאות.
- בוחרים באפשרות צירוף מדיניות קיימת ישירות.
- מחפשים את AmazonS3FullAccess ובוחרים בה.
- לוחצים על Next: Tags.
- לוחצים על הבא: בדיקה.
- לוחצים על יצירת משתמש.
- לוחצים על Download .csv file כדי לשמור את Access Key ID ואת Secret Access Key.
- לוחצים על 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.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-s3). - בוחרים באפשרות Amazon S3 V2 בתור סוג המקור.
- בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
S3 URI: ה-URI של הקטגוריה בפורמט:
s3://custom-security-analytics-logs/security-events/אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- Never: אף פעם לא למחוק קבצים אחרי העברות (מומלץ לבדיקה).
- מחיקת קבצים שהועברו: מחיקת קבצים אחרי שהם הועברו בהצלחה.
- מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 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.
- לוחצים על הוספת פיד חדש.
- לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-gcs). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות Custom Security Data Analytics בתור Log type.
- לוחצים על Get Service Account (קבלת חשבון שירות).
תוצג כתובת אימייל ייחודית של חשבון שירות, לדוגמה:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comמעתיקים את כתובת האימייל הזו כדי להשתמש בה בשלב הבא.
מתן הרשאות IAM
- נכנסים לדף Cloud Storage > Buckets.
- לוחצים על שם הקטגוריה.
- עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מזינים את פרטי ההגדרה הבאים:
- Add principals (הוספת חשבונות משתמשים): מדביקים את כתובת האימייל של חשבון השירות של Google SecOps.
- הקצאת תפקידים: בוחרים באפשרות צפייה באובייקטים באחסון.
לוחצים על Save.
הגדרת פיד של Google SecOps ל-GCS
- ממשיכים מהדף ליצירת פיד (או עוברים אל הגדרות SIEM > פידים > הוספת פיד חדש).
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:
gs://custom-security-analytics-logs/security-events/אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- Never: אף פעם לא למחוק קבצים אחרי העברות (מומלץ לבדיקה).
- מחיקת קבצים שהועברו: מחיקת קבצים אחרי שהם הועברו בהצלחה.
- מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות הטמעה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את הגדרות הפיד החדש במסך סיום ולוחצים על שליחה.
אפשרות 4: הטמעה של Azure Blob Storage V2 (ייצוא באצווה)
אתם יכולים להשתמש בשיטה הזו אם אפליקציית האבטחה המותאמת אישית שלכם יכולה לייצא יומנים ל-Azure Blob Storage.
יצירת חשבון אחסון ב-Azure
- ב-Azure portal, מחפשים Storage accounts.
- לוחצים על + Create.
מספקים את פרטי ההגדרה הבאים:
הגדרה ערך מינוי בוחרים את המינוי ל-Azure. קבוצת משאבים בחירת קבוצה קיימת או יצירת קבוצה חדשה שם חשבון האחסון מזינים שם ייחודי (לדוגמה, customsecuritylogs)אזור בוחרים את האזור (לדוגמה, East US)ביצועים רגיל (מומלץ) יתירות GRS (Geo-redundant storage) או LRS (Locally redundant storage) לוחצים על Review + create.
בודקים את הסקירה הכללית של החשבון ולוחצים על יצירה.
מחכים עד שהפריסה תסתיים.
קבלת פרטי הכניסה לחשבון האחסון
- עוברים אל חשבון האחסון שיצרתם.
- בסרגל הניווט הימני, בקטע Security + networking, לוחצים על Access keys.
- לוחצים על הצגת מקשים.
- מעתיקים ושומרים את הפרטים הבאים לשימוש בהמשך:
- שם חשבון האחסון:
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.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-azure). - בקטע Source type, בוחרים באפשרות Microsoft Azure Blob Storage V2.
- בוחרים באפשרות ניתוח נתוני אבטחה בהתאמה אישית בתור סוג היומן.
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
Azure URI: מזינים את כתובת ה-URL של נקודת הקצה של Blob Service עם הנתיב של המאגר:
https://customsecuritylogs.blob.core.windows.net/security-events/אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- אף פעם: לא למחוק קבצים אחרי ההעברה.
- מחיקת קבצים שהועברו: מחיקת קבצים אחרי שהם הועברו בהצלחה.
- מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).
מפתח משותף: מזינים את ערך המפתח המשותף (מפתח הגישה) מחשבון האחסון.
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות הטמעה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
אפשרות 5: הטמעה של Amazon Data Firehose (סטרימינג בזמן אמת)
השיטה הזו מתאימה אם אפליקציית האבטחה המותאמת אישית שלכם כותבת יומנים ב-Amazon CloudWatch Logs, ואתם צריכים סטרימינג בזמן אמת ל-Google SecOps.
יצירת פיד Firehose ב-Google SecOps
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
custom-security-analytics-firehose). - בוחרים באפשרות Amazon Data Firehose בתור סוג המקור.
- בוחרים באפשרות Custom Security Data Analytics בתור Log type.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- תו מפריד לפיצול: אופציונלי: מזינים
\nכדי לפצל יומנים עם תו מפריד של שורה חדשה. - מרחב השמות של הנכס: מרחב השמות של הנכס.
- תוויות הטמעה: התווית שתתווסף לאירועים מהפיד הזה.
- תו מפריד לפיצול: אופציונלי: מזינים
- לוחצים על הבא.
- בודקים את הגדרות הפיד ולוחצים על שליחה.
- לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
- מעתיקים ושומרים את המפתח הסודי, כי לא תוכלו לראות אותו שוב.
- עוברים לכרטיסייה פרטים.
- מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה.
- לוחצים על סיום.
יצירת מפתח API של Google Cloud
- נכנסים לדף Credentials במסוף Google Cloud בכתובת https://console.cloud.google.com/apis/credentials
- לוחצים על Create credentials ואז על מפתח API.
- לוחצים על מפתח API כדי להגביל את המפתח.
- בקטע API restrictions, בוחרים באפשרות Restrict key.
- מחפשים ובוחרים את Google SecOps API.
- לוחצים על Save.
- מעתיקים ושומרים את מפתח ה-API.
יצירת כתובת ה-URL של נקודת הקצה (endpoint)
מוסיפים את מפתח ה-API לכתובת ה-URL של נקודת הקצה של הפיד בפורמט הבא:
<FEED_ENDPOINT_URL>?key=<API_KEY>לדוגמה:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...שומרים את כתובת ה-URL המלאה הזו לשלב הבא.
יצירת מדיניות IAM ל-Firehose
- במסוף AWS, עוברים אל IAM > Policies > Create policy > הכרטיסייה 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.
בוחרים באפשרות Custom trust policy ומדביקים:
{ "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.
מספקים את פרטי ההגדרה הבאים:
מקור ויעד:
- מקור: בוחרים באפשרות העלאה ישירה או מקורות אחרים.
- יעד: בוחרים באפשרות נקודת קצה (endpoint) מסוג HTTP.
שם מקור הנתונים:
- שם מקור הנתונים: מזינים
CustomSecurityToChronicle
- שם מקור הנתונים: מזינים
יעד של נקודת קצה (endpoint) מסוג HTTP:
- כתובת ה-URL של נקודת הקצה (endpoint) בפרוטוקול HTTP: מזינים את כתובת ה-URL המלאה של נקודת הקצה שיצרתם קודם (נקודת הקצה של הפיד + מפתח ה-API)
- קידוד תוכן: בוחרים באפשרות GZIP (מומלץ כדי לחסוך ברוחב פס)
כותרות HTTP בהתאמה אישית:
- לוחצים על הוספת כותרת HTTP בהתאמה אישית.
- שם הכותרת: מזינים
X-Goog-Chronicle-Auth - ערך הכותרת: מזינים את המפתח הסודי ששמרתם בשלב קודם
הגדרות הגיבוי:
- גיבוי של רשומת המקור ב-Amazon S3: בוחרים באפשרות נתונים שנכשלו בלבד (מומלץ)
- קטגוריית S3: בוחרים קטגוריה קיימת או יוצרים קטגוריה חדשה לרשומות שנכשלו
הצעות למאגר זמני:
- גודל המאגר: מזינים
1MiB (המינימום לנקודות קצה של HTTP) - מרווח חוצץ: מזינים
60שניות
- גודל המאגר: מזינים
משך הניסיון החוזר:
- משך הניסיון החוזר: מזינים
300שניות (5 דקות)
- משך הניסיון החוזר: מזינים
לוחצים על Create delivery stream.
מחכים שהסטטוס של מקור הנתונים ישתנה ל-Active (דקה או שתיים).
הרשמה של קבוצת יומנים ב-CloudWatch ל-Firehose
- ב-AWS Console, עוברים אל CloudWatch > Logs > Log groups.
- בוחרים את קבוצת יומני היעד שמכילה את יומני ניתוח האבטחה המותאמים אישית.
- לוחצים על הכרטיסייה מסנני מינויים.
- לוחצים על Create > Create Amazon Kinesis Data Firehose subscription filter.
- מספקים את פרטי ההגדרה הבאים:
- יעד: בוחרים בזרם העברת נתונים
CustomSecurityToChronicle. - מתן הרשאה: בוחרים את התפקיד
CloudWatchLogsToFirehoseRole. - thought
Subscription filter name: מזינים
CustomSecurityToChronicle. - פורמט יומן: בוחרים באפשרות אחר (המערכת של Google SecOps מטפלת בניתוח).
- תבנית של מסנן מינויים: משאירים ריק כדי לשלוח את כל האירועים, או מזינים תבנית של מסנן כדי לשלוח רק אירועים ספציפיים.
- יעד: בוחרים בזרם העברת נתונים
- לוחצים על התחלת השידור.
- היומנים יועברו עכשיו בזמן אמת ל-Google SecOps דרך Firehose.
יצירת מנתח מותאם אישית (אופציונלי)
אחרי שמטמיעים נתוני אבטחה בהתאמה אישית כיומנים לא מובנים, אפשר ליצור מנתח מותאם אישית כדי לנרמל את הנתונים לפורמט UDM לשיפור יכולת החיפוש והזיהוי.
מתי כדאי ליצור מנתח נתונים בהתאמה אישית
יוצרים מנתח מותאם אישית במקרים הבאים:
- צריך לחלץ שדות ספציפיים מפורמט יומן מותאם אישית
- אתם רוצים להפעיל חיפוש UDM בנתונים בהתאמה אישית
- כדי ליצור כללי זיהוי, צריך למפות שדות ייעודיים לשדות UDM רגילים
- רוצים לשפר את הביצועים של החיפוש על ידי יצירת אינדקס של שדות ספציפיים
יצירת סוג יומן בהתאמה אישית
- עוברים אל SIEM Settings > Available Log Types (הגדרות SIEM > סוגי יומנים זמינים).
- לוחצים על בקשה לסוג יומן.
- בקטע Create a custom log type or request a prebuilt log type, בוחרים באפשרות Create a custom log type.
- ממלאים את הפרטים הבאים:
- שם סוג היומן: מזינים שם תיאורי (לדוגמה,
CUSTOM_SECURITY_ANALYTICS). - תיאור: מזינים תיאור של סוג היומן.
- יומנים לדוגמה: מדביקים 5-10 רשומות יומן לדוגמה בפורמט הגולמי שלהן.
- שם סוג היומן: מזינים שם תיאורי (לדוגמה,
- לוחצים על שליחה.
- סוג היומן בהתאמה אישית יהיה זמין תוך כ-10 דקות.
יצירת מנתח מותאם אישית
- עוברים אל הגדרות SIEM > מנתחי נתונים.
- לוחצים על Create Parser.
- בוחרים באפשרות Custom Parser.
- ממלאים את הפרטים הבאים:
- שם מנתח התוכן: מזינים שם תיאורי
- סוג היומן: בוחרים את סוג היומן בהתאמה אישית (לדוגמה,
CUSTOM_SECURITY_ANALYTICS) - קוד מנתח: מזינים את הגדרות מנתח באמצעות שפת ההגדרות של מנתח Google SecOps
- בודקים את מנתח היומנים באמצעות יומנים לדוגמה.
- לוחצים על 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") }מידע נוסף על יצירת מנתחים מותאמים אישית זמין במאמר ניהול מנתחים מובנים ומותאמים אישית.
אימות הטמעת הנתונים
אחרי שמגדירים את הפיד, צריך לוודא שהנתונים מוזנים בהצלחה.
בדיקת סטטוס הפיד
- עוברים אל SIEM Settings > Feeds.
- מוצאים את הפיד ברשימה.
- בודקים את העמודה סטטוס:
- פעיל: הפיד פועל ומבצע המרת נתונים
- שגיאה: הייתה שגיאה בפיד (לחיצה להצגת פרטים)
- מושהה: הפיד מושהה
חיפוש יומנים שנטמעו
- עוברים אל חיפוש > סריקת יומן גולמי.
כדי למצוא את היומנים המותאמים אישית, מזינים שאילתת חיפוש:
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
בעיה: קבצים ישנים לא נבלעים
- הגורם: ההגדרה 'גיל מקסימלי של קובץ' מחריגה קבצים ישנים
- פתרון: מגדילים את הערך של "גיל הקובץ המקסימלי" בהגדרות הפיד.
בעיות בהטמעה של 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.