在 Microsoft Sentinel 資料湖中創建 KQL 任務

Kusto 查詢語言(KQL)工作是對 Microsoft Sentinel 資料湖及聯邦資料表中資料進行的一次性或排程 KQL 查詢。 聯合資料表是外部資料來源,例如 Microsoft Entra ID、Microsoft 365 和 Microsoft Resource Graph 資料表,你可以與資料湖資料表一同查詢,而不必將資料匯入工作區。 使用工作來因應調查與分析情境,例如:

  • 執行時間較長的一次性查詢,用於事件調查和事件回應 (IR)
  • 支援使用低保真日誌之資料擴充工作流程的資料彙整任務
  • 歷史威脅情報 (TI) 匹配掃描以供回顧分析
  • 異常偵測掃描,能在多個資料表中識別異常模式

當查詢需要跨不同資料集進行聯結或聯集時,KQL 作業會特別有效。 在開始之前,請先確認你已符合 先決條件,包括資料湖導入及所需權限。

使用工作將資料從資料湖層提升到分析層。 進入分析層後,使用進階的狩獵 KQL 編輯器查詢資料。 將數據提升至分析層級有以下好處:

  • 將分析層級的當前與歷史資料結合,或來自聯合資料表,對你的資料執行進階分析與機器學習模型。
  • 透過在分析層級執行查詢來降低查詢成本。
  • 將多個工作區的資料合併到分析層級的單一工作區。
  • 在分析層級結合 Microsoft Entra ID、Microsoft 365 和 Microsoft Resource Graph 資料,以跨資料來源進行進階分析。

注意事項

分析層的儲存費用比資料湖層級高。 為了降低成本,只推廣你需要進一步分析的數據。 在查詢中使用 KQL 只投影你需要的欄位,並篩選資料以減少被提升到分析層的資料量。

你可以將資料升遷到新表格,或將結果附加到分析層級的現有表格。 建立新資料表時,資料表名稱會加上 _KQL_CL ,表示該資料表是由 KQL 工作建立的。

你可以選擇性地將 KQL 工作的輸出寫入資料湖層的另一個資料表,以加快調查速度,或利用豐富的資料進行威脅狩獵。 建立新資料表時,如果將資料寫入系統資料表工作區,資料表名稱後面會加上 _KQL 後綴。

必要條件

要在 Microsoft Sentinel 資料湖中建立和管理 KQL 工作,你需要以下先決條件。

上線至資料湖

要在 Microsoft Sentinel 資料湖中建立和管理 KQL 工作,您必須先登入資料湖。 如需上限資料湖的更多資訊,請參閱 Onboard to the Microsoft Sentinel data lake.

權限

Microsoft Entra ID 角色提供資料湖中所有工作空間的廣泛存取權限。 若要讀取所有工作區中的資料表、寫入分析層,以及使用 KQL 查詢排定工作,您必須具備其中一種受支援的 Microsoft Entra ID 角色。 欲了解更多角色與權限資訊,請參閱 Microsoft Sentinel 資料湖角色與權限。

要在分析層建立新的自訂資料表,請將 Log Analytics 工作空間中的 Log Analytics 貢獻 者角色指派給資料湖管理身份。

要指派角色,請依照以下步驟操作:

  1. 在 Azure 入口網站,前往你想指派角色的 Log Analytics 工作空間。
  2. 在左側導覽窗格中選取 存取控制 (IAM)。
  3. 選擇 新增角色指派。
  4. 在 角色 資料表中,選取 *Log Analytics Contributor,然後選取 「下一步」。
  5. 選擇 管理身份,再選擇 選擇成員。
  6. 您的資料湖受控識別是名為 msg-resources-<guid> 的系統指派受控識別。 選擇受管理身份,然後選擇選擇。
  7. 選擇 檢閱並指派。

欲了解更多關於如何分配角色給受管理身份的資訊,請參見使用 Azure 入口網站指派 Azure 角色。

創造一份工作

