Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
- Dans le Portail Azure, accédez à l’espace de travail Log Analytics auquel vous souhaitez attribuer le rôle.
- Sélectionnez Contrôle d’accès (IAM) dans le volet de navigation gauche.
- Sélectionnez Ajouter une attribution de rôle.
- Dans la table Rôle , sélectionnez Contributeur Log Analytics, puis Suivant
- Sélectionnez Identité managée, puis sélectionnez Sélectionner des membres.
- 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. - 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 :
- Sélectionnez la Place de marché extensions dans la barre d’outils de gauche.
- Recherchez Sentinel.
- Sélectionnez l’extension Microsoft Sentinel, puis sélectionnez Installer.
- Une fois l’extension installée, l’icône Microsoft Sentinel bouclier s’affiche dans la barre d’outils de gauche.
Installez l’extension GitHub Copilot pour Visual Studio Code afin d’activer la saisie semi-automatique du code et les suggestions dans les notebooks.
- Recherchez GitHub Copilot dans la Place de marché des extensions et installez-la.
- 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
Sélectionnez l’icône Microsoft Sentinel bouclier dans la barre d’outils de gauche.
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.
Sélectionnez le nom de votre compte pour terminer la connexion.
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.
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.
Créer un bloc-notes
Pour créer un bloc-notes, utilisez l’une des méthodes suivantes.
Entrez > dans la zone de recherche ou appuyez sur Ctrl+Maj+P, puis entrez Créer un nouveau Jupyter Notebook.
Sélectionnez Fichier > Nouveau fichier, puis sélectionnez Jupyter Notebook dans la liste déroulante.
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.
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.
Sélectionnez Microsoft Sentinel dans la liste pour obtenir la liste des pools d’exécution.
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é.
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 :
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,ConnectedouNot Connected.
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.
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.
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.
Volet Sortie .
- Dans le volet Sortie, sélectionnez Microsoft Sentinel dans la liste déroulante.
- Sélectionnez Déboguer pour inclure des entrées de journal détaillées.
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
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.
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.