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 ; vous pouvez les exporter vers stockage Azure pour un stockage à long terme ou les diffuser en continu avec Azure Event Hubs vers des outils SIEM externes pour les alertes, l’analyse ou l’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.
- Administrateur disposant d’un rôle d’administrateur Microsoft Entra pris en charge. Administrateur de sécurité est le seul rôle d’administrateur le moins privilégié pris en charge pour la configuration des 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. |
ATContentH | string | Réservé à une utilisation future. |
ATContentP | 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 | string | 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 | string | 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 | string | Rôles dans les revendications de jeton. |
Étendues | string | Étendues dans les revendications de jeton. |
ServicePrincipalId | string | Identificateur du servicePrincipal qui effectue la demande. |
SignInActivityId | string | 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 | string | 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 :
- Intégrer les journaux d’activité aux journaux Azure Monitor
- Configurer diagnosticSettings via l’API Azure Resource Manager
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.