Освоение Graph Explorer: отслеживание действий пользователя от начала до конца
By Mirko Peters ·
Добро пожаловать обратно в блог-компаньон к подкасту! В сегодняшнем посте мы выходим далеко за пределы фрагментированных административных интерфейсов, которые мы все знаем и с которыми иногда мучаемся…
Automatically translated with AI from the original post. Read the English original
Добро пожаловать обратно в сопутствующий блог к подкасту! В сегодняшнем посте мы выходим далеко за пределы фрагментированных административных интерфейсов, которые все мы знаем и с которыми порой мучаемся. Если вам когда-либо приходилось собирать полный журнал аудита того, к чему конкретный пользователь получал доступ, чем делился и что редактировал в Microsoft 365, вы уже знаете, насколько разрозненными могут казаться нативные центры администрирования. Поэтому мы подробно разберём Microsoft Graph. Используя Graph API, мы можем легко переходить от отдельных пользователей к группам, сайтам SharePoint, файлам, внешним ссылкам и даже активным просмотрщикам. Если вы хотите следить за аудиообсуждением, которое дополняет это руководство, обязательно посмотрите связанный выпуск Map Microsoft 365 Users, Groups, Files, and Shares with Graph.
Почему M365 не изолирован
Одно из самых распространённых заблуждений у администраторов и команд безопасности состоит в том, что отдельные службы Microsoft 365 работают как безопасные, самодостаточные изолированные системы. На деле чаты Teams, библиотеки документов SharePoint и папки OneDrive постоянно пересекаются между собой через базовое членство в группах и наследование разрешений.
- Чаты Teams, библиотеки SharePoint и папки OneDrive связаны между собой через членство в группах.
- Простое действие «добавить одного пользователя в одну группу» может незаметно открыть доступ к множеству скрытых сайтов, каналов и внешних общих ресурсов, не оставляя очевидного следа в стандартных представлениях аудита.
- Риски соответствия требованиям возникают из этих невидимых путей: гостевые ссылки, оставленные в приватных чатах, файлы, продублированные в нескольких библиотеках, и забытые общие ресурсы, которые остаются уже после завершения проектов.
Картирование присутствия с помощью Graph Explorer (от пользователя до точек касания с файлами)
Чтобы по-настоящему понять, как доступ распространяется по вашему клиенту, нужен повторяемый шаблон запросов. В Graph Explorer можно выполнить последовательную цепочку вызовов API, чтобы построить полную карту касаний пользователя:
- Привязка к целевому пользователю:
GET /v1.0/users/{userPrincipalName}?$select=id,displayName,userPrincipalName - Получение прямых и косвенных членств:
GET /v1.0/users/{id}/memberOf?$select=id,displayName - Переход к ресурсам, которые открывают эти группы. Для групп Microsoft 365 и Teams обращайтесь к базовому сайту SharePoint:
GET /v1.0/groups/{groupId}/drive/root/children?$select=id,name,lastModifiedDateTime,webUrl
Или перечислите диски и библиотеки сайта напрямую:
GET /v1.0/sites/{siteId}/drives - Получение разрешений элементов и ссылок общего доступа:
GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$select=id,grantedToV2,link,roles,shareId - Отслеживание того, кто и когда получал доступ к чему, там, где это доступно, с помощью журналов аудита и входа:
GET /v1.0/auditLogs/signIns или /security/alerts в сочетании с контекстом файла, сайта или общего доступа. - Замыкание цепочки на сообщения Teams и публикации в каналах:
GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="filename" (требуются эндпоинты beta и соответствующие разрешения).
Фильтры для отсечения шума, которые вы действительно будете использовать
Получение сырых данных из Microsoft Graph быстро может напоминать попытку пить из пожарного шланга. Чтобы превратить огромные наборы данных в полезные выводы, необходимо использовать точные параметры запроса.
- Выделение внешних общих ресурсов, созданных за последние 7 дней, с помощью фильтров области:
GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$filter=link/scope eq 'anonymous' or link/scope eq 'organization'&$select=… - Выделение рискованных типов файлов по расширениям имён:
Добавьте $filter=endsWith(resourceReference/name,'.xlsm') or endsWith(resourceReference/name,'.pst') - Отслеживание упоминаний конфиденциальных терминов в каналах Teams вне рабочего времени:
GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="confidential", затем отфильтруйте результаты по createdDateTime за пределами обычного рабочего времени. - Держите полезную нагрузку компактной и эффективной, всегда добавляя $select, чтобы возвращать только идентификаторы, имена, веб-адреса, метки времени последнего изменения и минимальные поля разрешений.
- Ограничивайте количество результатов для быстрой сортировки, используя $top=50 для быстрых выборочных проверок, но не забывайте снимать это ограничение при экспорте данных в постоянное хранилище.
Обязательные требования для масштабирования (пагинация и ограничение частоты запросов)
Когда вы масштабируете эти запросы с одного тестового пользователя на корпоративный клиент с сотнями тысяч объектов, производительность и надёжность становятся главными.
- Выборка данных не считается завершённой, пока вы явно не пройдёте по свойству @odata.nextLink для каждой страницы результатов.
- Учитывайте ответы HTTP 429 об ограничении частоты запросов: реализуйте процедуры экспоненциальной задержки повторов и убедитесь, что скрипт может безопасно продолжить работу с того места, где остановился.
- Группируйте запросы разумно. Лучше выполнять меньше, но крупнее и хорошо структурированные запросы, чем лавину мелких вызовов, и активно кэшируйте сопоставления групп и сайтов.
- Разбивайте обход больших клиентов по идентификаторам конкретных сайтов SharePoint или диапазонам дат, чтобы избежать тайм-аутов запросов, и планируйте эти ресурсоёмкие операции на периоды вне пиковой нагрузки.
Типичные ошибки (и быстрые способы их исправить)
Даже опытные администраторы сталкиваются с препятствиями при построении автоматизированных конвейеров запросов к Graph. Имейте в виду эти распространённые ловушки и способы их быстро устранить:
- Ошибка: экспорты в CSV со временем расходятся и ломаются по мере изменения схем данных.
Решение: используйте Graph API напрямую с версионируемыми преобразованиями и надёжной обработкой полей «unknown». - Ошибка: смешанные идентификаторы, такие как GUID и User Principal Name, ломают соединения в базе данных.
Решение: приведите данные к единой семантической модели, охватывающей пользователей, группы, сайты, диски, элементы и разрешения. - Ошибка: «смещение к первой странице» ослепляет мониторинг и скрывает серьёзные инциденты безопасности, спрятанные на более глубоких страницах.
Решение: всегда фиксируйте общее количество обработанных страниц и запускайте оповещения, если ожидаемый объём записей неожиданно падает. - Ошибка: вас завалили неуправляемым объёмом нерелевантных файлов.
Решение: явно фильтруйте по областям действия ссылок, конкретным временным окнам создания и изменения, а также по целевым спискам чувствительных терминов. - Ошибка: общие ресурсы Teams не связываются с базовыми файлами.
Решение: сопоставляйте веб-URL сообщений канала с элементами дисков и сохраняйте оба уникальных идентификатора.
Ключевые показатели для руководства, которые это открывает
Преобразование необработанных результатов Graph API в структурированные метрики даёт руководству видимость, которая им действительно необходима. Ключевые показатели эффективности, которые можно получить:
- Скорость внешнего распространения: количество новых гостевых ссылок, созданных за неделю, с разбивкой по сайтам или командам.
- Доля обращений к чувствительным файлам: отслеживание уникальных пользователей, просматривающих помеченный контент, с разделением внутренних пользователей и внешних гостей.
- Волновой риск групп: выявление файлов, которые внезапно становятся доступны в течение 24 часов после изменения членства в группе.
- Теневое распространение: отслеживание чувствительных файлов, которые тиражируются между несколькими командами и сайтами в рамках одного спринта.
- Эффективность очистки: подсчёт отозванных ссылок общего доступа и измерение общего времени на устранение проблем.
Быстрый старт: рецепт запросов (порядок копирования и вставки)
Если вы хотите прямо сейчас выполнить первую сквозную проверку в Graph Explorer, используйте этот последовательный рабочий процесс копирования и вставки:
- Запросите базовые данные пользователя и его группы:
/users/{upn}?$select=id,displayName
/users/{id}/memberOf?$select=id,displayName - Для каждой найденной группы Microsoft 365 получите дочерние элементы диска:
/groups/{groupId}/drive/root/children?$select=id,name,webUrl,lastModifiedDateTime&$top=200
Обязательно переходите по @odata.nextLink - Для каждого файла проверьте разрешения:
/drives/{driveId}/items/{itemId}/permissions?$select=id,roles,grantedToV2,link
Отфильтруйте так, чтобы область действия link/scope была в ('anonymous','organization') - Экспортируйте очищенные строки в хранилище данных, включая время клиента, ID сайта, ID диска, ID элемента, веб-URL, владельца, область действия и данные о сроке действия.
- Визуализируйте агрегированные данные в Power BI для постоянного контроля в организации.
Превращаем это в действующую панель мониторинга
Разовые запросы в Graph Explorer отлично подходят для расследований, но реальное управление требует автоматизации. Превратите свои запросы в действующую операционную панель: создайте надёжные потоки данных, нормализуйте таблицы для пользователей, групп, сайтов, дисков, элементов, разрешений и сообщений и постройте схему «звезда» с центром в файловых элементах. Настройте инкрементальное обновление данных по датам изменения и оповещения в реальном времени, которые срабатывают при появлении новых внешних ссылок на особо чувствительном помеченном контенте.
План внедрения на 30 дней
Готовы применить это в своей организации? Следуйте этой структурированной четырёхнедельной схеме внедрения:
- Неделя 1: завершите регистрацию приложения, назначьте разрешения Graph API с минимально необходимыми правами и создайте базовые запросы с точными параметрами $select и $filter.
- Неделя 2: создайте скрипты постраничной выборки, реализуйте нормализацию идентификаторов из ID в UPN и выполните первый успешный экспорт данных.
- Неделя 3: постройте модель данных в Power BI и базовые KPI, включая отслеживание внешнего доступа и анализ риска каскадного распространения.
- Неделя 4: автоматизируйте обновление данных, настройте оповещения об аномалиях и задокументируйте стандартные рабочие процедуры для команд безопасности и соответствия требованиям.
Кому стоит посмотреть
Эта методология создана для конкретных ролей в вашей организации:
- Администраторы Microsoft 365 и руководители SecOps, которые подозревают, что стандартные административные панели скрывают критичные серые зоны.
- Команды соответствия требованиям, которым нужна сквозная видимость совместного доступа без лишнего стороннего ПО.
- Владельцы совместной работы, которые в конечном счёте отвечают за безопасные и контролируемые практики внешнего общего доступа.
Практические советы
Держите эти практические советы под рукой, пока строите автоматизацию на основе Graph:
- Всегда начинайте расследование либо с пользователя, либо с файла, а затем расширяйте картину в обоих направлениях, чтобы устранить слепые зоны.
- Относитесь к любому действию «добавить в группу» как к высокорисковому событию изменения и проверяйте последствия для доступа в течение 24 часов.
- Ведите актуальный короткий список чувствительных терминов для поиска в сообщениях Teams и именах файлов и регулярно его пересматривайте.
- Внимательно фиксируйте количество обработанных страниц и объёмы записей: иногда полное отсутствие записей в логах и есть признак того, что конвейер задания сломан.
Заключение
Освоение Microsoft Graph для отслеживания следов пользователей от начала до конца соединяет разрозненные административные представления с реальной видимостью в масштабе организации. Переходя от изолированных хранилищ к отображению связей доступа, вы можете проактивно защищать чувствительные данные, устранять теневое распространение и предоставлять руководству KPI, на которые можно опереться. Чтобы узнать больше экспертных разборов, реальных примеров и подробностей о таких сценариях, обязательно послушайте полный выпуск: Map Microsoft 365 Users, Groups, Files, and Shares with Graph.
Подпишитесь
Для более глубоких разборов и практических рецептов Graph смотрите новые выпуски на m365.show/subscribe