次の方法で共有


Microsoft Sentinel データ レイクでノートブックを実行する

Jupyter Notebook は、Microsoft Sentinel データ レイク内のデータを探索、分析、視覚化するための対話型環境を提供します。 ノートブックを使用すると、コードの記述と実行、ワークフローの文書化、結果の表示をすべて 1 か所で行うことができます。 これにより、データ探索の実行、高度な分析ソリューションの構築、他のユーザーとの分析情報の共有が簡単になります。 Visual Studio Code 内で Python と Apache Spark を活用することで、ノートブックは生のセキュリティ データを実用的なインテリジェンスに変換するのに役立ちます。

この記事では、Visual Studio Code で Jupyter Notebook を使用して Data Lake データを探索および操作する方法について説明します。

[前提条件]

Microsoft Sentinel データ レイクに参加する

Microsoft Sentinel データ レイクでノートブックを使用するには、まず Data Lake にオンボードする必要があります。 Sentinel データ レイクにオンボードしていない場合は、「 Microsoft Sentinel Data Lake へのオンボード」を参照してください。 Data Lake に最近オンボードした場合、ノートブックを使用して意味のある分析を作成するには、十分な量のデータが取り込まれるまで時間がかかる場合があります。

権限

Microsoft Entra ID ロールは、データ レイク内のすべてのワークスペースに広範なアクセスを提供します。 または、Azure RBAC ロールを使用して、個々のワークスペースへのアクセス権を付与することもできます。 Microsoft Sentinel ワークスペースに対する Azure RBAC アクセス許可を持つユーザーは、Data Lake レベルのワークスペースに対してノートブックを実行できます。 詳細については、「 Microsoft Sentinel のロールとアクセス許可」を参照してください。

分析レベルで新しいカスタム テーブルを作成するには、Data Lake マネージド ID に Log Analytics ワークスペースの Log Analytics 共同作成者 ロールを割り当てる必要があります。

ロールを割り当てるには、次の手順に従います。

  1. Azure portal で、ロールを割り当てる Log Analytics ワークスペースに移動します。
  2. 左側のナビゲーション ペインで [アクセス制御 (IAM)] を選択します。
  3. [ロールの割り当ての追加] を選択します。
  4. [ロール] テーブルで、[Log Analytics 共同作成者] を選択し、[次へ] を選択します。
  5. [ マネージド ID] を選択し、[ メンバーの選択] を選択します。
  6. あなたのデータレイクのマネージド ID は、msg-resources-<guid>という名前のシステム割り当てマネージド ID です。 マネージド ID を選択し、[選択] をクリックします。
  7. 「Review and assign」を選択します。

マネージド ID へのロールの割り当ての詳細については、 Azure portal を使用した Azure ロールの割り当てに関するページを参照してください。

Visual Studio Code と Microsoft Sentinel 拡張機能をインストールする

Visual Studio Code をまだお持ちでない場合は、Visual Studio Code for MacLinux、または Windows をダウンロードしてインストール します

Visual Studio Code (VS Code) 用の Microsoft Sentinel 拡張機能は、拡張機能マーケットプレースからインストールされます。 拡張機能をインストールするには、次の手順に従います。

  1. 左側のツール バーで Extensions Marketplace を選択します。
  2. Sentinel を検索します。
  3. Microsoft Sentinel 拡張機能を選択し、[インストール] を選択します。
  4. 拡張機能がインストールされると、Microsoft Sentinel のシールド アイコンが左側のツール バーに表示されます。

拡張機能の市場の場所を示すスクリーンショット。

Visual Studio Code 用の GitHub Copilot 拡張機能をインストールして、ノートブックでのコード補完と提案を有効にします。

  1. Extensions Marketplace で GitHub Copilot を検索してインストールします。
  2. インストール後、GitHub アカウントを使用して GitHub Copilot にサインインします。

データ レイク レベル テーブルを探す

Microsoft Sentinel 拡張機能をインストールしたら、データ レイク層テーブルの探索と、データを分析するための Jupyter ノートブックの作成を開始できます。

Microsoft Sentinel 拡張機能にサインインする

  1. 左側のツール バーの Microsoft Sentinel シールド アイコンを選択します。

  2. 次のテキストを含むダイアログが表示されます 。拡張機能 "Microsoft Sentinel" は Microsoft を使用してサインインしたいと考えています。 [許可] を選択します。

    サインイン ダイアログを示すスクリーンショット。

  3. アカウント名を選択してサインインを完了します。

    ページの上部にあるアカウント選択リストを示すスクリーンショット。

