Zugreifen auf Microsoft Graph-Aktivitätsprotokolle

Microsoft Graph-Aktivitätsprotokolle stellen einen Überwachungspfad aller HTTP-Anforderungen bereit, die der Microsoft Graph-Dienst für einen Mandanten empfängt und verarbeitet. Mandantenadministratoren können mithilfe der Diagnoseeinstellungen in Azure Monitor die Protokollsammlung aktivieren und Downstreamziele einrichten. Die Protokolle werden zur Analyse an Log Analytics gesendet. Sie können sie zur langfristigen Speicherung in Azure Storage exportieren oder mit Azure Event Hubs an externe SIEM-Tools streamen, um Warnungen, Analysen oder Archivierungen zu erhalten.

Sie erhalten Protokolle für API-Anforderungen von Branchen-Apps, API-Clients, SDKs, KI-Clients, die den Microsoft MCP Server for Enterprise abfragen, und Microsoft-Apps wie Outlook, Microsoft Teams oder den Microsoft-Verwaltungsportalen.

Dieser Dienst ist in diesen nationalen Cloudbereitstellungen verfügbar.

Weltweiter Service US Government L4 US Government L5 (DOD) China, betrieben von 21Vianet
✅ ✅ ✅ ✅

Voraussetzungen

Um Microsoft Graph-Aktivitätsprotokolle verwenden zu können, benötigen Sie die folgenden Berechtigungen.

  • Eine Microsoft Entra ID P1- oder P2-Mandantenlizenz.
  • Ein Administrator mit einer unterstützten Microsoft Entra-Administratorrolle. Der Sicherheitsadministrator ist die einzige Administratorrolle mit den geringsten Berechtigungen, die zum Einrichten von Diagnoseeinstellungen unterstützt wird.
  • Ein Azure-Abonnement mit einem der folgenden Protokollziele eingerichtet, und Berechtigungen zur Verwendung von Daten in den entsprechenden Protokollzielen.
    • Ein Azure Log Analytics-Arbeitsbereich zum Senden von Protokollen an Azure Monitor
    • Ein Azure Storage-Konto, in dem Sie über List Keys-Berechtigungen verfügen
    • Ein Azure Event Hubs-Namespace zum Herstellen einer Verbindung mit Lösungen von Drittanbietern

Welche Daten sind in den Microsoft Graph-Aktivitätsprotokollen verfügbar?

Dieser Artikel zeigt die Daten zu API-Anforderungen, die für Microsoft Graph-Aktivitätsprotokolle in der Logs Analytics-Schnittstelle verfügbar sind.

Tipp

Anforderungen an den Microsoft MCP Server for Enterprise haben einen RequestUri , der /enterpriseenthält.

Warnung

Speichern Sie keine Geheimnisse oder andere vertrauliche Informationen wie Kennwörter, Anmeldeinformationen, Zugriffs- oder Aktualisierungstoken oder Verbindungszeichenfolgen in Verzeichnisobjektattributen oder anderen überwachbaren Ressourcen, die von Microsoft Graph verfügbar gemacht werden. Microsoft Graph-Aktivitätsprotokolle erfassen zusammen mit anderen Überwachungs- und Anmeldeprotokollen Details zu API-Anforderungen, einschließlich Anforderungs-URIs. Jeder sensible Wert, der in einer Anforderung übergeben oder auf einer solchen Ressource gespeichert wird, kann in diesen Protokollen aufgezeichnet werden, wo er von Mandantenadministratoren und von jedem nachgelagerten Log Analytics-Arbeitsbereich, jedem Azure Storage-Konto oder jedem SIEM-System, in das die Protokolle exportiert werden, gelesen werden kann. Verzeichnisobjektattribute sind kein sicherer Speicher für Geheimnisse. Verwenden Sie stattdessen einen dedizierten Geheimnisspeicher, z. B. Azure Key Vault.

