Partager via


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

Les notebooks Jupyter fournissent un environnement interactif permettant d’explorer, d’analyser et de visualiser des données dans le lac de données Microsoft Sentinel. Avec les blocs-notes, vous pouvez écrire et exécuter du code, documenter votre flux de travail et afficher les résultats, tous en un seul endroit. Cela permet d’effectuer facilement l’exploration des données, de créer des solutions d’analytique avancées et de partager des insights 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 intelligence exploitable.

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

Conditions préalables

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é le lac de données Sentinel, consultez Intégration au lac de données Microsoft Sentinel. Si vous avez récemment intégré le lac de données, vous devrez peut-être attendre un certain temps qu’un volume suffisant de données soit ingéré avant de pouvoir créer des analyses significatives à l’aide de notebooks.

Autorisations

Les rôles d’ID Microsoft Entra 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 rôles RBAC Azure. Les utilisateurs disposant d’autorisations RBAC Azure sur les espaces de travail Microsoft Sentinel 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.

Pour créer de nouvelles tables personnalisées dans le niveau Analytique, l’identité managée data lake doit être affectée au rôle Contributeur Log Analytics dans l’espace de travail Log Analytics.

Pour attribuer le rôle, procédez comme suit :

  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 menu de navigation de gauche.
  3. Sélectionnez Ajouter une attribution de rôle.
  4. Dans la table Rôle , sélectionnez Contributeur Log Analytics, puis Sélectionnez Suivant
  5. Sélectionnez Identité managée, puis sélectionnez Sélectionner des membres.
  6. Votre identité gérée du data lake est une identité gérée attribué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 Affecter des rôles Azure à l’aide du 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 le Marketplace des extensions dans la barre latérale 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 du bouclier Microsoft Sentinel apparaît dans la barre d’outils de gauche.

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

Installez l’extension GitHub Copilot pour Visual Studio Code afin d’activer la complétion et les suggestions de code dans les notebooks.

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

Explorer les tables de strates du Data Lake

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

Se connecter à l’extension Microsoft Sentinel

  1. Sélectionnez l’icône de bouclier Microsoft Sentinel 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.

Afficher les tables et les jobs du data lake

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 la base de données et la catégorie. Sélectionnez un tableau pour afficher les définitions de colonnes.

Pour plus d’informations sur les travaux, consultez Travaux et planification.

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

Créer un nouveau cahier

  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 bloc-notes Jupyter. 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 sous forme de menu fichier.

  4. Dans le nouveau bloc-notes, 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 classe MicrosoftSentinelProvider 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 bloc-notes. 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 bloc-notes.

  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 de pool d’exécutions.

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 bloc-notes.

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

Barre d’état

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

  • Pourcentage d’utilisation de vCore 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 entre les charges de travail interactives et de travail pour le compte connecté.

  • État de connexion de la session Spark, par exemple Connecting, Connectedou Not Connected.

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

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

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

  • Définir la période d’expiration de session : définit l’heure en minutes avant l’expiration de la session. La valeur par défaut est de 30 minutes.

  • Réinitialiser le délai d'expiration de session : rétablit 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 l’heure en minutes avant le délai d’expiration d’un avertissement indiquant que la session est sur le point d’expirer. La valeur par défaut est de 5 minutes.

  • Réinitialiser la période d’avertissement du délai d’expiration de session : réinitialise l’avertissement de délai d’expiration de session à la valeur par défaut de 5 minutes.

    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 du code à partir des exemples de notebooks pour le lac de données Microsoft Sentinel et enregistrez-le dans votre dossier de notebooks pour fournir un contexte pour GitHub Copilot. GitHub Copilot pourra ensuite suggérer des complétions de code en fonction du contexte de votre notebook.

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

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

Classe Fournisseur Microsoft Sentinel

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 permettant d’interagir avec le lac de données. Pour utiliser cette classe, importez-la et créez une 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 la référence de la classe fournisseur Microsoft Sentinel.

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 différentes charges de travail et exigences de performances. 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
Petite Développement, test et analyse exploratoire légère.
Petites charges de travail avec des transformations simples.
L’efficacité des coûts a été hiérarchisée.
Adapté aux petites charges de travail
Transformations simples.
Coût inférieur, durée d’exécution plus longue.
Moyenne Travaux ETL avec jointures, agrégations et entraînement de modèle d'apprentissage automatique (ML).
Modérer les charges de travail avec des transformations complexes.
Amélioration des performances par rapport à Small.
Gère le parallélisme et les opérations modérées nécessitant beaucoup de mémoire.
Grande Charges de travail liées à l'apprentissage profond et à l'apprentissage automatique.
Remaniement extensif des données, jointures volumineuses ou traitement en temps réel.
Temps d’exécution critique.
Puissance de mémoire et de calcul élevée.
Retards minimes.
Idéal pour les charges de travail volumineuses, complexes ou sensibles au temps.