データ レイク テーブルとジョブを表示する

サインインすると、Sentinel 拡張機能の左側のウィンドウに Lake テーブルジョブ の一覧が表示されます。 テーブルは、データベースとカテゴリ別にグループ化されます。 テーブルを選択すると、列の定義が表示されます。

ジョブの詳細については、「 ジョブとスケジュール」を参照してください。

テーブル、ジョブ、選択したテーブルのメタデータの一覧を示すスクリーンショット。

新しいノートブックを作成する

  1. 新しいノートブックを作成するには、次のいずれかの方法を使用します。

  2. 検索ボックスに「 > 」と入力するか、 Ctrl + Shift + P キーを押して、「 Create New Jupyter Notebook」と入力します。 検索バーから新しいノートブックを作成する方法を示すスクリーンショット。

  3. [ファイル] > [新しいファイル] を選択し、ドロップダウンから [Jupyter Notebook ] を選択します。
    ファイル メニューから新しいノートブックを作成する方法を示すスクリーンショット。

  4. 新しいノートブックで、次のコードを最初のセルに貼り付けます。

    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)  
    

エディターは、 MicrosoftSentinelProvider クラスとデータ レイク内のテーブル名の両方に対して IntelliSense コード補完を提供します。

  1. 実行 三角形を選択して、ノートブックでコードを実行します。 結果は、コード セルの下の出力ウィンドウに表示されます。
    ノートブック セルを実行する方法を示すスクリーンショット。

  2. ランタイム プールの一覧の一覧から Microsoft Sentinel を選択します。 ランタイム ピッカーを示すスクリーンショット。

  3. [中] を選択して、中規模のランタイム プールでノートブックを実行します。 さまざまなランタイムの詳細については、「 適切な Microsoft Sentinel ランタイムの選択」を参照してください。 実行プール サイズピッカーを示すスクリーンショット。

カーネルを選択すると、Spark セッションが開始され、ノートブックでコードが実行されます。 プールを選択した後、セッションが開始されるまでに 3 ~ 5 分かかる場合があります。 セッションが既にアクティブになっているので、後続の実行時間が短縮されます。

セッションが開始されると、ノートブック内のコードが実行され、結果がコード セルの下の出力ウィンドウに表示されます。たとえば、 ノートブック セルの実行結果を示すスクリーンショット。

Microsoft Sentinel データ レイクと対話する方法を示すサンプル ノートブックについては、 Microsoft Sentinel Data Lake のサンプル ノートブックを参照してください。

ステータス バー

ノートブックの下部にあるステータス バーには、ノートブックと Spark セッションの現在の状態に関する情報が表示されます。 ステータス バーには、次の情報が含まれます。

  • 選択した Spark プールの仮想コア使用率の割合。 割合をポイントすると、使用されている仮想コアの数と、プールで使用可能な仮想コアの合計数が表示されます。 パーセンテージは、ログインしたアカウントの対話型ワークロードとジョブ ワークロード全体の現在の使用状況を表します。

  • Spark セッションの接続状態 ( ConnectingConnectedNot Connectedなど)。

ノートブックの下部にあるステータス バーを示すスクリーンショット。

セッション タイムアウトを設定する

対話型ノートブックのセッション タイムアウトとタイムアウトの警告を設定できます。 タイムアウトを変更するには、ノートブックの下部にあるステータス バーで接続状態を選択します。 次のオプションから選択します。

  • セッション タイムアウト期間の設定: セッションがタイムアウトするまでの時間を分単位で設定します。既定値は 30 分です。

  • セッション タイムアウト期間のリセット: セッション タイムアウトを既定値の 30 分にリセットします。

  • セッション タイムアウト警告期間の設定: セッションがタイムアウトを間もなく終了しようとしていることを示す警告が表示されるタイムアウトまでの時間を分単位で設定します。既定値は 5 分です。

  • セッション タイムアウト警告期間のリセット: セッション タイムアウト警告を既定値の 5 分にリセットします。

    セッション タイムアウト設定を示すスクリーンショット。

ノートブックで GitHub Copilot を使用する

