איסוף יומנים של Auth0
גרסת המנתח: 16.0
מנתח הנתונים הזה מחלץ אירועים ביומן של Auth0 מהודעות בפורמט JSON. הוא מאתחל את שדות ה-UDM, מנתח את המטען הייעודי (payload) של ה-JSON, ממפה את השדות הרלוונטיים לסכימת ה-UDM ומסווג את האירועים על סמך השדה type, תוך הגדרת פעולות אבטחה וסוגי אירועים מתאימים.
לפני שמתחילים
ודאו שאתם עומדים בדרישות המוקדמות הבאות:
- מופע של Google SecOps.
- חשבון Auth0 עם ההרשאות הנדרשות.
הגדרת פידים
כדי להגדיר פיד:
- עוברים אל הגדרות > ניהול נתונים > פידים. אם אתם משתמשים בפלטפורמה של SIEM בלבד, עוברים אל הגדרות > פידים.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה Feed name, מזינים שם לפיד (לדוגמה, Auth0 Logs).
- בוחרים באפשרות Webhook בתור סוג המקור.
- בוחרים באפשרות AUTH_ZERO בתור Log type.
- לוחצים על הבא.
- אופציונלי: מציינים ערכים לפרמטרים הבאים של הקלט:
- Split delimiter: התו המשמש להפרדה בין שורות ביומן, כמו
\n. - מרחב השמות של הנכס: מרחב השמות של הנכס.
- תוויות הטמעה: התווית שנוספה לאירועים מהפיד הזה.
- Split delimiter: התו המשמש להפרדה בין שורות ביומן, כמו
- לוחצים על הבא.
- בודקים את הגדרות הפיד במסך סיום ולוחצים על שליחה.
- לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
- מעתיקים את המפתח הסודי ושומרים אותו. לא תוכלו לראות שוב את המפתח הסודי הזה. במקרה הצורך, אפשר ליצור מחדש מפתח סודי, אבל הפעולה הזו מבטלת את המפתח הסודי הקודם.
- בכרטיסייה פרטים, מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה. צריך לציין את כתובת ה-URL של נקודת הקצה הזו באפליקציית הלקוח.
- לוחצים על סיום.
יצירת מפתח API לפיד ה-Webhook
עוברים אל מסוףGoogle Cloud > Credentials.
לוחצים על Create credentials ואז על מפתח API.
מגבילים את הגישה של מפתח ה-API ל-Chronicle API.
מציינים את כתובת ה-URL של נקודת הקצה
- באפליקציית הלקוח, מציינים את כתובת ה-URL של נקודת הקצה (endpoint) ב-HTTPS שסופקה בפיד ה-webhook.
כדי להפעיל את האימות, צריך לציין את מפתח ה-API ואת המפתח הסודי כחלק מהכותרת בהתאמה אישית, בפורמט הבא:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRETהמלצה: ציינו את מפתח ה-API ככותרת במקום לציין אותו בכתובת ה-URL. אם לקוח ה-webhook שלכם לא תומך בכותרות בהתאמה אישית, אתם יכולים לציין את מפתח ה-API ואת המפתח הסודי באמצעות פרמטרים של שאילתה בפורמט הבא:
ENDPOINT_URL?key=API_KEY&secret=SECRET
מחליפים את מה שכתוב בשדות הבאים:
-
ENDPOINT_URL: כתובת ה-URL של נקודת הקצה של הפיד. -
API_KEY: מפתח ה-API לאימות ב-Google Security Operations. -
SECRET: המפתח הסודי שיצרתם כדי לאמת את הפיד.
הגדרת התראת Webhook של Auth0 ל-Google SecOps
- נכנסים למרכז הבקרה של Auth0.
- עוברים אל Monitoring > Streams.
- לוחצים על Create Log Stream.
- לוחצים על הכפתור Custom Webhook (תגובה לפעולה מאתר אחר בהתאמה אישית) ונותנים לה שם לבחירתכם. לדוגמה: Google SecOps Webhook.
- קובעים את ההגדרות הבאות:
- Payload URL: מזינים את כתובת ה-URL של נקודת הקצה של Google SecOps API.
- Content-Type: מגדירים את הכותרת Content-Type ל-application/json. כך Google SecOps יודע מה הפורמט של הנתונים שנשלחים.
- אופציונלי: טוקן הרשאה: מגדירים סוד לאבטחה נוספת. הוא ישמש לאימות האותנטיות של בקשות ה-webhook.
התאמה אישית של המטען הייעודי (payload): אתם יכולים להתאים אישית את המטען הייעודי שנשלח ל-Google SecOps על ידי שינוי קטגוריית האירוע. כך אתם יכולים לבחור נקודות ספציפיות על הגרף מהאירוע ב-Auth0 ולעצב אותן לפי הצורך ב-Google SecOps. במסמכי התיעוד של Auth0 מפורט מידע על משתני ההקשר הזמינים ועל אפשרויות הסקריפטים. מוודאים שהמטען הייעודי (payload) הסופי תואם לפורמט ה-UDM הצפוי של Google SecOps.
- לוחצים על שמירה כדי ליצור את ה-webhook.
- מפעילים את האירוע שמשויך ל-hook (לדוגמה, רושמים משתמש חדש, מתחברים).
- כדי לוודא שהיומנים נשלחים אל Google SecOps, בודקים את הפיד במסוף Google SecOps.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | Logic (פונקציה לוגית) |
|---|---|---|
client_id |
principal.asset.product_object_id |
ממופה ישירות מהשדה client_id. |
client_name |
principal.hostname |
ממופה ישירות מהשדה client_name. |
connection |
security_result.description |
ממופה ישירות מהשדה connection. |
connection_id |
security_result.rule_id |
ממופה ישירות מהשדה connection_id. |
date |
metadata.event_timestamp |
מנותח מהשדה date באמצעות פורמט ISO8601. |
description |
metadata.description |
ממופה ישירות מהשדה description. |
details.error |
security_result.detection_fields |
מופה מהשדה details.error. המפתח הוא "שגיאה". |
details.error.oauthError |
security_result.detection_fields |
מופה מהשדה details.error.oauthError. המפתח הוא "oauthError". |
details.error.type |
security_result.detection_fields |
מופה מהשדה details.error.type. המפתח הוא "oauth_error_type". |
details.ipOnAllowlist |
security_result.detection_fields |
מופה מהשדה details.ipOnAllowlist. המפתח הוא "ipOnAllowlist". |
details.link |
target.url |
ממופה ישירות מהשדה details.link אם הוא קיים, אחרת נגזר משדות אחרים (ראו בהמשך). |
details.request.auth.strategy |
security_result.detection_fields |
מופה מהשדה details.request.auth.strategy. המפתח הוא "strategy". |
details.request.body.app_metadata.blockedReason |
security_result.detection_fields |
מופה מהשדה details.request.body.app_metadata.blockedReason. המפתח הוא "blockedReason". |
details.request.body.app_metadata.customer_id |
target.user.product_object_id |
ממופה ישירות מהשדה details.request.body.app_metadata.customer_id. |
details.request.body.app_metadata.migrated |
security_result.detection_fields |
מופה מהשדה details.request.body.app_metadata.migrated. המפתח "הועבר". |
details.request.channel |
security_result.detection_fields |
מופה מהשדה details.request.channel. המפתח הוא "channel". |
details.request.method |
network.http.method |
ממופה ישירות מהשדה details.request.method אחרי המרה לאותיות רישיות. |
details.request.path |
target.url |
ממופה ישירות מהשדה details.request.path אם השדה details.link לא קיים, אחרת נגזר משדות אחרים (ראו בהמשך). |
details.response.body.email |
target.user.email_addresses |
ממופה ישירות מהשדה details.response.body.email. |
details.response.body.email_verified |
security_result.detection_fields |
מופה מהשדה details.response.body.email_verified. המפתח הוא "email_verified". |
details.response.body.nickname |
target.user.user_display_name |
ממופה ישירות מהשדה details.response.body.nickname. |
details.response.body.user_id |
target.user.userid |
ממופה ישירות מהשדה details.response.body.user_id. |
details.response.statusCode |
network.http.response_code |
ממופה ישירות מהשדה details.response.statusCode אחרי המרה למספר שלם. |
details.return_to |
target.url |
ממופה ישירות מהשדה details.return_to אם השדות details.link ו-details.request.path לא קיימים, אחרת נגזר משדות אחרים (ראו בהמשך). |
details.session_id |
network.session_id |
ממופה ישירות מהשדה details.session_id. |
details.stats.loginsCount |
additional.fields |
מופה מהשדה details.stats.loginsCount. המפתח הוא "loginsCount". |
details.requiresVerification |
security_result.detection_fields |
מופה מהשדה details.requiresVerification. המפתח הוא "requiresVerification". |
details.to |
target.user.email_addresses |
ממופה ישירות מהשדה details.to. |
hostname |
target.hostname |
ממופה ישירות מהשדה hostname. |
ip |
principal.ip |
ממופה ישירות מהשדה ip. |
js_data.audience |
target.url |
מיפוי ישיר מהשדה js_data.audience אם השדות details.link, details.request.path ו-details.return_to לא קיימים. |
js_data.details.body.email_verified |
security_result.detection_fields |
מופה מהשדה js_data.details.body.email_verified. המפתח הוא "email_verified". |
js_data.details.body.is_signup |
security_result.detection_fields |
מופה מהשדה js_data.details.body.is_signup. המפתח הוא "is_signup". |
js_data.details.body.transaction.redirect_uri |
target.url |
ממופה ישירות מהשדה js_data.details.body.transaction.redirect_uri אם השדות details.link, details.request.path, details.return_to ו-js_data.audience לא קיימים. |
js_data.scope |
security_result.detection_fields |
מופה מהשדה js_data.scope. המפתח הוא "scope". |
js_data.tracking_id |
security_result.detection_fields |
מופה מהשדה js_data.tracking_id. המפתח הוא "tracking_id". |
log_id |
metadata.product_log_id |
ממופה ישירות מהשדה log_id. |
metadata.log_type |
metadata.log_type |
ממופה ישירות מהשדה log_type. |
metadata.product_name |
metadata.product_name |
צריך להגדיר את הערך "AUTH_ZERO". |
metadata.vendor_name |
metadata.vendor_name |
צריך להגדיר את הערך "AUTH_ZERO". |
metadata.product_event_type |
metadata.product_event_type |
ממופה ישירות מהשדה type. |
network.http.parsed_user_agent |
network.http.parsed_user_agent |
מנותח מהשדה user_agent. |
network.http.user_agent |
network.http.user_agent |
ממופה ישירות מהשדה user_agent. |
security_result.action |
security_result.action |
נקבע לפי השדה type (ALLOW או BLOCK). אפשר לראות את קוד המנתח למיפויים ספציפיים. |
strategy |
security_result.detection_fields |
ממופה מהשדה strategy. המפתח הוא "strategy". |
strategy_type |
security_result.detection_fields |
ממופה מהשדה strategy_type. המפתח הוא "strategy_type". |
target.user.email_addresses |
target.user.email_addresses |
ממופה ישירות מהשדה user_name אם הוא כתובת אימייל, אחרת נגזר משדות אחרים (ראו למעלה). |
target.user.userid |
target.user.userid |
ממופה ישירות מהשדה user_id, או מהשדה details.response.body.user_id או user_name אם השדה user_id לא קיים. |
user_agent |
network.http.user_agent |
ממופה ישירות מהשדה user_agent. |
user_id |
target.user.userid |
ממופה ישירות מהשדה user_id. |
user_name |
target.user.email_addresses |
ממופה ישירות מהשדה user_name. צריך להגדיר את הערך "MACHINE" אם הערך של security_result.action הוא "ALLOW" והערך של type הוא "slo", "sapi", "s", "ss" או "ssa". צריך להגדיר את הערך "OTP" אם הערך של extensions.auth.type הוא "MACHINE" והערך של type הוא "slo". נקבע לפי שילוב של שדות, כולל type, client_name, ip, hostname ו-has_user. אפשר לראות את קוד המנתח למיפויים ספציפיים. |
יומן שינויים
הצגת יומן השינויים של המנתח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.