Accéder aux journaux d’activité Microsoft Graph

Les journaux d’activité Microsoft Graph sont une piste d’audit de toutes les requêtes HTTP reçues et traitées par le service Microsoft Graph pour un locataire. Les administrateurs clients peuvent activer la collecte et configurer les destinations en aval pour ces journaux à l’aide des paramètres de diagnostic dans Azure Monitor. Les journaux sont stockés dans Log Analytics à des fins d’analyse, et vous pouvez les exporter vers stockage Azure pour le stockage à long terme, ou les diffuser en continu avec Azure Event Hubs vers des outils SIEM externes à des fins d’alerte, d’analyse ou d’archivage.

Tous les journaux des demandes d’API effectuées à partir d’applications métier, de clients d’API, de kits de développement logiciel (SDK) et d’applications Microsoft telles qu’Outlook, Microsoft Teams ou le centre d'administration Microsoft Entra sont disponibles.

Ce service est disponible dans les déploiements de cloud national suivants.

Service global Gouvernement des États-Unis L4 Us Government L5 (DOD) Chine gérée par 21Vianet

Configuration requise

Pour accéder aux journaux d’activité Microsoft Graph, vous avez besoin des privilèges suivants.

  • Une licence de locataire Microsoft Entra ID P1 ou P2 dans votre locataire.
  • Un administrateur avec l’un des rôles d’administrateur Microsoft Entra suivants répertoriés dans l’ordre du rôle le moins privilégié ou le plus privilégié.
    • Administrateur de la sécurité : pour configurer les paramètres de diagnostic
    • Administrateur général : pour configurer les paramètres de diagnostic
  • Un abonnement Azure avec l’une des destinations de journaux suivantes est configuré et des autorisations pour accéder aux données dans les destinations de journal correspondantes.
    • Un espace de travail Azure Log Analytics pour envoyer des journaux à Azure Monitor
    • Un compte de stockage Azure pour lequel vous disposez des autorisations List Keys
    • Espace de noms Azure Event Hubs à intégrer à des solutions tierces

Quelles sont les données disponibles dans les journaux d’activité Microsoft Graph ?

Les données suivantes relatives aux demandes d’API sont disponibles pour les journaux d’activité Microsoft Graph sur l’interface Logs Analytics.

Column Type Description
AadTenantId string ID de locataire Azure AD.
ApiVersion string Version de l’API de l’événement.
Appid string Identificateur de l’application.
ATContent string Réservé à une utilisation future.
_BilledSize Réel Taille de l’enregistrement en octets
ClientAuthMethod int Indique comment le client a été authentifié. Pour un client public, la valeur est 0. Si l’ID client et la clé secrète client sont utilisés, la valeur est 1. Si un certificat client a été utilisé pour l’authentification, la valeur est 2.
ClientRequestId string Facultatif. Identificateur de la demande cliente lors de l’envoi. Si aucun identificateur de demande client n’est envoyé, la valeur est égale à l’identificateur de l’opération.
DurationMs int Durée de la requête en millisecondes.
IdentityProvider string Fournisseur d’identité qui a authentifié l’objet du jeton.
IPAddress string Adresse IP du client à partir duquel la demande s’est produite.
_IsBillable string Spécifie si l’ingestion des données est facturable. Lorsque _IsBillable est l’ingestion false n’est pas facturée à votre compte Azure
Emplacement string Nom de la région qui a traité la demande.
OperationId chaîne Identificateur du lot. Pour les requêtes non traitées par lot, cette valeur est unique par demande. Pour les demandes par lots, cela sera identique pour toutes les requêtes du lot.
RequestId string Identificateur représentant la demande.
RequestMethod chaîne Méthode HTTP de l’événement.
Requesturi string URI de la requête.
ResponseSizeBytes int Taille de la réponse en octets.
ResponseStatusCode int La réponse HTTP status code de l’événement.
Rôles chaîne Rôles dans les revendications de jeton.
Étendues chaîne Étendues dans les revendications de jeton.
ServicePrincipalId string Identificateur du servicePrincipal qui effectue la demande.
SignInActivityId chaîne Identificateur représentant les activités de connexion.
SourceSystem string Type d’agent par lequel l’événement a été collecté. Par exemple, OpsManager pour l’agent Windows, connexion directe ou Operations Manager, Linux pour tous les agents Linux ou Azure pour Diagnostics Azure
TenantId string ID de l’espace de travail Log Analytics
TimeGenerated DateHeure Date et heure de réception de la demande.
TokenIssuedAt DateHeure Horodatage auquel le jeton a été émis.
Type string Nom de la table
UserAgent string Informations de l’agent utilisateur relatives à la demande.
UserId string Identificateur de l’utilisateur qui effectue la demande.
Wids chaîne Désigne les rôles à l’échelle du locataire attribués à cet utilisateur.