GitHub Copilot を使用すると、ノートブックでコードを記述できます。 GitHub Copilot では、コードのコンテキストに基づいてコードの提案とオートコンプリートが提供されます。 GitHub Copilot を使用するには、Visual Studio Code に GitHub Copilot 拡張機能 がインストールされていることを確認します。

Microsoft Sentinel データ レイクのサンプル ノートブックからコードをコピーし、ノートブック フォルダーに保存して GitHub Copilot のコンテキストを提供します。 GitHub Copilot は、ノートブックのコンテキストに基づいてコード補完を提案できるようになります。

次の例は、コード レビューを生成する GitHub Copilot を示しています。

コード レビューを生成する GitHub Copilot を示すスクリーンショット。

Microsoft Sentinel プロバイダー クラス

Microsoft Sentinel データ レイクに接続するには、 SentinelLakeProvider クラスを使用します。 このクラスは、 access_module.data_loader モジュールの一部であり、データ レイクと対話するメソッドを提供します。 このクラスを使用するには、それをインポートし、 spark セッションを使用してクラスのインスタンスを作成します。

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

使用可能なメソッドの詳細については、「 Microsoft Sentinel プロバイダー クラス リファレンス」を参照してください。

適切なランタイム プールを選択する

Microsoft Sentinel 拡張機能で Jupyter ノートブックを実行するには、3 つのランタイム プールを使用できます。 各プールは、さまざまなワークロードとパフォーマンス要件に合わせて設計されています。 ランタイム プールの選択は、Spark ジョブのパフォーマンス、コスト、実行時間に影響します。

ランタイム プール 推奨されるユース ケース 特性
小さい 開発、テスト、簡易の調査分析。
単純な変換を使用する小規模なワークロード。
コスト効率が優先されます。
小規模なワークロードに適しています
単純な変換。
コストを削減し、実行時間を長くします。
中程度 結合、集計、ML モデル トレーニングを含む ETL ジョブ。
複雑な変換でワークロードをモデレートします。
Small よりパフォーマンスが向上しました。
並列処理と中程度のメモリ集中型操作を処理します。
Large ディープ ラーニングと ML ワークロード。
広範なデータ シャッフル、大規模な結合、またはリアルタイム処理。
クリティカルな実行時間
高いメモリとコンピューティング能力。
最小遅延。
大規模、複雑、または時間に依存するワークロードに最適です。

最初にアクセスすると、カーネル オプションの読み込みに約 30 秒かかる場合があります。
ランタイム プールを選択した後、セッションが開始されるまでに 3 ~ 5 分かかる場合があります。

メッセージ、ログ、エラーを表示する

メッセージ ログとエラー メッセージは、Visual Studio Code の 3 つの領域に表示されます。

  1. [出力] ウィンドウ。

    1. [出力] ウィンドウで、ドロップダウンから Microsoft Sentinel を選択します。
    2. 詳細なログ エントリを含めるには、[ デバッグ] を選択します。

    出力ウィンドウを示すスクリーンショット。

  2. ノートブック内のインライン メッセージは、コード セルの実行に関するフィードバックと情報を提供します。 これらのメッセージには、前のセルのコードに関連する実行状態の更新、進行状況インジケーター、エラー通知が含まれます

  3. Visual Studio Code の右下隅に通知ポップアップが表示され、トースト メッセージとしても知られ、ノートブックと Spark セッション内の操作の状態に関するリアルタイムのアラートと更新が提供されます。 これらの通知には、メッセージ、警告、およびエラー アラート (Spark セッションへの正常な接続、タイムアウト警告など) が含まれます。

    トースト メッセージとインライン エラー メッセージを示すスクリーンショット。

ジョブとスケジュール

Visual Studio Code 用の Microsoft Sentinel 拡張機能を使用して、特定の時間または間隔でジョブを実行するようにスケジュールできます。 ジョブを使用すると、データ処理タスクを自動化して、Microsoft Sentinel データ レイク内のデータを集計、変換、または分析できます。 ジョブは、データを処理したり、データ レイク層または分析層のカスタム テーブルに結果を書き込んだりするためにも使用されます。 ジョブの作成と管理の詳細については、「 Jupyter Notebook ジョブの作成と管理」を参照してください。

VS Code Notebook のサービス パラメーターと制限

次のセクションでは、VS Code Notebooks を使用する場合の Microsoft Sentinel データ レイクのサービス パラメーターと制限の一覧を示します。

