Exécuter des notebooks sur le lac de données Microsoft Sentinel

Les notebooks Jupyter fournissent un environnement interactif pour l’exploration, l’analyse et la visualisation des données dans le lac de données Microsoft Sentinel et les tables fédérées. Les notebooks vous permettent d’écrire et d’exécuter du code, de documenter votre flux de travail et d’afficher les résultats au même endroit. Cela facilite l’exploration des données, la création de solutions analytiques avancées et le partage d’informations avec d’autres personnes. En tirant parti de Python et Apache Spark dans Visual Studio Code, les notebooks vous aident à transformer des données de sécurité brutes en informations exploitables.

Cet article explique comment explorer et interagir avec des données de lac de données à l’aide de notebooks Jupyter dans Visual Studio Code.

Configuration requise

Intégrer au lac de données Microsoft Sentinel

Pour utiliser des notebooks dans le lac de données Microsoft Sentinel, vous devez d’abord intégrer le lac de données. Si vous n’avez pas intégré au lac de données Sentinel, consultez Intégration à Microsoft Sentinel lac de données. Si vous avez récemment intégré le lac de données, l’ingestion d’un volume suffisant de données peut prendre un certain temps avant que vous puissiez créer des analyses significatives à l’aide de notebooks.

Autorisations

Microsoft Entra ID rôles fournissent un accès étendu à tous les espaces de travail du lac de données. Vous pouvez également accorder l’accès à des espaces de travail individuels à l’aide de Azure rôles RBAC. Les utilisateurs disposant d’autorisations RBAC Azure pour Microsoft Sentinel espaces de travail peuvent exécuter des notebooks sur ces espaces de travail dans le niveau data lake. Pour plus d’informations, consultez Rôles et autorisations dans Microsoft Sentinel.

Si vous le souhaitez, Microsoft Sentinel RBAC d’étendue ou au niveau des lignes peut être configuré pour restreindre davantage l’accès aux données au sein d’un espace de travail. Lorsqu’elle est activée, l’étendue au niveau des lignes limite les données retournées par les requêtes en fonction de l’étendue attribuée à l’utilisateur. Si l’étendue au niveau des lignes n’est pas configurée, le modèle d’autorisation existant au niveau de l’espace de travail s’applique sans modification. Pour plus d’informations, consultez Configurer Microsoft Sentinel étendue (RBAC au niveau des lignes) (préversion) .

Pour créer des tables personnalisées dans le niveau analytique, l’identité managée data lake doit se voir attribuer le rôle Contributeur Log Analytics dans l’espace de travail Log Analytics.

Pour attribuer le rôle, suivez les étapes ci-dessous :

  1. Dans le Portail Azure, accédez à l’espace de travail Log Analytics auquel vous souhaitez attribuer le rôle.
  2. Sélectionnez Contrôle d’accès (IAM) dans le volet de navigation gauche.
  3. Sélectionnez Ajouter une attribution de rôle.
  4. Dans la table Rôle , sélectionnez Contributeur Log Analytics, puis Suivant
  5. Sélectionnez Identité managée, puis sélectionnez Sélectionner des membres.
  6. Votre identité managée data lake est une identité managée affectée par le système nommée msg-resources-<guid>. Sélectionnez l’identité managée, puis sélectionnez Sélectionner.
  7. Sélectionnez Vérifier et attribuer.

Pour plus d’informations sur l’attribution de rôles à des identités managées, consultez Attribuer des rôles Azure à l’aide de la Portail Azure.

Installer Visual Studio Code et l’extension Microsoft Sentinel

Si vous n’avez pas encore Visual Studio Code, téléchargez et installez Visual Studio Code pour Mac, Linux ou Windows.

L’extension Microsoft Sentinel pour Visual Studio Code (VS Code) est installée à partir de la Place de marché des extensions. Pour installer l’extension, procédez comme suit :

  1. Sélectionnez la Place de marché extensions dans la barre d’outils de gauche.
  2. Recherchez Sentinel.
  3. Sélectionnez l’extension Microsoft Sentinel, puis sélectionnez Installer.
  4. Une fois l’extension installée, l’icône Microsoft Sentinel bouclier s’affiche dans la barre d’outils de gauche.

