Zugreifen auf Microsoft Graph-Aktivitätsprotokolle

Microsoft Graph-Aktivitätsprotokolle sind ein Überwachungsprotokoll aller HTTP-Anforderungen, die der Microsoft Graph-Dienst für einen Mandanten empfangen und verarbeitet hat. Mandantenadministratoren können die Sammlung aktivieren und Downstreamziele für diese Protokolle mithilfe von Diagnoseeinstellungen in Azure Monitor konfigurieren. Die Protokolle werden zur Analyse in Log Analytics gespeichert, und Sie können sie zur langfristigen Speicherung in Azure Storage exportieren oder mit Azure Event Hubs zu externen SIEM-Tools für Warnungen, Analysen oder Archivierung streamen.

Alle Protokolle für API-Anforderungen, die von Branchenanwendungen, API-Clients, SDKs und von Microsoft-Anwendungen wie Outlook, Microsoft Teams oder den Microsoft Entra Admin Center gesendet werden, sind verfügbar.

Dieser Dienst ist in den folgenden nationalen Cloudbereitstellungen verfügbar.

Globaler Dienst US Government L4 US Government L5 (DOD) China, betrieben von 21Vianet

Voraussetzungen

Für den Zugriff auf die Microsoft Graph-Aktivitätsprotokolle benötigen Sie die folgenden Berechtigungen.

  • Eine Microsoft Entra ID P1- oder P2-Mandantenlizenz in Ihrem Mandanten.
  • Ein Administrator mit einer der folgenden Microsoft Entra Administratorrollen, die in der Reihenfolge der Rolle mit den geringsten bis höchsten Berechtigungen aufgeführt sind.
    • Sicherheitsadministrator: So konfigurieren Sie Diagnoseeinstellungen
    • Globaler Administrator: So konfigurieren Sie Diagnoseeinstellungen
  • Es werden ein Azure-Abonnement mit einem der folgenden Protokollziele und Berechtigungen für den Zugriff auf Daten in den entsprechenden Protokollzielen konfiguriert.
    • Einen Azure Log Analytics-Arbeitsbereich zum Senden von Protokollen an Azure Monitor
    • Ein Azure Storage-Konto, für das Sie über Berechtigungen zum Auflisten von Schlüsseln verfügen
    • Ein Azure Event Hubs Namespace für die Integration in Drittanbieterlösungen

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

Die folgenden Daten zu API-Anforderungen sind für Microsoft Graph-Aktivitätsprotokolle auf der Logs Analytics-Schnittstelle verfügbar.

Spalte Typ Beschreibung
AadTenantId string Die Azure AD-Mandanten-ID.
ApiVersion string Die API-Version des Ereignisses.
Appid string Der Bezeichner für die Anwendung.
ATContent 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 für die 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.
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 aufgetreten ist.
_IsBillable string Gibt an, ob die Erfassung der Daten abrechenbar ist. Wenn _IsBillable false erfassung nicht ihrem Azure-Konto in Rechnung gestellt wird
Ort Zeichenfolge Der Name der Region, die die Anforderung verarbeitet hat.
OperationId string Der Bezeichner für den Batch. Bei Anforderungen ohne Batchverarbeitung 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 Die HTTP-Antwort status Code 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.
SignInActivityId string Der Bezeichner, der die Anmeldeaktivitäten darstellt.
SourceSystem string Der Typ des Agents, von dem das Ereignis erfasst wurde. Beispielsweise OpsManager für den Windows-Agent, entweder direkte Verbindung oder Operations Manager, Linux für alle Linux-Agents oder Azure für Azure-Diagnose
TenantId string Die Log Analytics-Arbeitsbereichs-ID
TimeGenerated Datum/Uhrzeit Das Datum und die Uhrzeit, zu der die Anforderung empfangen wurde.
TokenIssuedAt Datum/Uhrzeit Der Zeitstempel, an dem das Token ausgestellt wurde.
Typ string Der Name der Tabelle
UserAgent string Die Benutzer-Agent-Informationen im Zusammenhang mit der Anforderung.
UserId string Der Bezeichner des Benutzers, der die Anforderung stellt.
Wids string Bezeichnet die mandantenweiten Rollen, die diesem Benutzer zugewiesen sind.

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

  • Erhalten Sie vollständigen Einblick in die Transaktionen von Anwendungen und anderen API-Clients, denen Sie im Mandanten zugestimmt haben.
  • Identifizieren Sie die Aktivitäten, die ein kompromittiertes Benutzerkonto in Ihrem Mandanten durchgeführt hat.
  • Erstellen Sie Erkennungen und Verhaltensanalysen, um verdächtige oder anomale Verwendung von Microsoft Graph-APIs zu identifizieren.
  • Untersuchen Sie unerwartete oder verdächtige Zuweisung privilegierter Anwendungsberechtigungen.
  • Identifizieren Sie problematisches oder unerwartetes Verhalten für Clientanwendungen, z. B. extreme Aufrufvolumen.
  • Korrelieren Sie Microsoft Graph-Anforderungen eines Benutzers oder einer App mit Anmeldeinformationen.