カテゴリ パラメーター/制限
分析層のカスタム テーブル 分析レベルのカスタム テーブルをノートブックから削除することはできません。Log Analytics を使用してこれらのテーブルを削除します。 詳細については、「Azure Monitor ログのテーブルと列の追加または削除」を参照してください。
ゲートウェイ Web ソケットのタイムアウト 2 時間
対話型クエリのタイムアウト 2 時間
対話型セッションの非活動タイムアウト 20 分
Language Python
ノートブック ジョブのタイムアウト 8 時間
同時実行ノートブック ジョブの最大数 3、以降のジョブは順次キューに登録されます
対話型クエリでの同時ユーザーの最大数 大規模プールでの8から10
セッションの起動時間 Spark コンピューティング セッションの開始には約 5 ~ 6 分かかります。 VS Code Notebook の下部にあるセッションの状態を表示できます。
サポートされているライブラリ データ レイクのクエリでは、抽象化された関数用の Azure Synapse ライブラリ 3.4 と Microsoft Sentinel プロバイダー ライブラリのみがサポートされています。 Pip のインストールまたはカスタム ライブラリはサポートされていません。
レコードを表示するための VS Code UX の制限 100,000 行

トラブルシューティング

次の表に、ノートブックを操作するときに発生する可能性がある一般的なエラー、その根本原因、およびそれらを解決するための推奨されるアクションを示します。

