Разработайте решение на основе блокнота для Microsoft Sentinel

Как партнер 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
  • SentinelLake Zip-файл пакета (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.

  1. Локальная разработка блокнотов (VS Code + расширение Sentinel)
  2. Интерактивный запуск на платформе Sentinel
  3. Тестирование на основе репрезентативных данных; Проверка заполнения выходной таблицы
  4. Планирование как задание (по запросу или запланированное)
  5. Упаковать в SentinelLake .zip (PackageManifest.yaml + папка)
  6. Создание предложения SaaS в Microsoft Partner Center
  7. Отправка пакета, создание метаданных, план и цены
  8. Просмотр и публикация, автоматическая проверка, Go Live
  9. Прямой эфир в магазине Microsoft Security

Установка Visual Studio Code и расширения Microsoft Sentinel

Вся разработка блокнотов выполняется локально в VS Code с установленным расширением Microsoft Sentinel. Ядро Spark выполняется в Azure. VS Code — это клиент редактора и отправки.

  1. Скачайте Visual Studio Code из https://code.visualstudio.com/ и установите с параметрами по умолчанию.

  2. Откройте VS Code >магазин расширений (Ctrl+Shift+X или Cmd+Shift+X).

  3. Найдите Sentinel и установите расширение Microsoft Sentinel (издатель: ms-security).

    После установки значок Microsoft Sentinel появится на левой панели инструментов.

  4. (Рекомендуется) Найдите GitHub Copilot в Marketplace, установите его и войдите в GitHub при появлении запроса.

    Copilot знает API MicrosoftSentinelProvider и автоматически дополняет преобразования PySpark.

  5. Щелкните значок Microsoft Sentinel на левой панели инструментов.

  6. Подтвердите запрос на вход, а затем выберите учетную запись с ролью Sentinel Reader или Contributor в вашей рабочей области.

На левой панели показаны таблицы Lake и задания, что подтверждает, что расширение получило доступ к озеру данных.

Снимок экрана расширения Microsoft Sentinel для VS Code с разделами

Предостережение

Если у вас есть несколько гостевых клиентов, переключение учетных записей в нижнем левом углу VS Code убивает все активные сеансы PySpark— необходимо перезапустить ядро после переключения. Планируйте переключение между учетными записями между запусками, а не во время выполнения.

Разработайте свой ноутбук

Ноутбуки используют следующий шаблон разработки:

  • Считывание таблицы озера данных в DataFrame Spark
  • Преобразование с помощью PySpark
  • Дополнительное обогащение внешними данными
  • Записывайте результаты в пользовательскую таблицу, которую Sentinel может использовать

Ознакомьтесь с панелью таблиц Lake

Чтобы определить входные таблицы, которые использует записная книжка, изучите панель таблиц Lake:

  1. Щелкните значок Sentinel и разверните таблицы Lake.
  2. Таблицы группируются по базе данных и категориям (системные, пользовательские, федеративные). Выберите любую таблицу, чтобы просмотреть определения и типы столбцов.
  3. Определите входные таблицы, которые читает блокнот, и укажите их точные имена.

Создание записной книжки

Чтобы создать новую записную книжку Jupyter для решения, выполните следующие действия:

  1. Нажмите Ctrl+Shift+P / Cmd+Shift+P>, введите Create New Jupyter Notebook или выберите Файл>Создать файл>Jupyter Notebook.

    Снимок экрана: VS Code с командой Create New Jupyter Notebook.

  2. Сохраните записную книжку с описательным именем (например, 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)

Выберите пул среды выполнения и запустите ячейку

Чтобы запустить ячейку в озере данных, выберите пул и отправьте:

  1. Выберите треугольник Выполнить в ячейке.

  2. При появлении запроса выберите Microsoft Sentinel в качестве среды выполнения.

    Снимок экрана: VS Code, показывающий выбор среды выполнения.

  3. Выберите размер пула: малый для изучения, средний для преобразований, большой для машинного обучения или агрегатов на десятки миллионов строк.

При первом запуске инициализация сеанса 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 над каждым блоком кода, объясняющим назначение, входные данные, выходные данные и ожидаемые выходные данные. Рецензенты рассматривают неясные записные книжки как трудный сбой.

Тестирование записной книжки

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

Тест дыма на небольшом бассейне

Запустите блокнот целиком, чтобы убедиться, что каждая ячейка выполняется без ошибок:

  1. Перезапустите ядро, чтобы очистить любое устаревшее состояние.
  2. Запустите все ячейки сверху вниз — каждая ячейка должна завершиться без ошибок.

Если ячейка преобразования занимает более 5 минут на тарифе Small, входные фильтры недостаточно строгие. Ужесточите проекцию даты или столбца перед увеличением масштаба.

Проверка выходной таблицы

Подтвердите, что выходная таблица была создана и содержит ожидаемые данные:

  1. В расширении Sentinel на панели Lake tables обновите данные и убедитесь, что ваша выходная таблица отображается с ожидаемой схемой.
  2. Запустите ячейку проверки:
verify_df = data_provider.read_table("EntraGroups_Processed_SPRK")
print("Row count:", verify_df.count())
verify_df.printSchema()
verify_df.show(5, truncate=False)

Масштабный тест на пуле среднего или большого размера

Убедитесь, что блокнот выдает стабильные результаты при больших размерах пула:

  1. Повторно запустите блокнот с параметром Medium (и Large, если этого требует ваш набор данных).
  2. Убедитесь, что количество строк и распределение по столбцам совпадают с малым прогоном. Если они расходятся, у вас есть недетерминированное преобразование, которое требует исследования.

Тестирование пограничных вариантов

  • Пустые входные данные: точка в таблице или диапазоне дат с нулевыми строками. Блокнот должен либо корректно завершаться с ошибкой, либо записывать пустой результат, а не аварийно завершаться.
  • Дрейф схемы: если во входной таблице появляется новый столбец, ноутбук по-прежнему должен выполняться. Никогда не предполагайте позиционный порядок.

Запланируйте блокнот как задание

Большинство опубликованных решений на основе записных книжек запускаются по расписанию — почасовый базовый запуск, ежедневное сканирование аномалий и т. д. Расширение Sentinel преобразует любую сохраненную записную книжку в запланированное задание, которое выполняется автоматически в управляемом пуле Spark.

Создание задания

Чтобы преобразовать записную книжку в запланированное задание, выполните следующие действия:

  1. Откройте записную книжку в VS Code.
  2. Выберите в записной книжке Создать запланированное задание, затем при появлении запроса выберите Использовать существующую записную книжку.

Дополнительные сведения см. в статье "Создание заданий записной книжки Jupyter и управление ими".

Снимок экрана: создание запланированного задания в записной книжке.

Настройка задания

Чтобы настроить запланированное задание, заполните следующие поля:

  1. Введите имя задания в формате kebab-case, описывающее блокнот (например, failed-signin-baseline-hourly).
  2. Введите Описание из одного предложения, в котором описываются назначение задания и выходная таблица.
  3. Выберите размер пула Spark , который вы проверили во время тестирования. Не выделяйте слишком большой пул — задания выполняются в нём при каждом вызове.
  4. В поле "Расписание" выберите " По запросу " для ручных запусков или "Запланировано " с частотой повторения (минута, почасовая, ежедневная, еженедельная или ежемесячная).
  5. Нажмите кнопку "Отправить ", чтобы опубликовать задание.

Проверка задания

После отправки убедитесь, что задание выполняется правильно:

  1. Переключитесь на панель "Задания " в расширении Sentinel. Появится задание.

  2. Выберите задание >run now для немедленного выполнения проверки.

  3. Снимок экрана, показывающий, как немедленно запустить задание блокнота.

  4. После завершения выполнения перейдите на вкладку "Журнал выполнения ", чтобы проверить журналы и время выполнения.

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, измените его, а затем используйте команду "Изменить задание>" , чтобы отправить новую версию.
Задача выполняется, но не выводит никаких данных Проверьте вкладку «История запусков» на панели «Задания» — в журнале выполнения обычно отображается ячейка, в которой произошёл сбой. Чаще всего это происходит, когда ноутбук пытается читать данные из таблицы, к которой у учетной записи, под которой он выполняется, нет доступа.

Дополнительные сведения см. в разделе "Устранение неполадок с записными книжками".