共用方式為


在 Microsoft Sentinel 資料湖上執行筆記本

Jupyter 筆記本提供互動式環境,可探索、分析和視覺化 Microsoft Sentinel 資料湖中的資料。 透過筆記本,您可以在一個地方編寫和執行程式碼、記錄工作流程以及查看結果。 這使得執行資料探索、建立進階分析解決方案以及與他人分享見解變得容易。 透過在 Visual Studio Code 中利用 Python 和 Apache Spark,筆記本可協助您將原始安全性資料轉換為可操作的情報。

本文說明如何在 Visual Studio Code 中使用 Jupyter 筆記本來探索資料湖資料並與之互動。

先決條件

上線至 Microsoft Sentinel 資料湖

若要在 Microsoft Sentinel 資料湖中使用筆記本,您必須先上線至資料湖。 如果您尚未上線至 Microsoft Sentinel 資料湖,請參閱上線至 Microsoft Sentinel 資料湖。 如果您最近才上線至資料湖,則可能需要一些時間,等到擷取了足夠的資料量之後,才能使用筆記本建立有意義的分析。

權限

Microsoft Entra ID 角色可提供資料湖中所有工作區的廣泛存取權。 或者,您可以使用 Azure RBAC 角色授與個別工作區的存取權。 具有 Microsoft Sentinel 工作區 Azure RBAC 權限的使用者,可以針對資料湖層的這些工作區執行筆記本。 如需詳細資訊,請參閱 Microsoft Sentinel 中的角色和許可權

若要在分析層中建立新的自訂資料表,必須在 Log Analytics 工作區中為資料湖受控識別指派 Log Analytics 參與者 角色。

若要指派角色,請遵循下列步驟:

  1. 在 Azure 入口網站中,流覽至您要指派角色的 Log Analytics 工作區。
  2. 在左側導覽窗格中選取 [存取控制 (IAM)]
  3. 點擊新增角色指派
  4. [角色] 資料表中,選取 [Log Analytics 參與者],然後選取 [下一步]
  5. 選取 [受控身分],然後選取 [選取成員]
  6. 您的資料湖管理識別是系統指派的管理識別,名為 msg-resources-<guid>。 選取該受控識別,然後選取 [選取]
  7. 選取 [檢閱並指派]

如需將角色指派給受控識別的詳細資訊,請參閱 使用 Azure 入口網站指派 Azure 角色

安裝 Visual Studio Code 和 Microsoft Sentinel 延伸模組

如果您還沒有 Visual Studio Code,請下載並安裝適用於 MacLinuxWindows 的 Visual Studio Code。

適用於 Visual Studio Code (VS Code) 的 Microsoft Sentinel 延伸模組是從延伸模組市集安裝。 若要安裝擴充功能,請依照下列步驟操作:

  1. 選取左側工具列中的 Extensions Marketplace。
  2. 搜尋「Sentinel」
  3. 選取 Microsoft Sentinel 延伸模組,然後選取 [安裝]。
  4. 安裝擴充功能之後,Microsoft Sentinel 防護圖示會出現在左側工具列中。

擴充功能市集的螢幕截圖。

安裝適用於 Visual Studio Code 的 GitHub Copilot 擴充功能,以啟用在程式開發筆記本中的程式碼補全與建議功能。

  1. 在延伸模組市集中搜尋 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 ,然後輸入 [建立新的 Jupyter 筆記本]。 螢幕擷取畫面,顯示如何從搜尋列建立新筆記本。

  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 資料湖的範例筆記本

狀態列

筆記本底部的狀態列提供筆記本和 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 筆記本。 每個集區都是針對不同的工作負載和效能需求而設計的。 執行階段集區的選擇會影響 Spark 任務的效能、成本和執行時間。

