איסוף יומני פעילות של Microsoft Graph
המנתח הזה מחלץ שדות מיומני הפעילות של Microsoft Graph וממיר אותם למודל הנתונים המאוחד (UDM). הוא מאתחל שדות UDM, מנתח את המטען הייעודי (payload), מחלץ חותמות זמן, ממפה מאפיינים שונים לשדות UDM, מטפל בכתובות IP וביציאות, ומסווג את סוג האירוע על סמך הנוכחות של מידע על המשתמש ועל הרשת.
לפני שמתחילים
ודאו שאתם עומדים בדרישות המוקדמות הבאות:
- מופע של Google SecOps.
- גישה עם הרשאות ל-Microsoft Entra ID ולחשבונות אחסון ב-Azure.
הגדרת חשבון אחסון ב-Azure
- במסוף Azure, מחפשים חשבונות אחסון.
- לוחצים על יצירה.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- מינוי: בוחרים את המינוי.
- Resource Group: בוחרים את קבוצת המשאבים.
- אזור: בוחרים את האזור.
- ביצועים: בוחרים את רמת הביצועים הרצויה (מומלץ לבחור באפשרות "רגיל").
- Redundancy (יתירות): בוחרים את רמת היתירות הרצויה (מומלץ לבחור ב-GRS או ב-LRS).
- Storage account name: נותנים שם לחשבון האחסון החדש.
- לוחצים על Review + create.
- בודקים את הסקירה הכללית של החשבון ולוחצים על יצירה.
- בדף Storage Account Overview, בוחרים בתפריט המשנה Access keys בקטע Security + networking.
- לוחצים על הצגה לצד key1 או key2.
- לוחצים על העתקה ללוח כדי להעתיק את המפתח.
שומרים את המפתח במקום מאובטח כדי שתוכלו להשתמש בו בעתיד.
בדף Storage Account Overview, בוחרים בתפריט המשנה Endpoints בקטע Settings.
לוחצים על Copy to clipboard כדי להעתיק את כתובת ה-URL של נקודת הקצה של Blob service (לדוגמה, https://
.blob.core.windows.net ).שומרים את כתובת ה-URL של נקודת הקצה במיקום מאובטח לשימוש עתידי.
הגדרת ייצוא של יומני הפעילות של Microsoft Graph לחשבון אחסון
- במסוף Azure, מחפשים את Entra ID.
- בוחרים באפשרות Monitoring (מעקב) > Diagnostic settings (הגדרות אבחון).
- לוחצים על + Add diagnostic setting.
- נותנים להגדרה שם ייחודי (לדוגמה, ms-graph-activity).
- בוחרים את הקטגוריה MicrosoftGraphActivityLog שרוצים לייצא ל-Google SecOps.
- בקטע Destination details, בוחרים באפשרות Archive to a storage account.
- בוחרים את המינוי ואת חשבון האחסון שיצרתם בשלב הקודם.
לוחצים על Save.
איך מגדירים את יומני הפעילות של Microsoft Graph
- עוברים אל הגדרות > ניהול נתונים > פידים. אם אתם משתמשים בפלטפורמה של SIEM בלבד, עוברים אל הגדרות > פידים.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה Feed name, נותנים שם לפיד, לדוגמה Microsoft Graph Activity Logs.
- בוחרים באפשרות Microsoft Azure Blob Storage V2 בתור Source type.
- בוחרים באפשרות Microsoft Graph Activity Logs בתור Log type.
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
Azure uri: כתובת ה-URL של נקודת הקצה של ה-blob.
ENDPOINT_URL/BLOB_NAMEמחליפים את מה שכתוב בשדות הבאים:
ENDPOINT_URL: כתובת ה-URL של נקודת הקצה של ה-blob (https://<storageaccountname>.blob.core.windows.net)-
BLOB_NAME: השם של ה-blob (לדוגמה, insights-logs-)
אפשרויות למחיקת מקור: בוחרים את אפשרות המחיקה הרצויה.
גיל הקובץ המקסימלי: קבצים ששונו במספר הימים האחרונים. ברירת המחדל היא 180 ימים.
מפתח משותף: מפתח הגישה ל-Azure Blob Storage.
לוחצים על הבא.
בודקים את הגדרות הפיד החדש במסך סיום ולוחצים על שליחה.
יומנים לדוגמה של יומני פעילות נתמכים ב-Microsoft Graph
פורמט JSON רגיל
{ "time": "2024-02-24T02:36:04.9540786Z", "resourceId": "/TENANTS/00000000-0000-0000-0000-000000000000/PROVIDERS/MICROSOFT.AADIAM", "operationName": "Microsoft Graph Activity", "operationVersion": "v1.0", "category": "MicrosoftGraphActivityLogs", "tenantId": "00000000-0000-0000-0000-000000000000", "resultSignature": "200", "durationMs": 856631, "callerIpAddress": "192.0.2.1", "correlationId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Level": 4, "location": "South Central US", "properties": { "timeGenerated": "2024-02-24T02:36:04.9540786Z", "location": "South Central US", "requestId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "operationId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "clientRequestId": "ffffffff-gggg-hhhh-iiii-jjjjjjjjjjjj", "apiVersion": "v1.0", "requestMethod": "GET", "responseStatusCode": 200, "tenantId": "00000000-0000-0000-0000-000000000000", "ipAddress": "192.0.2.1", "userAgent": "Internal-Service-Scanner", "requestUri": "https://graph.microsoft.com/v1.0/subscribedSkus", "durationMs": 856631, "responseSizeBytes": 11808, "signInActivityId": "REDACTED_ACTIVITY_ID", "roles": "Organization.Read.All Policy.Read.All User.Read.All", "tokenIssuedAt": "2024-02-23T23:48:42Z", "appId": "00000000-0000-0000-0000-000000000000", "userId": null, "servicePrincipalId": "11111111-2222-3333-4444-555555555555", "identityProvider": "https://sts.windows.net/00000000-0000-0000-0000-000000000000/", "clientAuthMethod": "2" } }פורמט PascalCase של Azure Monitor
{ "TimeGenerated": "2024-06-07T11:52:40.4216173Z", "Location": "East US", "RequestId": "bbbbbbbb-1111-2222-3333-cccccccccccc", "OperationId": "bbbbbbbb-1111-2222-3333-cccccccccccc", "ClientRequestId": "dddddddd-4444-5555-6666-eeeeeeeeeeee", "ApiVersion": "v1.0", "RequestMethod": "GET", "ResponseStatusCode": 200, "AadTenantId": "00000000-0000-0000-0000-000000000000", "IPAddress": "198.51.100.50", "UserAgent": "LokiServer/1.2024", "RequestUri": "https://graph.microsoft.com/v1.0/users/user@example.com", "DurationMs": 1309774, "ResponseSizeBytes": 192, "SignInActivityId": "REDACTED_ACTIVITY_ID", "TokenIssuedAt": "2024-0G-07T11:47:39.0000000Z", "AppId": "00000000-0000-0000-0000-000000000000", "UserId": "user_id_9999", "Scopes": "User.Read User.Read.All", "ClientAuthMethod": 2, "_ItemId": "unique_item_id_001", "Type": "MicrosoftGraphActivityLogs", "TenantId": "00000000-0000-0000-0000-000000000000" }שדות חובה ב-UDI
{ "time": "2024-08-14T19:37:39.2484449Z", "resourceId": "/TENANTS/00000000-0000-0000-0000-000000000000/PROVIDERS/MICROSOFT.AADIAM", "operationName": "Microsoft Graph Activity", "resultSignature": "200", "callerIpAddress": "203.0.113.10", "properties": { "__UDI_RequiredFields_TenantId": "00000000-0000-0000-0000-000000000000", "__UDI_RequiredFields_UniqueId": "uuid-123456-7890", "timeGenerated": "2024-08-14T19:37:39.2484449Z", "requestId": "uuid-123456-7890", "requestMethod": "GET", "responseStatusCode": 200, "ipAddress": "203.0.113.10", "userAgent": "Security-Audit-Tool", "requestUri": "https://graph.microsoft.com/v1.0/auditLogs/directoryAudits", "UserPrincipalObjectID": "user_obj_8888", "appId": "00000000-0000-0000-0000-000000000000" }, "tenantId": "00000000-0000-0000-0000-000000000000" }פורמט UDI בגרסת בטא
{ "time": "2024-08-14T18:37:12.8698765Z", "operationVersion": "beta", "callerIpAddress": "2001:db8::ff00:42:8329", "level": "Informational", "properties": { "__UDI_RequiredFields_TenantId": "00000000-0000-0000-0000-000000000000", "apiVersion": "beta", "requestMethod": "GET", "responseStatusCode": 404, "ipAddress": "2001:db8::ff00:42:8329", "requestUri": "https://graph.microsoft.com/beta/users/user_id_masked/photos", "userId": "user_id_7777", "appId": "00000000-0000-0000-0000-000000000000" } }
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | Logic (פונקציה לוגית) |
|---|---|---|
callerIpAddress |
principal.asset.ip |
השדה callerIpAddress ביומן הגולמי מועתק לשדה ב-UDM. |
callerIpAddress |
principal.ip |
השדה callerIpAddress ביומן הגולמי מועתק לשדה ב-UDM. |
category |
security_result.category_details |
השדה category ביומן הגולמי מועתק לשדה ב-UDM. |
correlationId |
security_result.detection_fields.value |
השדה correlationId ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא correlationId. |
Level |
security_result.detection_fields.value |
השדה Level ביומן הגולמי מומר למחרוזת ומועתק לשדה UDM, שבו המפתח הוא Level. |
operationName |
metadata.product_event_type |
השדה operationName ביומן הגולמי מועתק לשדה ב-UDM. |
operationVersion |
additional.fields.value.string_value |
השדה operationVersion ביומן הגולמי מועתק לשדה UDM, שבו המפתח הוא operationVersion. |
properties.apiVersion |
metadata.product_version |
השדה properties.apiVersion ביומן הגולמי מועתק לשדה ב-UDM. |
properties.appId |
target.resource.product_object_id |
השדה properties.appId ביומן הגולמי מועתק לשדה ב-UDM. |
properties.atContent |
additional.fields.value.string_value |
השדה properties.atContent ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא atContent. |
properties.clientAuthMethod |
extensions.auth.auth_details |
בהתאם לערך של properties.clientAuthMethod, השדה של ה-UDM מוגדר כ-"Public Client" (0), "מזהה לקוח/סוד לקוח" (1) או "אישור לקוח" (2). |
properties.clientRequestId |
additional.fields.value.string_value |
השדה properties.clientRequestId ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא clientRequestId. |
properties.durationMs |
network.session_duration.seconds |
השדה properties.durationMs ביומן הגולמי מומר מאלפיות השנייה לשניות ומועתק לשדה ה-UDM. |
properties.identityProvider |
security_result.detection_fields.value |
השדה properties.identityProvider ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא identityProvider. |
properties.ipAddress |
principal.asset.ip |
כתובת ה-IP מהשדה properties.ipAddress ביומן הגולמי נשלפת ומועתקת לשדה ב-UDM. |
properties.ipAddress |
principal.ip |
כתובת ה-IP מהשדה properties.ipAddress ביומן הגולמי נשלפת ומועתקת לשדה ב-UDM. |
properties.location |
principal.location.name |
השדה properties.location ביומן הגולמי מועתק לשדה ב-UDM. |
properties.operationId |
security_result.detection_fields.value |
השדה properties.operationId ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא operationId. |
properties.requestMethod |
network.http.method |
השדה properties.requestMethod ביומן הגולמי מועתק לשדה ב-UDM. |
properties.requestId |
metadata.product_log_id |
השדה properties.requestId ביומן הגולמי מועתק לשדה ב-UDM. |
properties.responseSizeBytes |
network.received_bytes |
השדה properties.responseSizeBytes ביומן הגולמי מומר למספר שלם ללא סימן ומועתק לשדה ה-UDM. |
properties.responseStatusCode |
network.http.response_code |
השדה properties.responseStatusCode ביומן הגולמי מומר למספר שלם ומועתק לשדה ה-UDM. |
properties.roles |
additional.fields.value.string_value |
השדה properties.roles ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא roles. |
properties.scopes |
additional.fields.value.string_value |
השדה properties.scopes ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא Scopes. |
properties.servicePrincipalId |
principal.user.userid |
השדה properties.servicePrincipalId ביומן הגולמי מועתק לשדה ב-UDM אם השדה properties.userId ריק. |
properties.signInActivityId |
network.session_id |
השדה properties.signInActivityId ביומן הגולמי מועתק לשדה ב-UDM. |
properties.tenantId |
metadata.product_deployment_id |
השדה properties.tenantId ביומן הגולמי מועתק לשדה ב-UDM. |
properties.tokenIssuedAt |
additional.fields.value.string_value |
השדה properties.tokenIssuedAt ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא tokenIssuedAt. |
properties.userAgent |
network.http.user_agent |
השדה properties.userAgent ביומן הגולמי מועתק לשדה ב-UDM. |
properties.userId |
principal.user.userid |
השדה properties.userId ביומן הגולמי מועתק לשדה ב-UDM. |
properties.wids |
security_result.detection_fields.value |
השדה properties.wids ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא wids. |
resourceId |
target.resource.attribute.labels.value |
השדה resourceId ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא Resource ID. |
resultSignature |
additional.fields.value.string_value |
השדה resultSignature ביומן הגולמי מועתק לשדה ב-UDM, שבו המפתח הוא resultSignature. |
time |
metadata.event_timestamp |
השדה time ביומן הגולמי מנותח, מומר לחותמת זמן ומועתק לשדה ב-UDM. השדה event.idm.read_only_udm.metadata.event_type ב-UDM מוגדר כ-"NETWORK_HTTP" אם has_principal הוא True ו-network.http לא ריק, כ-"STATUS_UPDATE" אם has_principal הוא True ו-network.http ריק, או כ-"GENERIC_EVENT" במקרים אחרים. השדה UDM מוגדר ל-"Microsoft Graph". השדה UDM מוגדר ל-"Microsoft". |
יומן שינויים
הצגת יומן השינויים של המנתח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.