Remarque

Lorsque vous avez accédé pour la première fois, les options de noyau peuvent prendre environ 30 secondes pour se charger.
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 logs et les erreurs

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

  1. Volet Résultat.

    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 les mises à jour de l’état d’exécution, les indicateurs de progression et les notifications d’erreur liés 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 et des mises à jour en temps réel sur l’état des opérations dans le bloc-notes et la session Spark. Ces notifications incluent les messages, les avertissements et les alertes d’erreur, comme la connexion réussie à une session Spark et les avertissements de délai d’expiration.

    Capture d’écran montrant un message toast et un message d’erreur intégré.

Travaux et planification

Vous pouvez planifier l’exécution de travaux à des moments ou 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 les données et écrire des résultats dans des tables personnalisées au niveau Data Lake ou au 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 du lac de données Microsoft Sentinel lors de l’utilisation des notebooks VS Code.

Catégorie Paramètre/limite
Table personnalisée au 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 logs d'Azure Monitor
Délai d’expiration du socket web de passerelle 2 heures
Délai d’expiration des requêtes interactives 2 heures
Délai d’inactivité de la session interactive 20 minutes
Langue Python
Délai d’expiration du travail du bloc-notes 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 un grand pool
Heure de démarrage de session La session de calcul Spark prend environ 5 à 6 minutes. Vous pouvez afficher l’état 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 fournisseur Microsoft Sentinel pour les fonctions abstraites sont prises en charge pour interroger le lac de données. Les installations Pip ou les bibliothèques personnalisées ne sont pas prises en charge.
Limites de l'UX de 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 profondes 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 BaseDeDonnéesIntrouvable 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 ont le même nom.
DatabaseError Incompatibilité d'ID de base de données 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 identifiants de la base de données, énumérez toutes les bases de données.
DatabaseError ListDatabasesFailure 2004 Impossible d’extraire des bases de données. Redémarrez la session et réessayez. Redémarrez la session et réessayez 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, patientez quelques minutes et réessayez.
TableError ProvisioningIncomplete 2101 La table {TableName} n’est pas prête. Patientez quelques minutes avant de réessayer. La table est en cours d’approvisionnement. Patientez quelques minutes avant de réessayer.
TableError DeltaTableMissing 2102 La table {TableName} est vide. Les nouvelles tables peuvent prendre jusqu’à quelques heures pour être prêtes. 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, vérifiez 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, patientez quelques minutes et réessayez.
AuthorizationFailure MissingSASToken (Jeton SAS manquant) 2201 Impossible d’accéder à la table. Redémarrez la session et réessayez. L’autorisation a échoué lors de la tentative de récupération 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. L’autorisation a échoué lors de la tentative de récupération 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. L’autorisation a échoué lors de la tentative de récupération 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 des données dans la table. Redémarrez la session et réessayez. L’autorisation a échoué lors de la tentative d’enregistrement des données dans la table. Redémarrez la session et réessayez.
Erreur de Configuration 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 pour obtenir de l’aide. Contactez le support 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 avec 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 ChangementDuTypeDeColonneNonAutorisé 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 nullabilité de la colonne {ColumnName}. Impossible de mettre à jour les paramètres de nullité de la colonne. Vérifiez la table de destination et alignez les paramètres avec le DataFrame.
Erreur d'ingestion ÉchecDeCréationDeDossier 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.
Erreur d'ingestion Échec de la demande de sous-tâche 2502 Impossible de créer un processus 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.
Erreur d'ingestion ErreurDeCréationDeSousTâche 2503 Impossible de créer un processus 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 Ajouter ou Remplacer. Spécifiez un mode d’écriture valide (ajout ou remplacement) avant d’enregistrer le DataFrame.
InputError PartitionnementInterdit 2602 Impossible de partitionner des tables d’analyse. Supprimez tout partitionnement pour toutes les colonnes des tables d’analyse.
InputError MissingTableSuffixLake 2603 Nom de table personnalisé non valide. Tous les noms de 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 table personnalisé non valide. Tous les noms de tables d’analytique 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.
Erreur inconnue Erreur Interne du Serveur 2901 Nous avons rencontré un problème. 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.