執行階段集區 推薦使用案例 特性
小型 開發、測試和輕量探勘分析。
具有簡單轉換的小型工作負載。
優先考慮成本效益。
適用於小型工作負載
簡單的轉換。
成本更低,執行時間更長。
中度 具有連接、彙總和 ML 模型訓練的 ETL 作業。
中等工作負載涉及複雜的轉換。
比小型版改進了性能。
處理平行處理原則和適度的記憶體密集型作業。
大型 深度學習和 ML 工作負載。
廣泛的資料重排、大型連接或即時處理。
關鍵執行時間。
高記憶體和運算能力。
最小的延誤。
最適合大型、複雜或對時間要求嚴格的工作負載。

備註

首次存取時,核心選項可能需要大約 30 秒的時間才能載入。
選取執行階段集區之後,工作階段可能需要 3 到 5 分鐘的時間才會啟動。

檢視訊息、記錄和錯誤

訊息記錄和錯誤訊息會顯示在 Visual Studio Code 的三個區域中。

  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 筆記本時 Microsoft Sentinel 資料湖的服務參數和限制。

類別 參數/限制
分析層中的自訂資料表 分析層中的自訂資料表無法從筆記本中刪除;使用 Log Analytics 刪除這些資料表。 如需詳細資訊,請參閱 在 Azure 監視器記錄中新增或刪除資料表和資料行
閘道 Web 通訊端逾時 2 小時
Interactive Query 逾時 2 小時
互動工作階段閒置逾時 20 分鐘
語言 Python
筆記本工作逾時 8 小時
並行筆記本工作數目上限 3 個,後續作業會排入佇列
互動式查詢的並行使用者上限 8 到 10 位 (在大型集區上)
工作階段啟動時間 Spark 計算工作階段大約需要 5-6 分鐘才能啟動。 您可以在 VS Code 筆記本底部檢視會話的狀態。
支援的程式庫 只有 Azure Synapse 程式庫 3.4 和抽象函式的 Microsoft Sentinel 提供者程式庫支援查詢資料湖。 不支援 Pip 安裝或自訂程式庫。
VS Code UX 限制顯示記錄的功能 100,000 個資料列

故障排除

下表列出您在使用筆記本時可能遇到的常見錯誤、其根本原因,以及解決這些錯誤的建議動作。

