次の方法で共有


Microsoft Sentinel Data Lake でノートブックを実行する

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

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

[前提条件]

Microsoft Sentinel Data Lake にオンボードする

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

権限

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

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

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

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

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

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

Visual Studio Codeがまだない場合は、MacLinux、または Windows のVisual Studio Codeをダウンロードしてインストールします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Important

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

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

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

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

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

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

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

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

  3. [File > New File] を選択し、ドロップダウンから 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)  
    

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

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

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

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

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

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

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

ステータス バー

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

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

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

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

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

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

  • セッション タイムアウト期間の設定: セッションがタイムアウトするまでの時間を分単位で設定します。既定値は 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 Provider クラス

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ジョブとスケジュール

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

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

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

カテゴリ パラメーター/制限
分析層のカスタム テーブル 分析レベルのカスタム テーブルをノートブックから削除することはできません。これらのテーブルを削除するには、Log Analyticsを使用します。 詳細については、「Azure Monitor ログのテーブルと列を追加または削除する」を参照してください>
ゲートウェイ Web ソケットのタイムアウト 2 時間
対話型クエリのタイムアウト 2 時間
対話型セッションの非活動タイムアウト 20 分
Language Python
ノートブック ジョブのタイムアウト 8 時間
同時実行ノートブック ジョブの最大数 3、以降のジョブは順次キューに登録されます
対話型クエリでの同時ユーザーの最大数 大規模プールでの8から10
セッションの起動時間 Spark コンピューティング セッションの開始には約 5 ~ 6 分かかります。 VS Code Notebook の下部にあるセッションの状態を表示できます。
サポートされているライブラリ data lake のクエリでは>Azure Synapse および抽象関数用の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 問題が発生しました。 セッションを再起動して、もう一度やり直してください。 この問題は一時的なものであり、セッションを再起動してもう一度試すことで解決できます。 この問題が解決しない場合は、サポートにお問い合わせください。

AzureDiagnostics などのレガシ テーブルのクエリはサポートされていません。