Доступ к журналам действий 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. Дополнительные сведения см. в руководстве в следующих статьях:
- Интеграция журналов действий с журналами Azure Monitor
- Настройка diagnosticSettings с помощью 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 часов.