錯誤類別 錯誤名稱 錯誤碼 錯誤訊息 建議的動作
資料庫錯誤 資料庫未找到 2001 找不到資料庫 {DatabaseName}。 確認資料庫存在。 如果資料庫是新的,請等待中繼資料重新整理。
資料庫錯誤 模棱兩可的資料庫名稱 2002 數個資料庫 (ID: {DatabaseID1}, {DatabaseID2}, ...) 共用名稱 {DatabaseName}。 提供特定的資料庫 ID。 當多個資料庫具有相同的名稱時,請指定資料庫識別碼。
資料庫錯誤 DatabaseId不相符 2003 找不到資料庫 ({DatabaseName}, ID {DatabaseID})。 檢查資料庫名稱和 ID。 若要取得資料庫 ID,請列出所有資料庫。
資料庫錯誤 ListDatabases失敗 2004 無法擷取資料庫。 重新啟動會話,然後重試。 重新啟動工作階段,並在幾分鐘後重試作業。
表格錯誤 TableDoesNotExist 2100 在資料庫 {DatabaseName} 中找不到資料表 {TableName}。 確認資料表存在於資料庫中。 如果資料表或資料庫是新的,請等待幾分鐘,然後再試一次。
表格錯誤 佈建未完成 2101 資料表 {TableName} 尚未備妥。 請在重新嘗試之前稍候幾分鐘。 正在配置資料表。 請在重新嘗試之前稍候幾分鐘。
表格錯誤 DeltaTableMissing 2102 資料表 {TableName} 是空的。 新表格最多可能需要幾個小時才能準備就緒。 可能需要幾個小時才能將分析資料表完全同步到資料湖中。 對於僅在資料湖中的資料表,請檢查是否需要載入或還原資料。
表格錯誤 欲刪除的資料表不存在 2103 無法刪除表格。 找不到資料表 {TableName}。 確認資料表存在於資料庫中。 如果資料表或資料庫是新的,請等待幾分鐘,然後再試一次。
授權失敗 缺少SASToken 2201 無法存取表格。 重新啟動會話,然後重試。 在嘗試擷取資料表的存取憑證時,授權失敗。 重新啟動會話,然後重試。
授權失敗 無效SASToken 2202 無法存取表格。 重新啟動會話,然後重試。 在嘗試擷取資料表的存取憑證時,授權失敗。 重新啟動會話,然後重試。
授權失敗 代幣已過期 2203 無法存取表格。 重新啟動會話,然後重試。 在嘗試擷取資料表的存取憑證時,授權失敗。 重新啟動會話,然後重試。
授權失敗 TableInsufficientPermissions 2204 資料庫 {DatabaseName} 中資料表 {TableName} 所需的存取權。 請聯絡管理員,要求存取表格或資料庫 (工作區)。
授權失敗 內部資料表存取被拒 2205 對資料表 {TableName} 的存取受到限制。 只能從筆記本存取系統或使用者定義的表格。
授權失敗 表格驗證失敗 2206 無法將資料儲存至資料表。 重新啟動會話,然後重試。 嘗試將資料儲存至表格時,授權失敗。 重新啟動會話,然後重試。
組態錯誤 HadoopConfig失敗 2301 無法更新工作階段設定。 重新啟動會話,然後重試。 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。
資料錯誤 JsonParsing失敗 2302 資料表中繼資料已損毀。 請連絡支援部門以尋求協助。 請連絡支援部門以尋求協助。 提供您的租用戶識別碼、資料表名稱和資料庫名稱。
表格架構錯誤 TableSchemaMismatch 2401 目標資料表中找不到欄位。 對齊 DataFrame 結構描述和目的地資料表,或使用覆寫模式。 更新 DataFrame 結構描述,以符合目標資料庫中的資料表。 您也可以在覆寫模式下完全取代表格。
表格架構錯誤 缺少必要的欄位 2402 DataFrame 中缺少資料行 {ColumnName}。 檢查 DataFrame 結構描述,並將其與目的地資料表對齊。 更新 DataFrame 結構描述,以符合目標資料庫中的資料表。 您也可以在覆寫模式下完全取代表格。
表格架構錯誤 不允許更改欄位類型 2403 無法變更資料行 {ColumnName} 的資料類型。 不允許資料行的資料類型變更。 檢查目的地資料表中的現有資料行,並對齊 DataFrame 中的所有資料類型。
表格架構錯誤 ColumnNullabilityChangeNotAllowed 2404 無法變更資料行 {ColumnName} 的 Null 性。 無法更新資料行的可 NULL 性設定。 檢查目的地表格,並將設定與 DataFrame 對齊。
IngestionError 資料夾建立失敗 2501 無法建立資料表 {TableName} 的儲存體。 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。
IngestionError 子任務請求失敗 2502 無法建立資料表 {TableName} 的匯入作業。 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。
IngestionError 子工作創建失敗 2503 無法建立資料表 {TableName} 的匯入作業。 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。
輸入錯誤 無效寫入模式 2601 寫入模式無效。 使用附加或覆寫。 在儲存 DataFrame 之前,請指定有效的寫入模式 (附加或覆寫) 。
輸入錯誤 不允許分區 2602 無法分割分析資料表。 移除分析資料表中所有欄位的分割區。
輸入錯誤 MissingTableSuffixLake 2603 自訂資料表名稱無效。 資料湖中所有自訂資料表的名稱都必須以_SPRK結尾。 在將資料表名稱寫入資料湖之前,先將_SPRK作為尾碼新增至資料表名稱。
輸入錯誤 MissingTableSuffixLA 2604 自訂資料表名稱無效。 自訂分析資料表的所有名稱都必須以_SPRK_CL結尾。 在將資料表名稱寫入分析儲存之前,先將_SPRK_CL作為尾碼新增至資料表名稱。
UnknownError (未知錯誤) 內部伺服器錯誤 2901 發生錯誤。 重新啟動會話,然後重試。 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。