Доступ к журналам действий Microsoft Graph

Журналы действий Microsoft Graph — это журнал аудита всех HTTP-запросов, полученных и обработанных службой Microsoft Graph для клиента. Администраторы клиентов могут включить сбор и настроить подчиненные назначения для этих журналов с помощью параметров диагностики в Azure Monitor. Журналы хранятся в Log Analytics для анализа; Вы можете экспортировать их в службу хранилища Azure для долгосрочного хранения или выполнять потоковую передачу с помощью Центры событий Azure во внешние средства SIEM для создания оповещений, анализа или архивации.

Доступны все журналы запросов API, выполняемых из бизнес-приложений, клиентов API, пакетов SDK и приложений Майкрософт, таких как Outlook, Microsoft Teams или Центр администрирования Microsoft Entra.

Эта служба доступна в следующих национальных облачных развертываниях.

Глобальная служба Правительство США L4 Правительство США L5 (DOD) Китай управляется 21Vianet

Предварительные условия

Чтобы получить доступ к журналам действий Microsoft Graph, вам потребуются следующие привилегии.

  • Лицензия клиента Microsoft Entra ID P1 или P2 в клиенте.
  • Администратор с поддерживаемой Microsoft Entra ролью администратора. Администратор безопасности — это единственная роль администратора с наименьшими привилегиями, поддерживаемая для настройки параметров диагностики.
  • Настроена подписка Azure с одним из следующих назначений журналов, а также разрешения на доступ к данным в соответствующих назначениях журнала.
    • Рабочая область Azure Log Analytics для отправки журналов в Azure Monitor
    • Учетная запись хранения Azure, для которой у вас есть разрешения на получение списка ключей
    • Пространство имен Центры событий Azure для интеграции со сторонними решениями

Какие данные доступны в журналах действий Microsoft Graph?

Следующие данные, относящиеся к запросам API, доступны для журналов действий Microsoft Graph в интерфейсе Logs Analytics.

Столбец Тип Описание
AadTenantId string Идентификатор клиента Azure AD.
ApiVersion string Версия API события.
AppId string Идентификатор приложения.
ATContent string Зарезервировано для последующего использования.
ATContentH string Зарезервировано для последующего использования.
ATContentP string Зарезервировано для последующего использования.
_BilledSize real Размер записи в байтах
ClientAuthMethod int Указывает, как клиент прошел проверку подлинности. Для общедоступного клиента значение равно 0. Если используются идентификатор клиента и секрет клиента, значение равно 1. Если сертификат клиента использовался для проверки подлинности, значение равно 2.
ClientRequestId string Необязательный параметр. Идентификатор запроса клиента при отправке. Если идентификатор запроса клиента не отправлен, значение будет равно идентификатору операции.
DurationMs int Длительность запроса в миллисекундах.
IdentityProvider string Поставщик удостоверений, прошедший проверку подлинности субъекта маркера.
IPAddress string IP-адрес клиента, из которого был выполнен запрос.
_IsBillable string Указывает, является ли прием данных платным. Если _IsBillable false прием не взимается с вашей учетной записи Azure
Расположение строка Имя региона, обслуженного запросу.
OperationId string Идентификатор пакета. Для непакетных запросов это будет уникально для каждого запроса. Для пакетных запросов это будет одинаковым для всех запросов в пакете.
RequestId string Идентификатор, представляющий запрос.
RequestMethod string Метод HTTP события.
RequestUri string Универсальный код ресурса (URI) запроса.
ResponseSizeBytes int Размер ответа в байтах.
ResponseStatusCode int Код состояния HTTP-ответа для события.
Роли string Роли в утверждениях маркеров.
Scopes string Области в утверждениях маркеров.
ServicePrincipalId string Идентификатор servicePrincipal, выполняющего запрос.
SignInActivityId string Идентификатор, представляющий действия входа.
SourceSystem string Тип агента, с помощью который было собрано событие. Например, OpsManager для агента Windows— прямое подключение или Operations Manager, Linux для всех агентов Linux или Azure для Диагностика Azure
Идентификатор клиента string Идентификатор рабочей области Log Analytics
TimeGenerated datetime Дата и время получения запроса.
TokenIssuedAt datetime Метка времени, на который был выдан маркер.
Тип string Имя таблицы
UserAgent string Сведения об агенте пользователя, связанные с запросом.
UserId string Идентификатор пользователя, выполняющего запрос.
Wids string Обозначает роли на уровне клиента, назначенные этому пользователю.