Spalte Typ Beschreibung
AadTenantId string Die Azure AD-Mandanten-ID.
ApiVersion string Die API-Version des Ereignisses.
AppId (AppId) string Der Bezeichner für die Anwendung.
ATContent string Reserviert für zukünftige Verwendung.
ATContentH string Reserviert für zukünftige Verwendung.
ATContentP string Reserviert für zukünftige Verwendung.
_BilledSize real Die Datensatzgröße in Bytes
ClientAuthMethod int Gibt an, wie der Client authentifiziert wurde. Für einen öffentlichen Client ist der Wert 0. Wenn Client-ID und geheimer Clientschlüssel verwendet werden, ist der Wert 1. Wenn ein Clientzertifikat zur Authentifizierung verwendet wurde, ist der Wert 2.
ClientRequestId string Optional. Der Clientanforderungsbezeichner beim Senden. Wenn kein Clientanforderungsbezeichner gesendet wird, ist der Wert gleich dem Vorgangsbezeichner.
ConditionalAccessStatus string Der von Microsoft Graph für die Anforderung aufgezeichnete Status des bedingten Zugriffs. Leer, wenn kein Status aufgezeichnet wurde.
DeviceId string Die Kennung des Geräts, von dem die Authentifizierungsanforderung stammt.
DurationMs int Die Dauer der Anforderung in Millisekunden.
IdentityProvider string Der Identitätsanbieter, der den Antragsteller des Tokens authentifiziert hat.
IPAddress string Die IP-Adresse des Clients, von dem aus die Anforderung erfolgt ist.
_IsBillable string Gibt an, ob die Datenerfassung abrechenbar ist. Wenn _IsBillable ist, false wird die Erfassung nicht Ihrem Azure Konto in Rechnung gestellt
Ort Zeichenfolge Der Name der Region, in der die Anforderung verarbeitet wurde.
OperationId string Der Bezeichner für den Batch. Bei Nicht-Batchanforderungen ist dies pro Anforderung eindeutig. Bei Batchanforderungen ist dies für alle Anforderungen im Batch identisch.
Anfrage-ID string Der Bezeichner, der die Anforderung darstellt.
RequestMethod string Die HTTP-Methode des Ereignisses.
RequestUri string Der URI der Anforderung.
ResponseSizeBytes int Die Größe der Antwort in Bytes.
ResponseStatusCode int Der HTTP-Antwort-Statuscode für das Ereignis.
Rollen string Die Rollen in Tokenansprüchen.
Scopes string Die Bereiche in Tokenansprüchen.
ServicePrincipalId string Der Bezeichner des servicePrincipal, der die Anforderung stellt.
SessionId string Der eindeutige Bezeichner für die Authentifizierungssitzung.
SignInActivityId string Der Bezeichner, der die Anmeldeaktivitäten darstellt.
SourceSystem string Der Agent-Typ, von dem das Ereignis erfasst wurde. Beispielsweise OpsManager für Windows-Agents, entweder Direct Connect oder Operations Manager, Linux für alle Linux-Agents oder Azure für Azure-Diagnose
Mandanten-ID string Die Log Analytics-Arbeitsbereichs-ID
TimeGenerated Datum/Uhrzeit Das Datum und die Uhrzeit des Eingangs der Anforderung.
TokenIssuedAt Datum/Uhrzeit Der Zeitstempel, zu dem der Token ausgegeben wurde.
Typ string Der Name der Tabelle
UniqueTokenId string Der eindeutige Tokenbezeichner des API-Aufrufs, mit dem die überwachte Änderung vorgenommen wurde.
UserAgent string Die Benutzer-Agent-Informationen im Zusammenhang mit der Anforderung.
UserId string Der Bezeichner des Benutzers, der die Anforderung stellt.
Wids string Gibt die mandantenweiten Rollen an, die diesem Benutzer zugewiesen sind.

