Raccogli i log delle attività di Microsoft Graph
Questo parser estrae i campi dai log delle attività di Microsoft Graph, trasformandoli nel formato UDM (Unified Data Model). Inizializza i campi UDM, analizza il payload, estrae i timestamp, mappa varie proprietà ai campi UDM, gestisce gli indirizzi IP e le porte e classifica il tipo di evento in base alla presenza di informazioni principali e di rete.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Accesso con privilegi a Microsoft Entra ID e agli account di archiviazione Azure.
Configura l'account di archiviazione Azure
- Nella console Azure, cerca gli account di archiviazione.
- Fai clic su Crea.
- Specifica i valori per i seguenti parametri di input:
- Abbonamento: seleziona l'abbonamento.
- Gruppo di risorse: seleziona il gruppo di risorse.
- Regione: seleziona la regione.
- Prestazioni: seleziona il livello di prestazioni che preferisci (consigliamo Standard).
- Ridondanza: seleziona il livello di ridondanza che preferisci (consigliamo GRS o LRS).
- Nome account di archiviazione: inserisci un nome per il nuovo account di archiviazione.
- Fai clic su Review + create (Rivedi e crea).
- Esamina la panoramica dell'account e fai clic su Crea.
- Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Chiavi di accesso in Sicurezza + networking.
- Fai clic su Mostra accanto a key1 o key2.
- Fai clic su Copia negli appunti per copiare la chiave.
Salva la chiave in un luogo sicuro per riferimento futuro.
Nella pagina Panoramica account di archiviazione, seleziona il sottomenu Endpoint in Impostazioni.
Fai clic su Copia negli appunti per copiare l'URL dell'endpoint del servizio BLOB (ad esempio, https://
.blob.core.windows.net ).Salva l'URL dell'endpoint in una posizione sicura per riferimento futuro.
Configura l'esportazione dei log delle attività di Microsoft Graph nell'account di archiviazione
- Nella console Azure, cerca Entra ID.
- Seleziona Monitoraggio > Impostazioni di diagnostica.
- Fai clic su + Add diagnostic setting (+ Aggiungi impostazione di diagnostica).
- Assegna un nome univoco all'impostazione (ad esempio, ms-graph-activity).
- Seleziona la categoria MicrosoftGraphActivityLog che vuoi esportare in Google SecOps.
- In Dettagli destinazione, seleziona Archivia in un account di archiviazione.
- Seleziona l'abbonamento e l'account di archiviazione che hai creato nel passaggio precedente.
Fai clic su Salva.
Come configurare i log delle attività di Microsoft Graph
- Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed, ad esempio Log delle attività di Microsoft Graph.
- Seleziona Microsoft Azure Blob Storage V2 come Tipo di origine.
- Seleziona Log delle attività di Microsoft Graph come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URI Azure: l'URL dell'endpoint del blob.
ENDPOINT_URL/BLOB_NAMESostituisci quanto segue:
ENDPOINT_URL: l'URL dell'endpoint blob (https://<storageaccountname>.blob.core.windows.net)BLOB_NAME: il nome del blob (ad esempio, insights-logs-)
Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
Età massima del file: file modificati negli ultimi giorni. Il valore predefinito è 180 giorni.
Chiave condivisa: la chiave di accesso ad Azure Blob Storage.
Fai clic su Avanti.
Controlla la nuova configurazione del feed di notizie nella schermata Finalizza e poi fai clic su Invia.
Log di esempio dei log delle attività di Microsoft Graph supportati
JSON standard
{ "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" } }Formato PascalCase di Monitoraggio di Azure
{ "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" }Campi obbligatori per l'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" }Formato beta 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" } }
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
callerIpAddress |
principal.asset.ip |
Il campo del log non elaborato callerIpAddress viene copiato nel campo UDM. |
callerIpAddress |
principal.ip |
Il campo del log non elaborato callerIpAddress viene copiato nel campo UDM. |
category |
security_result.category_details |
Il campo del log non elaborato category viene copiato nel campo UDM. |
correlationId |
security_result.detection_fields.value |
Il campo del log non elaborato correlationId viene copiato nel campo UDM, dove la chiave è correlationId. |
Level |
security_result.detection_fields.value |
Il campo del log non elaborato Level viene convertito in stringa e copiato nel campo UDM, dove la chiave è Level. |
operationName |
metadata.product_event_type |
Il campo del log non elaborato operationName viene copiato nel campo UDM. |
operationVersion |
additional.fields.value.string_value |
Il campo del log non elaborato operationVersion viene copiato nel campo UDM, dove la chiave è operationVersion. |
properties.apiVersion |
metadata.product_version |
Il campo del log non elaborato properties.apiVersion viene copiato nel campo UDM. |
properties.appId |
target.resource.product_object_id |
Il campo del log non elaborato properties.appId viene copiato nel campo UDM. |
properties.atContent |
additional.fields.value.string_value |
Il campo del log non elaborato properties.atContent viene copiato nel campo UDM, dove la chiave è atContent. |
properties.clientAuthMethod |
extensions.auth.auth_details |
In base al valore di properties.clientAuthMethod, il campo UDM viene impostato su "Public Client" (0), "Client ID/Client Secret" (1) o "Certificato client" (2). |
properties.clientRequestId |
additional.fields.value.string_value |
Il campo del log non elaborato properties.clientRequestId viene copiato nel campo UDM, dove la chiave è clientRequestId. |
properties.durationMs |
network.session_duration.seconds |
Il campo del log non elaborato properties.durationMs viene convertito da millisecondi a secondi e copiato nel campo UDM. |
properties.identityProvider |
security_result.detection_fields.value |
Il campo del log non elaborato properties.identityProvider viene copiato nel campo UDM, dove la chiave è identityProvider. |
properties.ipAddress |
principal.asset.ip |
L'indirizzo IP del campo del log non elaborato properties.ipAddress viene estratto e copiato nel campo UDM. |
properties.ipAddress |
principal.ip |
L'indirizzo IP del campo del log non elaborato properties.ipAddress viene estratto e copiato nel campo UDM. |
properties.location |
principal.location.name |
Il campo del log non elaborato properties.location viene copiato nel campo UDM. |
properties.operationId |
security_result.detection_fields.value |
Il campo del log non elaborato properties.operationId viene copiato nel campo UDM, dove la chiave è operationId. |
properties.requestMethod |
network.http.method |
Il campo del log non elaborato properties.requestMethod viene copiato nel campo UDM. |
properties.requestId |
metadata.product_log_id |
Il campo del log non elaborato properties.requestId viene copiato nel campo UDM. |
properties.responseSizeBytes |
network.received_bytes |
Il campo del log non elaborato properties.responseSizeBytes viene convertito in un numero intero senza segno e copiato nel campo UDM. |
properties.responseStatusCode |
network.http.response_code |
Il campo del log non elaborato properties.responseStatusCode viene convertito in un numero intero e copiato nel campo UDM. |
properties.roles |
additional.fields.value.string_value |
Il campo del log non elaborato properties.roles viene copiato nel campo UDM, dove la chiave è roles. |
properties.scopes |
additional.fields.value.string_value |
Il campo del log non elaborato properties.scopes viene copiato nel campo UDM, dove la chiave è Scopes. |
properties.servicePrincipalId |
principal.user.userid |
Il campo del log non elaborato properties.servicePrincipalId viene copiato nel campo UDM se properties.userId è vuoto. |
properties.signInActivityId |
network.session_id |
Il campo del log non elaborato properties.signInActivityId viene copiato nel campo UDM. |
properties.tenantId |
metadata.product_deployment_id |
Il campo del log non elaborato properties.tenantId viene copiato nel campo UDM. |
properties.tokenIssuedAt |
additional.fields.value.string_value |
Il campo del log non elaborato properties.tokenIssuedAt viene copiato nel campo UDM, dove la chiave è tokenIssuedAt. |
properties.userAgent |
network.http.user_agent |
Il campo del log non elaborato properties.userAgent viene copiato nel campo UDM. |
properties.userId |
principal.user.userid |
Il campo del log non elaborato properties.userId viene copiato nel campo UDM. |
properties.wids |
security_result.detection_fields.value |
Il campo del log non elaborato properties.wids viene copiato nel campo UDM, dove la chiave è wids. |
resourceId |
target.resource.attribute.labels.value |
Il campo del log non elaborato resourceId viene copiato nel campo UDM, dove la chiave è Resource ID. |
resultSignature |
additional.fields.value.string_value |
Il campo del log non elaborato resultSignature viene copiato nel campo UDM, dove la chiave è resultSignature. |
time |
metadata.event_timestamp |
Il campo del log non elaborato time viene analizzato, convertito in un timestamp e copiato nel campo UDM. Il campo UDM event.idm.read_only_udm.metadata.event_type è impostato su "NETWORK_HTTP" se has_principal è true e network.http non è vuoto, su "STATUS_UPDATE" se has_principal è true e network.http è vuoto o su "GENERIC_EVENT" in caso contrario. Il campo UDM è impostato su "Microsoft Graph". Il campo UDM è impostato su "Microsoft". |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.