你可以建立作業,讓其依排程執行或單次執行。 建立作業時,你可以指定用於存放結果的目的地工作區和資料表。 你可以將結果寫入新資料表,或附加到分析或資料湖層級的現有資料表。 你無法將結果寫入聯邦表格。 你可以建立一個新的 KQL 工作,或是從包含查詢和工作設定的範本建立一個工作。 欲了解更多資訊,請參閱 從範本建立 KQL 工作。

  1. 請從 KQL 查詢編輯器或工作管理頁面開始工作建立流程。

    1. 要從 KQL 查詢編輯器建立工作,請在查詢編輯器右上角選擇 「建立工作 」按鈕。 一張顯示 KQL 查詢編輯器中建立工作按鈕的截圖。

    2. 若要從作業管理頁面建立作業,請依序選取 [Microsoft Sentinel>資料湖探索>作業],然後選取 [建立作業] 按鈕。 一張顯示職缺管理頁面上建立工作按鈕的截圖。

  2. 輸入 職缺名稱。 工作名稱必須對租戶來說是獨一無二的。 職缺名稱最多可包含 256 個字元。 你不能在職缺名稱中使用 a # 或 a - 。

  3. 請填寫一份職 缺說明 ,說明該職位的背景與目的。

  4. 從 「選擇工作區 」下拉選單中,選擇目的地工作區。 這個工作區可以是系統資料表,也可以是你想寫查詢結果的 Sentinel 工作區。

  5. 選擇目的地表格:

    1. 要附加到現有資料表,請選擇 「新增到現有資料表 」,並從下拉選單中選擇資料表名稱。 在新增現有資料表時,查詢結果必須與該資料表的結構相符。
  6. 選取 [下一步]。 一張顯示新職缺詳情頁面的截圖。

  7. 在 「準備查詢」 面板中檢視或撰寫你的查詢。 如果查詢中沒有指定日期範圍,請檢查時間選擇器是否設定為該工作所需的時間範圍。

  8. 從 「已選取的工作區 」下拉選單中選擇要執行查詢的工作區。 這些工作區就是你想要查詢的資料表的來源工作區。 你選擇的工作區決定了可供查詢的資料表。 所選的工作區會套用到查詢編輯器中的所有查詢分頁。 使用多個工作空間時, union() 操作符預設會套用到來自不同工作空間、名稱與結構相同的資料表。 使用 workspace() 運算子查詢特定工作區的資料表,例如 workspace("MyWorkspace").AuditLogs。

    注意事項

    如果你寫入已存在的資料表,查詢必須回傳與目標資料表結構相符的結構結果。 如果查詢沒有回傳正確的結構,執行時該工作就會失敗。

    將 KQL 作業寫入系統資料表目前仍處於預覽狀態。

  9. 選取 [下一步]。

    一張顯示評論查詢面板的截圖。

    在 「排程查詢工作」 頁面上,選擇要讓此工作執行一次,還是依排程執行。 如果你選擇 一次性,工作定義完成後就會執行。 選擇 排程後,你可以指定工作執行的日期和時間,或以定期排程執行。

  10. 選擇 一次性 或 排程工作。

    注意事項

    編輯一次性作業會立即觸發其執行。

  11. 如果您選擇排程,請輸入下列詳細資料:

    1. 從下拉選單選擇 重複頻率 。 您可以選擇 按分鐘、 按小時、 每日、 每週或 每月。
    2. 設定 [重複間隔] 值,以決定您希望作業根據所選頻率來執行的間隔。
    3. 在 設定排程中,選擇 「寄件 日期」並輸入時間。 From 欄位的工作開始時間必須在職缺創造後至少 30 分鐘內。 作業會從這個日期和時間開始,依 [執行間隔] 下拉式清單中選取的頻率執行。
    4. 選擇 「至日期 」,並輸入時間以指定工作排程結束的時間。 如果你想讓排程無限持續,請選擇 設定工作無限執行。

    作業的開始與結束時間會依使用者的地區設定。

    注意事項

    如果你將作業排程為以高頻率執行,例如每 30 分鐘一次,就必須將資料在資料湖中可供使用所需的時間納入考量。 通常有長達 15 分鐘的延遲,直到新匯入的資料可供查詢。

  12. 選擇 「下一步 」以查看職缺詳情。

    一張顯示排程工作面板的截圖。

  13. 查看職缺細節後選擇 提交 以建立職缺。 如果工作是一次性工作,選擇 提交後就會執行。 如果作業已排程,則會新增到 作業 頁面的作業清單中,並依開始日期和時間執行。 一張顯示審查工作細節面板的截圖。

  14. 作業已排程,並顯示下列頁面。 您可以透過點擊連結查看職缺。 一張顯示職缺建立頁面的截圖。