Häufige Anwendungsfälle für Microsoft Graph-Aktivitätsprotokolle

  • Zeigen Sie alle Transaktionen an, die von Anwendungen und anderen API-Clients durchgeführt wurden, denen Sie im Mandanten zugestimmt haben.
  • Suchen Sie nach Aktivitäten, die ein kompromittiertes Benutzerkonto in Ihrem Mandanten ausführt.
  • Erstellen Sie Erkennungen und Verhaltensanalysen, um verdächtige oder ungewöhnliche Verwendungen von Microsoft Graph-APIs zu erkennen.
  • Untersuchen Sie unerwartete oder verdächtige privilegierte Zuweisungen von Anwendungsberechtigungen.
  • Erkennen Sie problematische oder unerwartete Verhaltensweisen für Client-Anwendungen, z. B. extreme Anruflautstärke.
  • Überwachen Sie die Interaktionen von KI-Clients mit Microsoft Graph-APIs, einschließlich Anforderungen von KI-Anwendungen und dem Microsoft MCP-Server für Unternehmen.
  • Korrelieren Sie Microsoft Graph-Anforderungen eines Benutzers oder einer App mit Anmeldeinformationen.

Einrichten von Microsoft Graph-Aktivitätsprotokollen

Stream Protokolle über die Diagnoseeinstellung im Azure-Portal oder mithilfe Azure Resource Manager APIs ein. Weitere Informationen finden Sie in den folgenden Artikeln:

Verwenden Sie die folgenden Artikel, um Speicherziele einzurichten:

Kostenschätzungen

Wenn Sie bereits über eine Microsoft Entra ID P1-Lizenz verfügen, benötigen Sie ein Azure-Abonnement, um den Log Analytics-Arbeitsbereich, das Speicherkonto oder Event Hubs einzurichten. Sie erhalten das Azure-Abonnement kostenlos, aber Sie zahlen für die Verwendung von Azure-Ressourcen.

Die Menge der protokollierten Daten und die anfallenden Kosten können je nach Mandantengröße und den Anwendungen in Ihrem Mandanten, die mit Microsoft Graph-APIs interagieren, erheblich variieren. Die folgende Tabelle enthält Schätzungen für die Protokolldatengröße, die Ihnen bei der Berechnung der Preise helfen. Verwenden Sie diese Schätzungen nur zur allgemeinen Überlegung.

Benutzer im Mandanten Speicher (GiB pro Monat) Event Hubs-Nachrichten (pro Monat) Azure Monitor-Protokolle (GiB pro Monat)
1,000 14 62,000 15
100.000 1,000 4.800.000 1.200

Sehen Sie sich die folgenden Preisdetails für jeden Dienst an:

Kostensenkung für Log Analytics

Wenn Sie die Protokolle in einen Log Analytics-Arbeitsbereich aufnehmen, aber nur an Protokollen interessiert sind, die nach Kriterien gefiltert werden, z. B. durch das Auslassen bestimmter Spalten oder Zeilen, können Sie die Kosten teilweise senken, indem Sie eine Arbeitsbereichstransformation auf die Tabelle der Microsoft Graph-Aktivitätsprotokolle anwenden. Weitere Informationen zu Arbeitsbereichstransformationen, wie sie sich auf die Aufnahmekosten auswirken und wie Sie eine Transformation auf Ihre Microsoft Graph-Aktivitätsprotokolle anwenden, finden Sie unter Datensammlungstransformationen in Azure Monitor.

Ein alternativer Ansatz zum Senken der Log Analytics-Kosten ist der Wechsel zum Basic-Protokolldatenplan, der die Rechnungen senkt, indem weniger Funktionen bereitgestellt werden. Weitere Informationen finden Sie unter Festlegen des Protokolldatenplans einer Tabelle auf "Basic" oder "Analytics".

Beispiele für Abfragen zu Azure Monitor-Protokollen

Wenn Sie Microsoft Graph-Aktivitätsprotokolle an einen Log Analytics-Arbeitsbereich senden, können Sie die Protokolle mithilfe der Kusto-Abfragesprache (KQL) abfragen. Weitere Informationen zu Abfragen im Log Analytics-Arbeitsbereich finden Sie unter Analysieren von Microsoft Entra-Aktivitätsprotokollen mit Log Analytics. Sie können diese Abfragen für die Datenuntersuchung, zum Erstellen von Warnungsregeln oder zum Erstellen von Azure-Dashboards verwenden oder mithilfe der Azure Monitor-Protokoll-API oder des Query SDK in Ihre benutzerdefinierten Anwendungen integrieren.