Capture d’écran montrant la place de marché de l’extension.

Installez l’extension GitHub Copilot pour Visual Studio Code afin d’activer la saisie semi-automatique du code et les suggestions dans les notebooks.

  1. Recherchez GitHub Copilot dans la Place de marché des extensions et installez-la.
  2. Après l’installation, connectez-vous à GitHub Copilot à l’aide de votre compte GitHub.

Explorer les tables de niveau de lac de données

Après avoir installé l’extension Microsoft Sentinel, vous pouvez commencer à explorer les tables de niveau lac de données et à créer des notebooks Jupyter pour analyser les données.

Connectez-vous à l’extension Microsoft Sentinel

  1. Sélectionnez l’icône Microsoft Sentinel bouclier dans la barre d’outils de gauche.

  2. Une boîte de dialogue s’affiche avec le texte suivant L’extension « Microsoft Sentinel » souhaite se connecter à l’aide de Microsoft. Sélectionnez Autoriser.

    Capture d’écran montrant la boîte de dialogue de connexion.

  3. Sélectionnez le nom de votre compte pour terminer la connexion.

    Capture d’écran montrant la liste de sélection de compte en haut de la page.

    Si vous avez plusieurs comptes invités associés à votre connexion, vous pouvez basculer en toute transparence entre les comptes. Pour basculer entre les comptes, sélectionnez le nom du compte en bas à gauche de la fenêtre Visual Studio Code. Un seul compte peut être sélectionné à la fois.

    Capture d’écran montrant comment changer de compte dans Visual Studio Code.

    Importante

    Le basculement entre les comptes déconnecte toutes les sessions pyspark actives.

Afficher les tables et les travaux de lac de données

Une fois que vous êtes connecté, l’extension Sentinel affiche une liste de tables lake et de travaux dans le volet gauche. Les tables sont regroupées par base de données et catégorie. Les tables fédérées sont affichées sous la catégorie Tables fédérées sous Tables système. Sélectionnez une table pour afficher les définitions de colonne.

Pour plus d’informations sur les travaux, consultez Travaux et planification. Pour plus d’informations sur les tables fédérées, consultez Utilisation de tables fédérées dans le lac de données Microsoft Sentinel.

Capture d’écran montrant la liste des tables, des travaux et les métadonnées de la table sélectionnée.

Créer un bloc-notes

  1. Pour créer un bloc-notes, utilisez l’une des méthodes suivantes.

  2. Entrez > dans la zone de recherche ou appuyez sur Ctrl+Maj+P, puis entrez Créer un nouveau Jupyter Notebook. Capture d’écran montrant comment créer un bloc-notes à partir de la barre de recherche.

  3. Sélectionnez Fichier > Nouveau fichier, puis sélectionnez Jupyter Notebook dans la liste déroulante.
    Capture d’écran montrant comment créer un bloc-notes dans le menu Fichier.

  4. Dans le nouveau notebook, collez le code suivant dans la première cellule.

    from sentinel_lake.providers import MicrosoftSentinelProvider
    data_provider = MicrosoftSentinelProvider(spark)
    
    table_name = "EntraGroups"  
    df = data_provider.read_table(table_name)  
    df.select("displayName", "groupTypes", "mail", "mailNickname", "description", "tenantId").show(100,   truncate=False)  
    

L’éditeur fournit la saisie semi-automatique du code IntelliSense pour la MicrosoftSentinelProvider classe et les noms de table dans le lac de données.

  1. Sélectionnez le triangle Exécuter pour exécuter le code dans le notebook. Les résultats sont affichés dans le volet de sortie sous la cellule de code.
    Capture d’écran montrant comment exécuter une cellule de notebook.

  2. Sélectionnez Microsoft Sentinel dans la liste pour obtenir la liste des pools d’exécution. Capture d’écran montrant le sélecteur d’exécution.

  3. Sélectionnez Moyen pour exécuter le notebook dans le pool d’exécution de taille moyenne. Pour plus d’informations sur les différents runtimes, consultez Sélection du runtime Microsoft Sentinel approprié. Capture d’écran montrant le sélecteur de taille du pool d’exécution.

