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

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

この記事では、Visual Studio Code で Jupyter ノートブックを使用してデータ レイク データを探索して操作する方法について説明します。

前提条件

Microsoft Sentinel データ レイクへのオンボード

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

アクセス許可

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

必要に応じて、Microsoft Sentinelスコープまたは行レベルの RBAC を構成して、ワークスペース内のデータ アクセスをさらに制限できます。 有効にすると、行レベルのスコープによって、ユーザーの割り当てられたスコープに基づいてクエリによって返されるデータが制限されます。 行レベルのスコープが構成されていない場合、既存のワークスペース レベルのアクセス許可モデルは変更されません。 詳細については、「Microsoft Sentinelスコープの構成 (行レベルの RBAC) (プレビュー)」を参照してください。

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

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

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

マネージド 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. 左側のツール バーで [拡張機能マーケットプレース] を選択します。
  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. アカウント名を選択してサインインを完了します。

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

    ログインに複数のゲスト アカウントが関連付けられている場合は、アカウントをシームレスに切り替えることができます。 アカウントを切り替えるには、Visual Studio Code ウィンドウの左下にあるアカウント名を選択します。 一度に選択できるアカウントは 1 つだけです。

    Visual Studio Code でアカウントを切り替える方法を示すスクリーンショット。

    重要

    アカウント間を切り替えると、アクティブな pyspark セッションが切断されます。

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

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

ジョブの詳細については、「 ジョブとスケジュール」を参照してください。 フェデレーション テーブルの詳細については、「Microsoft Sentinel データ レイクでのフェデレーション テーブルの使用」を参照してください。

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

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

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

  2. 検索ボックスに「>」と入力するか、Ctrl + Shift + P キーを押して、「新規作成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_filtered = df.select("displayName", "groupTypes", "mail", "mailNickname", "description", "tenantId").show(100,   truncate=False)  
    
    # Transform the dataframe
    df_transformed = df.filter(df.mail.isNotNull()).select("displayName", "groupTypes", "mail", "mailNickname", "description", "tenantId")
    
    write_options = {
         'mode': 'overwrite'
     }
    # Save to a new table
    data_provider.save_as_table(df_transformed, "EntraGroups_Processed_SPRK", write_options=write_options)
    

エディターは、 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を使用するには、GitHub Copilot拡張機能が Visual Studio Code にインストールされていることを確認します。

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

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

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

Microsoft Sentinel Provider クラス

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 ジョブのパフォーマンス、コスト、実行時間に影響します。

ランタイム プール 推奨されるユース ケース 特性
Small 開発、テスト、軽量の探索的分析。
単純な変換を備えた小規模なワークロード。
コスト効率が優先されます。
小規模ワークロードに適しています
単純な変換。
コストを削減し、実行時間を長くします。
Medium 結合、集計、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 ノートブック ジョブの作成と管理」を参照してください。

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

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

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

トラブルシューティング

ノートブックを操作するときの一般的なエラーと解決策については、「Microsoft Sentinel データ レイクのノートブックのトラブルシューティング」を参照してください。