エラー カテゴリ エラー名 エラー コード エラーメッセージ 推奨アクション
DatabaseError データベースが見つかりません 2001 データベース {DatabaseName} が見つかりません。 データベースが存在することを確認します。 データベースが新しい場合は、メタデータの更新を待ちます。
DatabaseError AmbiguousDatabaseName 2002 複数のデータベース (ID: {DatabaseID1}、{DatabaseID2}、...) は、{DatabaseName} という名前を共有します。 特定のデータベース ID を指定します。 複数のデータベースが同じ名前の場合は、データベース ID を指定します。
DatabaseError データベースID不一致 2003 データベース ({DatabaseName}、ID {DatabaseID}) が見つかりません。 データベース名と ID の両方を確認します。 データベース ID を取得するには、すべてのデータベースを一覧表示します。
DatabaseError リストデータベース失敗 2004 データベースを取得できません。 セッションを再起動して、もう一度やり直してください。 セッションを再起動し、数分後に操作を再試行します。
テーブルエラー テーブルが存在しません 2100 テーブル {TableName} がデータベース {DatabaseName} に見つかりません。 テーブルがデータベースに存在することを確認します。 テーブルまたはデータベースが新しい場合は、数分待ってからやり直してください。
テーブルエラー プロビジョニング未完了 2101 テーブル {TableName} の準備ができていません。 しばらく待ってから再試行してください。 テーブルがプロビジョニングされています。 しばらく待ってから再試行してください。
テーブルエラー デルタテーブルが見つかりません 2102 テーブル {TableName} が空です。 新しいテーブルの準備には、最大で数時間かかることがあります。 分析テーブルをデータ レイクに完全に同期するには、数時間かかる場合があります。 データ レイク内にのみ存在するテーブルの場合は、データを読み込むか復元する必要があるかどうかを確認します。
テーブルエラー 削除対象テーブルが存在しません 2103 テーブルを削除できません。 テーブル {TableName} が見つかりません。 テーブルがデータベースに存在することを確認します。 テーブルまたはデータベースが新しい場合は、数分待ってからやり直してください。
AuthorizationFailure SASトークンが見つかりません 2201 テーブルにアクセスできません。 セッションを再起動して、もう一度やり直してください。 テーブルのアクセス トークンのフェッチ中に承認に失敗しました。 セッションを再起動して、もう一度やり直してください。
AuthorizationFailure InvalidSASToken 2202 テーブルにアクセスできません。 セッションを再起動して、もう一度やり直してください。 テーブルのアクセス トークンのフェッチ中に承認に失敗しました。 セッションを再起動して、もう一度やり直してください。
AuthorizationFailure トークンの有効期限が切れました 2203 テーブルにアクセスできません。 セッションを再起動して、もう一度やり直してください。 テーブルのアクセス トークンのフェッチ中に承認に失敗しました。 セッションを再起動して、もう一度やり直してください。
AuthorizationFailure テーブル権限不足 2204 データベース {DatabaseName} のテーブル {TableName} に必要なアクセス。 テーブルまたはデータベース (ワークスペース) へのアクセスを要求するには、管理者に問い合わせてください。
AuthorizationFailure 内部テーブルアクセス拒否 2205 テーブル {TableName} へのアクセスは制限されています。 ノートブックからアクセスできるのは、システムテーブルまたはユーザー定義テーブルだけです。
AuthorizationFailure テーブル認証失敗 2206 テーブルにデータを保存できません。 セッションを再起動して、もう一度やり直してください。 テーブルへのデータの保存中に承認に失敗しました。 セッションを再起動して、もう一度やり直してください。
構成エラー Hadoop設定失敗 (HadoopConfigFailure) 2301 セッション構成を更新できません。 セッションを再起動して、もう一度やり直してください。 この問題は一時的なものであり、セッションを再起動してもう一度試すことで解決できます。 この問題が解決しない場合は、サポートにお問い合わせください。
DataError JSONパースエラー 2302 テーブル メタデータが破損しています。 サポートに問い合わせてください。 サポートに問い合わせてください。 テナント ID、テーブル名、およびデータベース名を指定します。
テーブルスキーマエラー テーブルスキーマの不一致 2401 コピー先テーブルに列が見つかりません。 DataFrame スキーマとコピー先テーブルを配置するか、上書きモードを使用します。 ターゲット データベース内のテーブルと一致するように DataFrame スキーマを更新します。 テーブル全体を上書きモードで置き換えることもできます。
テーブルスキーマエラー 必須列が見つかりません 2402 列 {ColumnName} が DataFrame に存在しません。 DataFrame スキーマを確認し、コピー先テーブルに合わせます。 ターゲット データベース内のテーブルと一致するように DataFrame スキーマを更新します。 テーブル全体を上書きモードで置き換えることもできます。
テーブルスキーマエラー 列タイプ変更は許可されていません 2403 列 {ColumnName} のデータ型を変更できません。 列のデータ型の変更は許可されていません。 コピー先テーブルの既存の列を確認し、DataFrame 内のすべてのデータ型を配置します。
テーブルスキーマエラー カラムのNULL許可の変更は許可されていません 2404 列 {ColumnName} の null 値の許容を変更できません。 列の null 許容設定を更新できません。 変換先テーブルを確認し、設定を DataFrame に合わせます。
取り込みエラー フォルダ作成失敗 2501 テーブル {TableName} のストレージを作成できません。 この問題は一時的なものであり、セッションを再起動してもう一度試すことで解決できます。 この問題が解決しない場合は、サポートにお問い合わせください。
取り込みエラー サブジョブリクエスト失敗 2502 テーブル {TableName} のインジェスト ジョブを作成できません。 この問題は一時的なものであり、セッションを再起動してもう一度試すことで解決できます。 この問題が解決しない場合は、サポートにお問い合わせください。
取り込みエラー サブジョブ作成失敗 2503 テーブル {TableName} のインジェスト ジョブを作成できません。 この問題は一時的なものであり、セッションを再起動してもう一度試すことで解決できます。 この問題が解決しない場合は、サポートにお問い合わせください。
InputError 無効な書き込みモード 2601 書き込みモードが無効です。 追加または上書きを使用します。 DataFrame を保存する前に、有効な書き込みモード (追加または上書き) を指定します。
InputError パーティショニングが許可されていません 2602 分析テーブルをパーティション分割できません。 分析テーブル内のすべての列のパーティション分割を削除します。
InputError MissingTableSuffixLake 2603 カスタム テーブル名が無効です。 データ レイク内のすべてのカスタム テーブルの名前は、_SPRKで終わる必要があります。 データ レイクに書き込む前に、テーブル名にサフィックスとして_SPRKを追加します。
InputError MissingTableSuffixLA 2604 カスタム テーブル名が無効です。 カスタム分析テーブルのすべての名前は、_SPRK_CLで終わる必要があります。 分析ストレージに書き込む前に、テーブル名にサフィックスとして_SPRK_CLを追加します。
不明なエラー サーバー内部エラー 2901 問題が発生しました。 セッションを再起動して、もう一度やり直してください。 この問題は一時的なものであり、セッションを再起動してもう一度試すことで解決できます。 この問題が解決しない場合は、サポートにお問い合わせください。