Remarque

La sélection du noyau démarre la session Spark et exécute le code dans le notebook. Après avoir sélectionné le pool, le démarrage de la session peut prendre 3 à 5 minutes. Les exécutions suivantes sont plus rapides, car la session est déjà active.

Lorsque la session est démarrée, le code du notebook s’exécute et les résultats sont affichés dans le volet de sortie sous la cellule de code, par exemple : Capture d’écran montrant les résultats de l’exécution d’une cellule de notebook.

Pour obtenir des exemples de notebooks qui montrent comment interagir avec le lac de données Microsoft Sentinel, consultez Exemples de notebooks pour Microsoft Sentinel lac de données.

Barre d’état

La barre status en bas du bloc-notes fournit des informations sur l’état actuel du bloc-notes et de la session Spark. La barre status contient les informations suivantes :

  • Pourcentage d’utilisation des vCores pour le pool Spark sélectionné. Pointez sur le pourcentage pour voir le nombre de vCores utilisés et le nombre total de vCores disponibles dans le pool. Les pourcentages représentent l’utilisation actuelle des charges de travail et interactives pour le compte connecté.

  • La connexion status de la session Spark, par exemple Connecting, Connectedou Not Connected.

Capture d’écran montrant la barre de status en bas du bloc-notes.

Définir les délais d’expiration de session

Vous pouvez définir les avertissements de délai d’expiration et de délai d’expiration de session pour les notebooks interactifs. Pour modifier le délai d’expiration, sélectionnez le status de connexion dans la barre de status en bas du bloc-notes. Choisissez l'une des options suivantes :

  • Définir le délai d’expiration de session : définit la durée en minutes avant l’expiration de la session. La valeur par défaut est 30 minutes.

  • Réinitialiser le délai d’expiration de session : réinitialise le délai d’expiration de session à la valeur par défaut de 30 minutes.

  • Définir la période d’avertissement du délai d’expiration de session : définit le délai en minutes avant l’expiration du délai d’affichage d’un avertissement indiquant que la session est sur le point d’expirer. La valeur par défaut est de 5 minutes.

  • Période d’avertissement de réinitialisation du délai d’expiration de session : rétablit la valeur par défaut de 5 minutes pour l’avertissement de délai d’expiration de session.

    Capture d’écran montrant le paramètre de délai d’expiration de session.

Utiliser GitHub Copilot dans les notebooks

Utilisez GitHub Copilot pour vous aider à écrire du code dans des notebooks. GitHub Copilot fournit des suggestions de code et une autocomplétion en fonction du contexte de votre code. Pour utiliser GitHub Copilot, vérifiez que l’extension GitHub Copilot est installée dans Visual Studio Code.

Copiez le code à partir des exemples de notebooks pour Microsoft Sentinel lac de données et enregistrez-le dans votre dossier notebooks pour fournir un contexte pour GitHub Copilot. GitHub Copilot pourrez ensuite suggérer des saisies semi-automatiques de code en fonction du contexte de votre bloc-notes.

L’exemple suivant montre GitHub Copilot générer une révision de code.

Capture d’écran montrant GitHub Copilot générant une révision de code.

Microsoft Sentinel Provider, classe

Pour vous connecter au lac de données Microsoft Sentinel, utilisez la SentinelLakeProvider classe . Cette classe fait partie du access_module.data_loader module et fournit des méthodes pour interagir avec le lac de données. Pour utiliser cette classe, importez-la et créez un instance de la classe à l’aide d’une spark session.

from sentinel_lake.providers import MicrosoftSentinelProvider
data_provider = MicrosoftSentinelProvider(spark)

Pour plus d’informations sur les méthodes disponibles, consultez Microsoft Sentinel informations de référence sur la classe Provider.

Sélectionner le pool d’exécution approprié