Konfigurieren für den Empfang der Microsoft Graph-Aktivitätsprotokolle

Sie können das Streamen der Protokolle über die Diagnoseeinstellung im Azure-Portal oder über Azure Resource Manager-APIs konfigurieren. Weitere Informationen finden Sie in den folgenden Artikeln:

In den folgenden Artikeln erfahren Sie, wie Sie die Speicherziele konfigurieren:

Kostenplanungsschä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. Das Azure-Abonnement ist kostenlos, aber Sie müssen für die Nutzung von Azure-Ressourcen bezahlen.

Die Menge der protokollierten Daten und somit 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 einige Schätzungen für die Protokolldatengröße, um die Preisberechnung zu unterstützen. Verwenden Sie diese Schätzungen nur zu allgemeinen Überlegungen.

Benutzer im Mandanten Speicher-GiB/Monat Event Hubs-Nachrichten/Monat Azure Monitor-Protokolle (GiB/Monat)
1000 14 62K 15
100000 1000 4,8 M 1200

Sehen Sie sich die folgenden Preisberechnungen für die jeweiligen Dienste an:

Kostensenkung für Log Analytics

Wenn Sie die Protokolle in einem Log Analytics-Arbeitsbereich erfassen, aber nur an Protokollen interessiert sind, die nach einem Kriterium gefiltert wurden, z. B. das Auslassen bestimmter Spalten oder Zeilen, können Sie die Kosten teilweise senken, indem Sie eine Arbeitsbereichstransformation auf die Tabelle Microsoft Graph-Aktivitätsprotokolle anwenden. Weitere Informationen zu Arbeitsbereichstransformationen, deren Auswirkungen auf die Erfassungskosten und zum Anwenden einer Transformation auf Ihre Microsoft Graph-Aktivitätsprotokolle finden Sie unter Transformationen der Datensammlung in Azure Monitor.

Ein alternativer Ansatz zum Reduzieren der Log Analytics-Kosten besteht darin, zum Standard-Protokolldatenplan zu wechseln, der die Rechnungen senkt, indem reduzierte Funktionen bereitgestellt werden. Weitere Informationen finden Sie unter Festlegen des Protokolldatenplans einer Tabelle auf Basic oder Analytics.

Abfragebeispiele für Azure Monitor-Protokolle

Wenn Sie Microsoft Graph-Aktivitätsprotokolle an einen Log Analytics-Arbeitsbereich senden, können Sie die Protokolle mithilfe von Kusto-Abfragesprache (KQL) abfragen. Weitere Informationen zu Abfragen im Log Analytics-Arbeitsbereich finden Sie unter Analysieren Microsoft Entra Aktivitätsprotokolle mit Log Analytics. Sie können diese Abfragen zum Durchsuchen von Daten verwenden, um Warnungsregeln zu erstellen, Azure-Dashboards zu erstellen oder mit der Azure Monitor-Protokoll-API oder dem Abfrage-SDK in Ihre benutzerdefinierten Anwendungen zu 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

Mit der folgenden Kusto-Abfrage können Sie die Microsoft Graph-Aktivitätsprotokolle und Anmeldeprotokolle korrelieren. Aktivitätsprotokolle von Microsoft-Anwendungen weisen möglicherweise nicht alle übereinstimmenden Anmeldeprotokolleinträge auf. Weitere Informationen finden Sie unter Bekannte Einschränkungen für 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

  • Mit dem Feature "Microsoft Graph-Aktivitätsprotokolle" können Mandantenadministratoren Protokolle für den Ressourcenmandanten 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 Kostenreduzierung im Azure Log Analytics-Arbeitsbereich zur Verfügung. Weitere Informationen finden Sie unter Arbeitsbereichstransformation.
  • In den meisten Regionen werden die Ereignisse innerhalb von 30 Minuten an das Konfigurationsziel übermittelt. In weniger häufigen Fällen kann es bis zu 2 Stunden dauern, bis einige Ereignisse an das Ziel übermittelt werden.