Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Как партнер ISV, вы можете создавать, тестировать, упаковывать и публиковать аналитические решения на основе ноутбуков Jupyter в магазине Microsoft Security в виде предложений SaaS. Озеро данных Microsoft Sentinel поддерживает ноутбуки Jupyter, которые работают в управляемых пулах Spark с крупными наборами данных безопасности. Эти блокноты идеально подходят для обнаружения медленных и малозаметных атак, построения поведенческого базового профиля, аналитики на основе ИИ/МО, сопоставления путей прохождения конфиденциальных данных, визуализации данных и обогащения, которые невозможно реализовать с помощью традиционных правил обнаружения на языке KQL.
Решение на платформе ноутбуков обычно предназначено для исторического анализа, сложных преобразований данных и повторяющихся рабочих процессов обработки данных. Он записывает выводы в пользовательскую таблицу в озере данных, где аналитические правила, охотничьи запросы, агенты Security Copilot или инструменты MCP могут поглощать результаты решения ноутбука. Пакет .zip, который вы отправляете в Центр партнеров, объявлен как тип SentinelLake и содержит записные книжки, а также при необходимости шаблон ARM для зависимых ресурсов Azure, необходимых записной книжке.
В этой статье вы проведете вас через процесс сборки, тестирования, упаковки и публикации решения для ноутбуков на платформе Microsoft Sentinel в Microsoft Security Store. После выполнения этого руководства у вас будет следующее:
- Рабочий блокнот Jupyter, который считывает данные из озера данных Sentinel
- Запланированное задание, которое запускает записную книгу в управляемом пуле Spark
-
SentinelLakeZip-файл пакета (PackageManifest+ папка записной книжки) - Описание предложения SaaS в Центре партнеров в магазине Microsoft Security
Необходимые условия
Ваш арендатор должен быть подключен к озеру данных Microsoft Sentinel. Проверьте состояние подключения на портале Defender. Перейдите к Система>Параметры>Microsoft Sentinel>Озеро данных. Состояние отображается как Provisioned, если ваш арендатор готов. Инструкции по подключению см. в разделе "Подключение к озеру данных Microsoft Sentinel".
Необходимые разрешения
| Эксплуатация/Ресурс | Требуемая роль |
|---|---|
| Подключитесь к озеру данных Sentinel | Microsoft Entra ID — администратор безопасности или глобальный администратор |
| Подключите рабочую область Sentinel к порталу Defender | Владелец подписки или администратор доступа пользователей на уровне подписки, а также участник Microsoft Sentinel на уровне подписки или группы ресурсов |
| Подключить рабочую область Sentinel к Озеро данных | Владелец подписки или участник Microsoft Sentinel на уровне подписки или группы ресурсов |
| Запускайте ноутбуки в озере данных | Читатель или участник Microsoft Sentinel |
| Рабочая область Log Analytics (для обратной записи на уровень аналитики) | Соавтор Log Analytics, назначенный управляемой идентификации озера данных msg-resources-<guid> |
| Центр партнеров Майкрософт | Аккаунт Marketplace Publisher (одноразовый; тот же аккаунт используется для Security copilot agent publishing) |
Замечание
Роль владельца подписки необходима для одноразовой задачи подключения озера данных. Используйте Microsoft Entra управление привилегированными пользователями (PIM), чтобы временно повысить уровень до этой роли только при необходимости, а затем удалить доступ после завершения подключения.
Необходимые средства
- Visual Studio Code.
- Расширение Microsoft Sentinel для VS Code
- Рекомендуется расширение GitHub Copilot VS Code для ускорения создания блокнота.
- Python 3.10+ установлен локально. Ядро Spark выполняется в Azure, но VS Code требует локального интерпретатора для редактирования ячеек.
Обзор процесса
Процесс публикации начинается с разработки в локальном блокноте, а затем переходит к пакетному предложению SaaS, которое можно найти в Microsoft Security Store.
- Локальная разработка блокнотов (VS Code + расширение Sentinel)
- Интерактивный запуск на платформе Sentinel
- Тестирование на основе репрезентативных данных; Проверка заполнения выходной таблицы
- Планирование как задание (по запросу или запланированное)
- Упаковать в SentinelLake .zip (PackageManifest.yaml + папка)
- Создание предложения SaaS в Microsoft Partner Center
- Отправка пакета, создание метаданных, план и цены
- Просмотр и публикация, автоматическая проверка, Go Live
- Прямой эфир в магазине Microsoft Security
Установка Visual Studio Code и расширения Microsoft Sentinel
Вся разработка блокнотов выполняется локально в VS Code с установленным расширением Microsoft Sentinel. Ядро Spark выполняется в Azure. VS Code — это клиент редактора и отправки.
Скачайте Visual Studio Code из
https://code.visualstudio.com/и установите с параметрами по умолчанию.Откройте VS Code >магазин расширений (Ctrl+Shift+X или Cmd+Shift+X).
Найдите Sentinel и установите расширение Microsoft Sentinel (издатель:
ms-security).После установки значок Microsoft Sentinel появится на левой панели инструментов.
(Рекомендуется) Найдите GitHub Copilot в Marketplace, установите его и войдите в GitHub при появлении запроса.
Copilot знает API
MicrosoftSentinelProviderи автоматически дополняет преобразования PySpark.Щелкните значок Microsoft Sentinel на левой панели инструментов.
Подтвердите запрос на вход, а затем выберите учетную запись с ролью Sentinel Reader или Contributor в вашей рабочей области.
На левой панели показаны таблицы Lake и задания, что подтверждает, что расширение получило доступ к озеру данных.
Предостережение
Если у вас есть несколько гостевых клиентов, переключение учетных записей в нижнем левом углу VS Code убивает все активные сеансы PySpark— необходимо перезапустить ядро после переключения. Планируйте переключение между учетными записями между запусками, а не во время выполнения.
Разработайте свой ноутбук
Ноутбуки используют следующий шаблон разработки:
- Считывание таблицы озера данных в DataFrame Spark
- Преобразование с помощью PySpark
- Дополнительное обогащение внешними данными
- Записывайте результаты в пользовательскую таблицу, которую Sentinel может использовать
Ознакомьтесь с панелью таблиц Lake
Чтобы определить входные таблицы, которые использует записная книжка, изучите панель таблиц Lake:
- Щелкните значок Sentinel и разверните таблицы Lake.
- Таблицы группируются по базе данных и категориям (системные, пользовательские, федеративные). Выберите любую таблицу, чтобы просмотреть определения и типы столбцов.
- Определите входные таблицы, которые читает блокнот, и укажите их точные имена.
Создание записной книжки
Чтобы создать новую записную книжку Jupyter для решения, выполните следующие действия:
Нажмите Ctrl+Shift+P / Cmd+Shift+P>, введите Create New Jupyter Notebook или выберите Файл>Создать файл>Jupyter Notebook.
Сохраните записную книжку с описательным именем (например,
failed-signin-baseline.ipynb).
Прочитать таблицу
Вставьте этот шаблон в первую ячейку и замените имя таблицы вашими:
from sentinel_lake.providers import MicrosoftSentinelProvider
data_provider = MicrosoftSentinelProvider(spark)
# Read a table from the data lake
table_name = "EntraGroups"
df = data_provider.read_table(table_name)
# Quick sanity check—show 100 rows
df.select("displayName", "groupTypes", "mail", "tenantId").show(100, truncate=False)
Выберите пул среды выполнения и запустите ячейку
Чтобы запустить ячейку в озере данных, выберите пул и отправьте:
Выберите треугольник Выполнить в ячейке.
При появлении запроса выберите Microsoft Sentinel в качестве среды выполнения.
Выберите размер пула: малый для изучения, средний для преобразований, большой для машинного обучения или агрегатов на десятки миллионов строк.
При первом запуске инициализация сеанса Spark занимает от 3 до 5 минут. Последующие ячейки выполняются за считанные секунды.
Преобразование и запись обратно в настраиваемую таблицу
Метод save_as_table() записывает DataFrame в пользовательскую таблицу в слое lake (или analytics). Целевая таблица создается при первой записи.
df_transformed = (
df.filter(df.mail.isNotNull())
.select("displayName", "groupTypes", "mail", "mailNickname", "description", "tenantId")
)
write_options = {"mode": "overwrite"}
data_provider.save_as_table(
df_transformed,
"EntraGroups_Processed_SPRK",
write_options=write_options,
)
Шаблоны создания блокнотов
В следующих шаблонах рассматриваются наиболее распространенные сценарии:
| Рисунок | Когда его использовать |
|---|---|
| Базовая линия + дрейф | Вычислите нормальное поведение для каждого пользователя или узла; помечайте строки, которые отклоняются от базового уровня. Классический вариант для аналитики неудачных попыток входа и выполнения процессов. |
| Соединение между таблицами | Присоединяйтесь к таблице озера, принадлежащей вам со встроенными таблицами (SigninLogs, SecurityAlert, DeviceProcessEvents) на общих сущностях (UPN, host, IP). |
| Скоринг с помощью машинного обучения | Обучите модель или загрузите предварительно обученную модель в блокноте; оцените каждую строку; запишите N самых рискованных строк в пользовательскую выходную таблицу для последующих оповещений. |
| Визуальное исследование | Стройте временные шкалы, тепловые карты и деревья процессов с помощью matplotlib или plotly; экспортируйте ноутбук в формате HTML для передачи. |
Tip
Используйте ячейки Markdown свободно для документирования кода. Специалист, проверяющий Security Store, и аналитик SOC, который запускает ваш блокнот, должны понимать, для чего предназначен каждый раздел, не читая код. Поместите ячейку markdown над каждым блоком кода, объясняющим назначение, входные данные, выходные данные и ожидаемые выходные данные. Рецензенты рассматривают неясные записные книжки как трудный сбой.
Тестирование записной книжки
Тестирование требует подтверждения того, что блокнот выполняется от начала до конца на реалистичных данных и создает пригодную для использования выходную таблицу.
Тест дыма на небольшом бассейне
Запустите блокнот целиком, чтобы убедиться, что каждая ячейка выполняется без ошибок:
- Перезапустите ядро, чтобы очистить любое устаревшее состояние.
- Запустите все ячейки сверху вниз — каждая ячейка должна завершиться без ошибок.
Если ячейка преобразования занимает более 5 минут на тарифе Small, входные фильтры недостаточно строгие. Ужесточите проекцию даты или столбца перед увеличением масштаба.
Проверка выходной таблицы
Подтвердите, что выходная таблица была создана и содержит ожидаемые данные:
- В расширении Sentinel на панели Lake tables обновите данные и убедитесь, что ваша выходная таблица отображается с ожидаемой схемой.
- Запустите ячейку проверки:
verify_df = data_provider.read_table("EntraGroups_Processed_SPRK")
print("Row count:", verify_df.count())
verify_df.printSchema()
verify_df.show(5, truncate=False)
Масштабный тест на пуле среднего или большого размера
Убедитесь, что блокнот выдает стабильные результаты при больших размерах пула:
- Повторно запустите блокнот с параметром Medium (и Large, если этого требует ваш набор данных).
- Убедитесь, что количество строк и распределение по столбцам совпадают с малым прогоном. Если они расходятся, у вас есть недетерминированное преобразование, которое требует исследования.
Тестирование пограничных вариантов
- Пустые входные данные: точка в таблице или диапазоне дат с нулевыми строками. Блокнот должен либо корректно завершаться с ошибкой, либо записывать пустой результат, а не аварийно завершаться.
- Дрейф схемы: если во входной таблице появляется новый столбец, ноутбук по-прежнему должен выполняться. Никогда не предполагайте позиционный порядок.
Запланируйте блокнот как задание
Большинство опубликованных решений на основе записных книжек запускаются по расписанию — почасовый базовый запуск, ежедневное сканирование аномалий и т. д. Расширение Sentinel преобразует любую сохраненную записную книжку в запланированное задание, которое выполняется автоматически в управляемом пуле Spark.
Создание задания
Чтобы преобразовать записную книжку в запланированное задание, выполните следующие действия:
- Откройте записную книжку в VS Code.
- Выберите в записной книжке Создать запланированное задание, затем при появлении запроса выберите Использовать существующую записную книжку.
Дополнительные сведения см. в статье "Создание заданий записной книжки Jupyter и управление ими".
Настройка задания
Чтобы настроить запланированное задание, заполните следующие поля:
- Введите имя задания в формате kebab-case, описывающее блокнот (например,
failed-signin-baseline-hourly). - Введите Описание из одного предложения, в котором описываются назначение задания и выходная таблица.
- Выберите размер пула Spark , который вы проверили во время тестирования. Не выделяйте слишком большой пул — задания выполняются в нём при каждом вызове.
- В поле "Расписание" выберите " По запросу " для ручных запусков или "Запланировано " с частотой повторения (минута, почасовая, ежедневная, еженедельная или ежемесячная).
- Нажмите кнопку "Отправить ", чтобы опубликовать задание.
Проверка задания
После отправки убедитесь, что задание выполняется правильно:
Переключитесь на панель "Задания " в расширении Sentinel. Появится задание.
Выберите задание >run now для немедленного выполнения проверки.
После завершения выполнения перейдите на вкладку "Журнал выполнения ", чтобы проверить журналы и время выполнения.
Important
Отправленные задания отделены от локального .ipynb файла. Изменение локального файла не обновляет выполняемую работу. Чтобы обновить задание: откройте его на панели Задания>Скачать блокнот> измените >Изменить задание>Отправить, чтобы загрузить обновлённую версию.
Просмотр задания на портале Defender
Перейдите в Microsoft Sentinel>Обозреватель озера данных>Задания. Здесь можно включить или отключить расписание и просматривать историю запусков, но редактировать записную книжку в портале нельзя.
Упакуйте и опубликуйте решение для блокнота
После тестирования и материализации ноутбука упакуйте его для развертывания у клиентов. Подробные инструкции по упаковке см. в статье Упаковка и публикация решений Microsoft Sentinel с графами и записными книжками.
Troubleshooting
Создание записной книжки
| Симптом | Вероятно, причина и исправление |
|---|---|
MicrosoftSentinelProvider не найдено |
В расширении не выполнен вход или вы открыли ядро не Spark. Войдите в расширение Microsoft Sentinel и выберите среду выполнения Microsoft Sentinel при появлении запроса. |
| Ячейка зависает на этапе «Запуск сессии Spark» | Запуск первой ячейки занимает от 3 до 5 минут. Через 6 минут проверьте индикатор использования vCore в строке состояния — возможно, ваш пул достиг предельной ёмкости. Попробуйте уменьшить размер пула. |
save_as_table завершается с ошибкой «Доступ запрещён» на уровне аналитики |
Управляемая идентичность msg-resources-<guid> с озером данных не имеет Log Analytics Contributor в рабочем пространстве Log Analytics. Назначьте его в соответствии с предварительными требованиями и повторите попытку. |
| Выходная таблица отображается на панели таблиц Lake , но пуста |
.filter(), вероятно, удалил все строки. Добавьте вывод количества строк непосредственно перед save_as_table, чтобы локализовать проблему. |
Дополнительные сведения см. в разделе "Устранение неполадок с записными книжками".
Планирование заданий
| Симптом | Вероятно, причина и исправление |
|---|---|
Изменения в локальном .ipynb не отражаются в запланированном задании |
Отправленные задания отделены от локального файла. Скачайте задание из VS Code, измените его, а затем используйте команду "Изменить задание>" , чтобы отправить новую версию. |
| Задача выполняется, но не выводит никаких данных | Проверьте вкладку «История запусков» на панели «Задания» — в журнале выполнения обычно отображается ячейка, в которой произошёл сбой. Чаще всего это происходит, когда ноутбук пытается читать данные из таблицы, к которой у учетной записи, под которой он выполняется, нет доступа. |
Дополнительные сведения см. в разделе "Устранение неполадок с записными книжками".