從範本建立工作

你可以從預先定義的工作範本建立 KQL 工作。 工作範本包含 KQL 查詢與工作設定,例如目的工作區與資料表、排程及描述。 你可以自行建立職缺範本,或使用 Microsoft 提供的內建範本。

要從範本建立工作,請遵循以下步驟:

  1. 從 職缺 頁面或 KQL 查詢編輯器中,選擇 建立工作,然後選擇 從範本建立。

  2. 在 工作範本 頁面,從可用範本列表中選擇你想使用的範本。

  3. 請從範本中檢視 描述 和 KQL 查詢 。

  4. 選擇 從範本建立作業。

    一張顯示職缺範本頁面的截圖。

  5. 工作建立精靈會以 「建立新的 KQL 工作 」頁面開啟。 除了目的地工作區外,作業詳細資料皆會從範本預先填入。

  6. 從 「選擇工作區 」下拉選單選擇目的地工作區。

  7. 檢視並依需求修改職缺細節,然後選擇 「下一 頁」進入職缺建立精靈。

  8. 剩下的步驟與 「創造工作」相同。 欄位是從範本預先填充,並可依需求進行修改。

以下範本可供參考:

範本名稱 類別
異常登入地點增加
分析 Entra ID 登入日誌的趨勢分析,透過計算位置多樣性趨勢線,偵測不同應用程式使用者的異常位置變化。 它會標示出地點變異性增幅最劇烈的前三個帳戶,並列出其在21天內的相關地點。

目標資料表: UserAppSigninLocationTrend

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
搜捕
基於地點變更的異常登入行為
根據位置變化識別異常登入行為,讓 Entra ID 用戶及應用程式偵測突發行為變化。

目的地資料表: UserAppSigninLocationAnomalies

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
異常偵測
透過應用程式稽核罕見活動
找出執行罕見動作(例如同意、授權)的應用程式,這些動作可能會在不易察覺的情況下建立權限。 比較當天與過去14天的稽核,以找出新的稽核活動。 對於追蹤與 Azure 應用程式新增或移除相關的惡意活動以及自動審核非常有用。

目的地資料表: AppAuditRareActivity

查詢回溯期間: 14 天

排班表: 每日

開始日期: 目前日期 + 1小時
搜捕
Azure 稀有訂閱等級操作
根據 Azure 活動日誌識別敏感的 Azure 訂閱層級事件。 例如,根據「建立或更新快照」作業名稱進行監視。此作業用於建立備份,但攻擊者也可能加以濫用,以傾印雜湊或從磁碟擷取敏感性資訊。

目的地資料表: AzureSubscriptionSensitiveOps

查詢回溯期間: 14 天

排班表: 每日

開始日期: 目前日期 + 1小時
搜捕
AuditLogs 中各應用程式的每日活動趨勢
在過去14天內,請指出任何使用者或應用程式所進行的「同意應用程式」操作。 這可能表示存取 AzureApp 的權限被授權給惡意行為者。 同意申請、新增服務主體及新增 Auth2PermissionGrant 事件應該很少見。 如果可用,會根據執行「同意使用應用程式」的同一帳戶之 CorrleationId,從 AuditLogs 新增額外的相關內容。

目的地表: AppAuditActivityBaseline

查詢回溯期間: 14 天

排班表: 每日

開始日期: 目前日期 + 1小時
基準
SignInLogs 中每個用戶或應用程式的每日位置趨勢
建立每日用戶登入趨勢、位置計數及應用程式使用趨勢。

目的地表: UserAppSigninLocationBaseline

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
基準
每個目的地 IP 的每日網路流量趨勢
建立包含位元組數與不同連線對象的基準,以偵測 beaconing 與資料外洩。