Cas d’usage courants pour les journaux d’activité Microsoft Graph

  • Bénéficiez d’une visibilité complète des transactions effectuées par les applications et autres clients API auxquels vous avez donné votre consentement dans le locataire.
  • Identifiez les activités effectuées par un compte d’utilisateur compromis dans votre locataire.
  • Créez des détections et une analyse comportementale pour identifier l’utilisation suspecte ou anormale des API Microsoft Graph.
  • Examiner l’attribution de privilèges inattendue ou suspecte d’autorisations d’application.
  • Identifiez les comportements problématiques ou inattendus pour les applications clientes telles que les volumes d’appels extrêmes.
  • Mettez en corrélation les demandes Microsoft Graph effectuées par un utilisateur ou une application avec les informations de connexion.

Configurer pour recevoir les journaux d’activité Microsoft Graph

Vous pouvez configurer pour diffuser les journaux via le paramètre de diagnostic dans le Portail Azure ou via les API Azure Resource Manager. Pour plus d’informations, consultez les conseils fournis dans les articles suivants :

Les articles suivants vous guident pour configurer les destinations de stockage :

Estimations de la planification des coûts

Si vous disposez déjà d’une licence Microsoft Entra ID P1, vous avez besoin d’un abonnement Azure pour configurer l’espace de travail Log Analytics, le compte de stockage ou Event Hubs. L’abonnement Azure est gratuit, mais vous devez payer pour utiliser des ressources Azure.

La quantité de données enregistrées et, par conséquent, le coût induit peuvent varier considérablement en fonction de la taille du locataire et des applications de votre locataire qui interagissent avec les API Microsoft Graph. Le tableau suivant fournit des estimations de la taille des données de journal pour faciliter le calcul du prix. Utilisez ces estimations à des fins générales uniquement.

Utilisateurs dans le locataire Gio de stockage/mois Messages Event Hubs/mois Journaux Azure Monitor Gio/mois
1000 14 62 Ko 15
100000 1000 4,8 M 1200

Consultez les calculs de tarification suivants pour les services respectifs :

Réduction des coûts pour Log Analytics

Si vous ingérez les journaux dans un espace de travail Log Analytics, mais que vous vous intéressez uniquement aux journaux filtrés par des critères, tels que l’omission de certaines colonnes ou lignes, vous pouvez réduire partiellement les coûts en appliquant une transformation d’espace de travail sur la table Journaux d’activité Microsoft Graph. Pour en savoir plus sur les transformations d’espace de travail, leur impact sur les coûts d’ingestion et l’application d’une transformation à vos journaux d’activité Microsoft Graph, consultez Transformations de collecte de données dans Azure Monitor.

Une autre approche pour réduire les coûts Log Analytics consiste à passer au plan de données de journal de base, qui réduit les factures en offrant des fonctionnalités réduites. Pour plus d’informations, consultez Définir le plan de données de journal d’une table sur De base ou Analytique.

Exemples de requêtes journaux Azure Monitor

Si vous envoyez des journaux d’activité Microsoft Graph à un espace de travail Log Analytics, vous pouvez interroger les journaux à l’aide de Langage de requête Kusto (KQL). Pour plus d’informations sur les requêtes dans l’espace de travail Log Analytics, consultez Analyser Microsoft Entra journaux d’activité avec Log Analytics. Vous pouvez utiliser ces requêtes pour l’exploration des données, pour créer des règles d’alerte, créer des tableaux de bord Azure ou les intégrer à vos applications personnalisées à l’aide de l’API Journaux Azure Monitor ou du KIT de développement logiciel (SDK) de requête.

La requête Kusto suivante identifie les 20 principales entités qui effectuent des requêtes à des groupes de ressources qui échouent en raison d’une autorisation :

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

La requête Kusto suivante identifie les ressources interrogées ou modifiées par les utilisateurs potentiellement à risque :

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

La requête Kusto suivante vous permet de mettre en corrélation les journaux d’activité microsoft Graph et les journaux de connexion. Les journaux d’activité des applications Microsoft n’ont peut-être pas tous des entrées de journal de connexion correspondantes. Pour plus d’informations, consultez Limitations connues des journaux de connexion.

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

La requête Kusto suivante identifie les applications qui sont limitées :

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 

La requête suivante vous permet d’afficher un graphique de série chronologique :

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 
    )

Limitations

  • La fonctionnalité journaux d’activité Microsoft Graph permet aux administrateurs du locataire de collecter des journaux pour le locataire de ressource. Cette fonctionnalité ne vous permet pas de voir les activités d’une application multilocataire dans un autre locataire.
  • Vous ne pouvez pas filtrer les journaux d’activité Microsoft Graph via les paramètres de diagnostic dans Azure Monitor. Toutefois, des options sont disponibles pour réduire les coûts dans l’espace de travail Azure Log Analytics. Pour plus d’informations, consultez Transformation de l’espace de travail.
  • Dans la plupart des régions, les événements sont disponibles et remis à la destination de configuration dans les 30 minutes. Dans des cas moins courants, la livraison de certains événements à la destination peut prendre jusqu’à 2 heures.