Die folgende Kusto-Abfrage identifiziert die 20 wichtigsten Entitäten, die Anforderungen an Gruppenressourcen stellen, die aufgrund der Autorisierung fehlschlagen:

MicrosoftGraphActivityLogs
| where TimeGenerated >= ago(3d)
| where ResponseStatusCode == 401 or ResponseStatusCode == 403 
| where RequestUri contains "/groups"
| summarize UniqueRequests=count_distinct(RequestId) by AppId, ServicePrincipalId, UserId
| sort by UniqueRequests desc
| limit 20

Die folgende Kusto-Abfrage identifiziert Ressourcen, die von potenziell riskanten Benutzern abgefragt oder geändert wurden:

MicrosoftGraphActivityLogs
| where TimeGenerated > ago(30d)
| join AADRiskyUsers on $left.UserId == $right.Id
| extend resourcePath = replace_string(replace_string(replace_regex(tostring(parse_url(RequestUri).Path), @'(\/)+','/'),'v1.0/',''),'beta/','')
| summarize RequestCount=dcount(RequestId) by UserId, RiskState, resourcePath, RequestMethod, ResponseStatusCode

Die folgende Kusto-Abfrage ermöglicht es Ihnen, die Microsoft Graph-Aktivitätsprotokolle und Anmeldeprotokolle zu korrelieren. Aktivitätsprotokolle von Microsoft-Anwendungen weisen möglicherweise nicht alle übereinstimmende Anmeldeprotokolleinträge auf. Weitere Informationen finden Sie unter Bekannte Einschränkungen der Anmeldeprotokolle.

MicrosoftGraphActivityLogs
| where TimeGenerated > ago(7d)
| join kind=leftouter (union SigninLogs, AADNonInteractiveUserSignInLogs, AADServicePrincipalSignInLogs, AADManagedIdentitySignInLogs, ADFSSignInLogs
    | where TimeGenerated > ago(7d))
    on $left.SignInActivityId == $right.UniqueTokenIdentifier

Die folgende Kusto-Abfrage identifiziert Apps, die gedrosselt werden:

MicrosoftGraphActivityLogs 
| where TimeGenerated > ago(3d) 
| where ResponseStatusCode == 429 
| extend path = replace_string(replace_string(replace_regex(tostring(parse_url(RequestUri).Path), @'(\/)+','//'),'v1.0/',''),'beta/','') 
| extend UriSegments =  extract_all(@'\/([A-z2]+|\$batch)($|\/|\(|\$)',dynamic([1]),tolower(path)) 
| extend OperationResource = strcat_array(UriSegments,'/')| summarize RateLimitedCount=count() by AppId, OperationResource, RequestMethod 
| sort by RateLimitedCount desc 
| limit 100 

Mit der folgenden Abfrage können Sie ein Zeitreihendiagramm rendern:

MicrosoftGraphActivityLogs 
| where TimeGenerated  between (ago(3d) .. ago(1h))  
| summarize EventCount = count() by bin(TimeGenerated, 10m) 
| render timechart 
    with ( 
    title="Recent traffic patterns", 
    xtitle="Time", 
    ytitle="Requests", 
    legend=hidden 
    )

Begrenzungen

  • Das Microsoft Graph-Feature "Aktivitätsprotokolle" ermöglicht es den Mandantenadministratoren, Protokolle für den Ressourcenmandanten zu sammeln. Mit diesem Feature können Sie die Aktivitäten einer mehrinstanzenfähigen Anwendung in einem anderen Mandanten nicht anzeigen.
  • Sie können Microsoft Graph-Aktivitätsprotokolle nicht über Diagnoseeinstellungen in Azure Monitor filtern. Es stehen jedoch Optionen zur Kostensenkung im Azure Log Analytics-Arbeitsbereich zur Verfügung. Weitere Informationen finden Sie unter Workspace-Transformation.
  • In den meisten Regionen sind die Ereignisse verfügbar und werden innerhalb von 30 Minuten an das Konfigurationsziel übermittelt. In weniger häufigen Fällen kann es bei einigen Ereignissen bis zu 2 Stunden dauern, bis sie an den Zielort übermittelt werden.