Trois pools d’exécution sont disponibles pour exécuter vos notebooks Jupyter dans l’extension Microsoft Sentinel. Chaque pool est conçu pour des charges de travail et des exigences de performances différentes. Le choix du pool d’exécution affecte les performances, le coût et le temps d’exécution de vos travaux Spark.

Pool d’exécutions Cas d’usage recommandés Caractéristiques
Small Développement, test et analyse exploratoire légère.
Petites charges de travail avec des transformations simples.
Rentabilité prioritaire.
Adapté aux petites charges de travail
Transformations simples.
Coût inférieur, temps d’exécution plus long.
Medium Travaux ETL avec jointures, agrégations et entraînement de modèle ML.
Modérer les charges de travail avec des transformations complexes.
Amélioration des performances par rapport à Small.
Gère le parallélisme et modère les opérations nécessitant beaucoup de mémoire.
Large Charges de travail d’apprentissage profond et de ML.
Shuffling de données étendu, jointures volumineuses ou traitement en temps réel.
Temps d’exécution critique.
Mémoire et puissance de calcul élevées.
Des délais minimes.
Idéal pour les charges de travail volumineuses, complexes ou sensibles au temps.

Remarque

Lors de la première consultation, le chargement des options de noyau peut prendre environ 30 secondes.
Après avoir sélectionné un pool d’exécution, le démarrage de la session peut prendre 3 à 5 minutes.

Afficher les messages, les journaux et les erreurs

Les journaux des messages et les messages d’erreur sont affichés dans trois zones dans Visual Studio Code.

  1. Volet Sortie .

    1. Dans le volet Sortie, sélectionnez Microsoft Sentinel dans la liste déroulante.
    2. Sélectionnez Déboguer pour inclure des entrées de journal détaillées.

    Capture d’écran montrant le volet de sortie.

  2. Les messages en ligne dans le notebook fournissent des commentaires et des informations sur l’exécution des cellules de code. Ces messages incluent l’exécution status mises à jour, les indicateurs de progression et les notifications d’erreur liées au code dans la cellule précédente

  3. Une fenêtre contextuelle de notification dans le coin inférieur droit de Visual Studio Code, également connu sous le nom de message toast, fournit des alertes en temps réel et des mises à jour sur la status des opérations dans le notebook et la session Spark. Ces notifications incluent des messages, des avertissements et des alertes d’erreur, comme une connexion réussie à une session Spark et des avertissements de délai d’expiration.

    Capture d’écran montrant un message toast et un message d’erreur en ligne.

Travaux et planification

Vous pouvez planifier l’exécution des travaux à des heures ou des intervalles spécifiques à l’aide de l’extension Microsoft Sentinel pour Visual Studio Code. Les travaux vous permettent d’automatiser les tâches de traitement des données pour synthétiser, transformer ou analyser des données dans le lac de données Microsoft Sentinel. Les travaux sont également utilisés pour traiter des données et écrire des résultats dans des tables personnalisées dans le niveau data lake ou le niveau analytique. Pour plus d’informations sur la création et la gestion des travaux, consultez Créer et gérer des travaux de notebook Jupyter.

Paramètres et limites de service pour les notebooks VS Code

La section suivante répertorie les paramètres de service et les limites pour Microsoft Sentinel lac de données lors de l’utilisation de notebooks VS Code.

Catégorie Paramètre/limite
Table personnalisée dans le niveau Analytique Les tables personnalisées du niveau Analytique ne peuvent pas être supprimées d’un notebook ; Utilisez Log Analytics pour supprimer ces tables. Pour plus d’informations, consultez Ajouter ou supprimer des tables et des colonnes dans les journaux Azure Monitor
Délai d’expiration du socket web de la passerelle 2 heures
Délai d’expiration des requêtes interactives 2 heures
Délai d’inactivité de session interactive 20 minutes
Langue Python
Délai d’expiration du travail de notebook 8 heures
Nombre maximal de travaux de notebook simultanés 3, les travaux suivants sont mis en file d’attente
Nombre maximal d’utilisateurs simultanés sur l’interrogation interactive 8-10 sur grande piscine
Heure de démarrage de la session Le démarrage de la session de calcul Spark prend environ 5 à 6 minutes. Vous pouvez afficher les status de la session en bas de votre bloc-notes VS Code.
Bibliothèques prises en charge Seules les bibliothèques Azure Synapse 3.4 et la bibliothèque Microsoft Sentinel Provider pour les fonctions abstraites sont prises en charge pour l’interrogation du lac de données. Les installations Pip ou les bibliothèques personnalisées ne sont pas prises en charge.
Limite de l’expérience utilisateur VS Code pour afficher les enregistrements 100 000 lignes