目的地資料表: NetworkTrafficDestinationIPDailyBaseline

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
基準
每日每個目的地 IP 的網路流量趨勢及資料傳輸統計
識別曾對外連線至外部目的地的內部主機,包括流量趨勢,並估算影響範圍。

目的地資料表: NetworkTrafficDestinationIPTrend

查詢回溯期間:1 天

排班表: 每日

開始日期: 目前日期 + 1小時
搜捕
每日各來源 IP 網路流量趨勢
建立包含位元組數與不同連線對象的基準,以偵測 beaconing 與資料外洩。

目標資料表: NetworkTrafficSourceIPDailyBaseline

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
基準
每日每個來源 IP 的網路流量趨勢及資料傳輸統計
今日的連線與位元組數會根據主機的逐日基準進行評估,以判斷觀察到的行為是否明顯偏離既有模式。

目的地表: NetworkTrafficSourceIPTrend

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
搜捕
每日用戶與應用程式登入位置趨勢
為每位使用者或應用程式建立典型地理與 IP 的登入基準,實現大規模且具成本效益的異常偵測。

目的地資料表: UserAppSigninLocationDailyBaseline

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
基準
每日流程執行趨勢
識別新過程與盛行率,使「新罕見過程」的檢測更容易。

目的地資料表: EndpointProcessExecutionBaseline

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
基準
Entra ID 每個應用程式的罕見使用者代理
透過回溯數天的資料,針對特定應用程式建立其通常使用的 UserAgent 類型基準(亦即瀏覽器、辦公應用程式等)。 接著會搜尋當天是否有偏離此模式的案例,也就是與此應用程式結合時未曾出現的 UserAgent 類型。

目的地資料表:UserAppRareUserAgentAnomalies

查詢回溯期間: 7 天

排班表: 每日

開始日期: 目前日期 + 1小時
異常偵測
網路日誌 IOC 比對
在 CommonSecurityLog 中搜尋相符項目,以找出威脅情報 (TI) 中的任何 IP 入侵指標 (IOC)。

目標資料表: NetworkLogIOCMatches

查詢回溯時間: 1 小時

排程: 每小時

開始日期: 目前日期 + 1小時
搜捕
過去24小時內觀察到的新過程
穩定環境中的新程序可能代表惡意活動。 分析這些二進位檔執行的登入會話,有助於識別攻擊。

目標資料表: EndpointNewProcessExecutions

查詢回溯期間: 14 天

排班表: 每日

開始日期: 目前日期 + 1小時
搜捕
透過先前未曾見過的 IP 進行 SharePoint 檔案操作
透過設定新 IP 位址檔案上傳/下載活動重大變動的門檻,透過使用者行為識別異常。 它建立典型行為的基線,與近期活動做比較,並標示超過預設閾值 25 的偏差。

目的地表: SharePointFileOpsNewIPs

查詢回溯期間: 14 天

排班表: 每日

開始日期: 目前日期 + 1小時
搜捕
帕洛阿爾托潛在網絡信標
根據重複的時間差模式,從帕洛阿爾托網路的流量日誌中識別信標模式。 該查詢使用各種 KQL 函數來計算時間差,然後與一天內觀察到的總事件數比較,以找出 beaconing 的百分比。

目的地表: PaloAltoNetworkBeaconingTrend

查詢回溯期間: 1 天

排班表: 每日

開始日期: 目前日期 + 1小時
搜捕
Windows 可疑登入發生於一般時段之外
透過比較過去14天的登入活動,識別使用者正常時間外的異常Windows登入事件,並根據歷史模式標記異常。

目的地資料表:WindowsLoginOffHoursAnomalies

查詢回溯期間: 14 天

排班表: 每日

開始日期: 目前日期 + 1小時
異常偵測

考量與限制

當您在 Microsoft Sentinel 資料湖中建立工作時,請考慮以下限制與最佳實務:

為 KQL 工作輸出選擇資料層級

KQL 工作可以視目的地資料表所在的層而定,將資料寫入分析層或資料湖層。 透過工作建立精靈建立新資料表時,你可以選擇系統資料表作為目的地工作區,直接將資料寫入資料湖。 以此方式建立的資料表會直接建立並儲存在資料湖層級,並自動加上_KQL。