Распространенные варианты использования журналов действий Microsoft Graph

  • Получите полную видимость транзакций, выполняемых приложениями и другими клиентами API, на которые вы дали согласие в клиенте.
  • Определите действия, которые скомпрометированная учетная запись пользователя выполнила в вашем клиенте.
  • Создание обнаружений и анализ поведения для выявления подозрительного или аномального использования API Microsoft Graph.
  • Изучите непредвиденные или подозрительные привилегированные назначения разрешений приложения.
  • Определите проблемное или непредвиденное поведение для клиентских приложений, например экстремальные объемы вызовов.
  • Сопоставляйте запросы Microsoft Graph, сделанные пользователем или приложением, с данными для входа.

Настройка для получения журналов действий Microsoft Graph

Вы можете настроить потоковую передачу журналов через параметр диагностики в портал Azure или через API Resource Manager Azure. Дополнительные сведения см. в руководстве в следующих статьях:

В следующих статьях описана настройка назначений хранилища.

Оценки планирования затрат

Если у вас уже есть лицензия Microsoft Entra ID P1, вам потребуется подписка Azure для настройки рабочей области Log Analytics, учетной записи хранения или Центров событий. Подписка Azure предоставляется бесплатно, но вы должны заплатить за использование ресурсов Azure.

Объем регистрируемых данных и, следовательно, затраты могут значительно отличаться в зависимости от размера клиента и приложений в клиенте, взаимодействующих с API Microsoft Graph. В следующей таблице приведены некоторые оценки размера данных журнала для расчета цены. Используйте эти оценки только для общего рассмотрения.

Пользователи в клиенте Хранилище ГиБ в месяц Сообщения Центров событий в месяц Журналы Azure Monitor гиб/месяц
1000 14 62K 15
100000 1000 4,8 млн 1200

См. следующие расчеты цен для соответствующих служб:

Снижение затрат для Log Analytics

Если вы отправляете журналы в рабочую область Log Analytics, но заинтересованы только в журналах, отфильтрованных по условиям, например пропуском определенных столбцов или строк, вы можете частично сократить затраты, применив преобразование рабочей области в таблице Журналы действий Microsoft Graph. Дополнительные сведения о преобразованиях рабочей области, о том, как это влияет на затраты на прием данных и как применить преобразование к журналам действий Microsoft Graph, см. в статье Преобразование сбора данных в Azure Monitor.

Альтернативный подход к снижению затрат на Log Analytics заключается в переходе на базовый план данных журнала, который снижает счета за счет предоставления более низких возможностей. Дополнительные сведения см. в разделе Установка плана данных журнала таблицы в значение Базовый или Аналитика.

Примеры запросов журналов Azure Monitor

Если вы отправляете журналы действий Microsoft Graph в рабочую область Log Analytics, вы можете запросить журналы с помощью язык запросов Kusto (KQL). Дополнительные сведения о запросах в рабочей области Log Analytics см. в статье Анализ журналов действий Microsoft Entra с помощью Log Analytics. Эти запросы можно использовать для просмотра данных, создания правил генерации оповещений, создания панелей мониторинга Azure или интеграции с пользовательскими приложениями с помощью API журналов Azure Monitor или пакета SDK для запросов.

Следующий запрос Kusto определяет 20 основных сущностей, выполняющих запросы к группам ресурсов, которые завершаются сбоем из-за авторизации:

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

Следующий запрос Kusto определяет ресурсы, запрашиваемые или измененные потенциально рискованными пользователями:

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

Следующий запрос Kusto позволяет сопоставить журналы действий Microsoft Graph и журналы входа. Журналы действий из приложений Майкрософт могут содержать не все соответствующие записи журнала входа. Дополнительные сведения см. в разделе Известные ограничения журналов входа.

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

Следующий запрос Kusto определяет приложения, для которых применяется регулирование:

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 

Следующий запрос позволяет отобразить диаграмму временных рядов:

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 
    )

Ограничения

  • Функция журналов действий Microsoft Graph позволяет администраторам клиента собирать журналы для клиента ресурса. Эта функция не позволяет просматривать действия мультитенантного приложения в другом клиенте.
  • Вы не можете фильтровать журналы действий Microsoft Graph с помощью параметров диагностики в Azure Monitor. Однако в рабочей области Azure Log Analytics доступны варианты снижения затрат. Дополнительные сведения см. в разделе Преобразование рабочей области.
  • В большинстве регионов события доступны и доставляются в место назначения конфигурации в течение 30 минут. В менее распространенных случаях доставка некоторых событий в место назначения может занять до 2 часов.