Résolution des problèmes

Le tableau suivant répertorie les erreurs courantes que vous pouvez rencontrer lors de l’utilisation de notebooks, leurs causes racines et les actions suggérées pour les résoudre.

Catégorie d’erreur Nom de l’erreur Code d’erreur Message d’erreur Action suggérée
DatabaseError DatabaseNotFound 2001 Base de données {DatabaseName} introuvable. Vérifiez que la base de données existe. Si la base de données est nouvelle, attendez une actualisation des métadonnées.
DatabaseError AmbiguDatabaseName 2002 Plusieurs bases de données (ID : {DatabaseID1}, {DatabaseID2}, ...) partagent le nom {DatabaseName}. Fournissez un ID de base de données spécifique. Spécifiez un ID de base de données lorsque plusieurs bases de données portent le même nom.
DatabaseError DatabaseIdMismatch 2003 Base de données ({DatabaseName}, ID {DatabaseID}) introuvable. Vérifiez le nom et l’ID de la base de données. Pour obtenir les ID de base de données, répertoriez toutes les bases de données.
DatabaseError ListDatabasesFailure 2004 Impossible d’extraire les bases de données. Redémarrez la session et réessayez. Redémarrez la session et recommencez l’opération après quelques minutes.
TableError TableDoesNotExist 2100 Table {TableName} introuvable dans la base de données {DatabaseName}. Vérifiez que la table existe dans la base de données. Si la table ou la base de données est nouvelle, attendez quelques minutes, puis réessayez.
TableError ProvisioningIncomplete 2101 La table {TableName} n’est pas prête. Attendez quelques minutes avant de réessayer. La table est en cours d’approvisionnement. Attendez quelques minutes avant de réessayer.
TableError DeltaTableMissing 2102 La table {TableName} est vide. La préparation des nouvelles tables peut prendre jusqu’à quelques heures. La synchronisation complète d’une table d’analyse dans le lac de données peut prendre quelques heures. Pour les tables qui se trouvent uniquement dans le lac de données, case activée si les données doivent être chargées ou restaurées.
TableError TableDoesNotExistForDelete 2103 Impossible de supprimer la table. Table {TableName} introuvable. Vérifiez que la table existe dans la base de données. Si la table ou la base de données est nouvelle, attendez quelques minutes, puis réessayez.
AuthorizationFailure MissingSASToken 2201 Impossible d’accéder à la table. Redémarrez la session et réessayez. Échec de l’autorisation lors de la tentative d’extraction du jeton d’accès pour la table. Redémarrez la session et réessayez.
AuthorizationFailure InvalidSASToken 2202 Impossible d’accéder à la table. Redémarrez la session et réessayez. Échec de l’autorisation lors de la tentative d’extraction du jeton d’accès pour la table. Redémarrez la session et réessayez.
AuthorizationFailure TokenExpired 2203 Impossible d’accéder à la table. Redémarrez la session et réessayez. Échec de l’autorisation lors de la tentative d’extraction du jeton d’accès pour la table. Redémarrez la session et réessayez.
AuthorizationFailure TableInsufficientPermissions 2204 Accès nécessaire pour la table {TableName} dans la base de données {DatabaseName}. Contactez un administrateur pour demander l’accès à la table ou à la base de données (espace de travail).
AuthorizationFailure InternalTableAccessDenied 2205 L’accès à la table {TableName} est restreint. Seules les tables système ou définies par l’utilisateur sont accessibles à partir d’un notebook.
AuthorizationFailure TableAuthFailure 2206 Impossible d’enregistrer les données dans la table. Redémarrez la session et réessayez. Échec de l’autorisation lors de la tentative d’enregistrement des données dans la table. Redémarrez la session et réessayez.
ConfigurationError HadoopConfigFailure 2301 Impossible de mettre à jour la configuration de session. Redémarrez la session et réessayez. Ce problème est temporaire et peut être résolu en redémarrant la session et en réessayant. Si ce problème persiste, contactez le support technique.
DataError JsonParsingFailure 2302 Les métadonnées de table ont été endommagées. Contactez le support technique pour obtenir de l’aide. Contactez le support technique pour obtenir de l’aide. Indiquez votre ID de locataire, le nom de la table et le nom de la base de données.
TableSchemaError TableSchemaMismatch 2401 Colonne introuvable dans la table de destination. Alignez le schéma DataFrame et la table de destination ou utilisez le mode de remplacement. Mettez à jour le schéma DataFrame pour qu’il corresponde à la table de votre base de données cible. Vous pouvez également remplacer entièrement la table en mode de remplacement.
TableSchemaError MissingRequiredColumns 2402 La colonne {ColumnName} est manquante dans le DataFrame. Vérifiez le schéma DataFrame et alignez-le sur la table de destination. Mettez à jour le schéma DataFrame pour qu’il corresponde à la table de votre base de données cible. Vous pouvez également remplacer entièrement la table en mode de remplacement.
TableSchemaError ColumnTypeChangeNotAllowed 2403 Impossible de modifier le type de données de la colonne {ColumnName}. Une modification de type de données n’est pas autorisée pour la colonne. Vérifiez les colonnes existantes dans la table de destination et alignez tous les types de données dans le DataFrame.
TableSchemaError ColumnNullabilityChangeNotAllowed 2404 Impossible de modifier la possibilité de null de la colonne {ColumnName}. Impossible de mettre à jour les paramètres de possibilité de valeur Null de la colonne. Vérifiez la table de destination et alignez les paramètres sur le DataFrame.
IngestionError FolderCreationFailure 2501 Impossible de créer un stockage pour la table {TableName}. Ce problème est temporaire et peut être résolu en redémarrant la session et en réessayant. Si ce problème persiste, contactez le support technique.
IngestionError SubJobRequestFailure 2502 Impossible de créer un travail d’ingestion pour la table {TableName}. Ce problème est temporaire et peut être résolu en redémarrant la session et en réessayant. Si ce problème persiste, contactez le support technique.
IngestionError SubJobCreationFailure 2503 Impossible de créer un travail d’ingestion pour la table {TableName}. Ce problème est temporaire et peut être résolu en redémarrant la session et en réessayant. Si ce problème persiste, contactez le support technique.
InputError InvalidWriteMode 2601 Mode d’écriture non valide. Utilisez l’ajout ou le remplacement. Spécifiez un mode d’écriture valide (ajout ou remplacement) avant d’enregistrer le DataFrame.
InputError PartitioningNotAllowed 2602 Impossible de partitionner les tables d’analyse. Supprimez tout partitionnement pour toutes les colonnes des tables analytiques.
InputError MissingTableSuffixLake 2603 Nom de la table personnalisée non valide. Tous les noms des tables personnalisées dans le lac de données doivent se terminer par _SPRK. Ajoutez _SPRK en tant que suffixe au nom de la table avant de l’écrire dans le lac de données.
InputError MissingTableSuffixLA 2604 Nom de la table personnalisée non valide. Tous les noms de tables d’analyse personnalisées doivent se terminer par _SPRK_CL. Ajoutez _SPRK_CL en tant que suffixe au nom de la table avant de l’écrire dans le stockage analytique.
UnknownError InternalServerError 2901 Un problème s’est produit. Redémarrez la session et réessayez. Ce problème est temporaire et peut être résolu en redémarrant la session et en réessayant. Si ce problème persiste, contactez le support technique.

Remarque

L’interrogation de tables héritées telles qu’AzureDiagnostics n’est pas prise en charge.