資料湖作業的 KQL 注意事項

以下 KQL 限制適用於資料湖作業:

  • 除以下項目外,所有 KQL 運算子與函式皆被支援:

    • adx()
    • arg()
    • externaldata()
    • ingestion_time()
  • 使用指令 stored_query_results 時,請在 KQL 查詢中提供時間範圍。 查詢編輯器上方的時間選擇器無法使用此指令。

  • 使用者自訂函式不被支援。

工作命名與排程限制

以下命名與排程限制適用於 KQL 作業:

  • 工作名稱必須對租戶來說是唯一的。
  • 職缺名稱最多可達256字元。
  • 職缺名稱不能包含 a # 或 -。
  • 工作開始時間必須至少在工作建立或編輯後 30 分鐘。

來源工作區刪除

如果排程 KQL 工作所參考的來源工作空間被刪除,該工作可能會在每次排程執行中持續執行並失敗,直到排程到期或工作被修改為止。 為防止重複失敗及不必要的資源消耗,引用已刪除來源工作區的工作會自動置於 「停用 」狀態,且需使用者操作後才能恢復。

資料湖資料擷取延遲

資料湖層級將資料存放在冷儲存中。 與熱或近即時分析層級不同,冷存儲優化了長期保存與成本效益,無法立即存取新匯入的資料。 當資料湖或聯邦資料表中新增資料列時,通常會有長達 15 分鐘的延遲,資料才可用查詢。 在執行查詢和排程 KQL 工作時,請考慮匯入延遲,確保回查視窗和工作排程設定為避免尚未取得的資料。

為避免查詢尚未可用的資料,請在 KQL 查詢或工作中加入延遲參數。 例如,當你排程自動化工作時,將查詢的結束時間設為 now() - delay,其中 delay 與典型的資料準備延遲 15 分鐘相符。 這種做法確保查詢只針對已完全擷取且準備好分析的資料。

以下 KQL 查詢可在 15 分鐘回溯視窗內偵測事件,並考慮吞入延遲。 變 lookback 數控制查詢時間範圍, delay 並偏移視窗以確保只查詢完全攝取的資料。

let lookback = 15m;
let delay = 15m;
let endTime = now() - delay;
let startTime = endTime - lookback;
CommonSecurityLog
| where TimeGenerated between (startTime .. endTime)

此方法適用於回查窗口短或執行間隔頻繁的工作。

考慮將回溯期與工作頻率重疊,以降低遺漏晚到資料的風險。

欲了解更多資訊,請參閱 「處理排程分析規則中的擷取延遲」。

欄名

欄名必須以字母開頭。

以下標準欄位不支援匯出。 資料擷取程序會覆寫目標層中的這些欄位:

  • 租戶識別

  • _TimeReceived

  • 類型

  • 原始碼系統

  • _ResourceId

  • _SubscriptionId

  • _ItemId

  • _BilledSize

  • _IsBillable

  • _WorkspaceId

  • TimeGenerated 如果資料超過兩天,則會被覆寫。 為了保留原始事件時間,請將來源時間戳記寫入獨立欄位。

關於服務限制,請參見 Microsoft Sentinel 資料湖服務限制。

注意事項

若工作查詢超過一小時限制,部分結果可能會被提升。

KQL 工作服務參數與限制

下表列出 Microsoft Sentinel 資料湖中 KQL 工作中的服務參數與限制。

注意事項

本表中的所有限制均適用於 每位租戶。 沒有每位使用者的限制。 KQL 作業有自己的並行配額,不會與 KQL 查詢共用計數器。

當並行工作執行限制超過時,請求會 被拒絕 且不會排隊。 執行中的作業一完成,計數器便會遞減。

類別 參數/極限
每個租戶可同時執行的作業數 5
作業查詢執行逾時 1 小時
每個租用戶的作業數 (已啟用的作業) 100
每個作業的輸出表格數量 1
查詢範圍 多重工作空間
查詢時間範圍 最長12年

如需故障排除提示和錯誤訊息,請參閱 Microsoft Sentinel 資料湖的 KQL 查詢疑難排解。