大家好!歡迎來到鐵人賽第十七天。
昨天我們完成了 Human-in-the-Loop(HITL),讓管理員可以透過 LINE 按鈕決定是否執行漏洞修補。不過,流程執行完之後,還有一個實務上極為重要的問題:我們怎麼知道這次事件發生了什麼?
因此,今天要為系統加入「資安工單」功能,讓每一次漏洞事件都留下不可抹滅的稽核紀錄。今天我們將使用 Google Sheets 結合 n8n,實作「自動開單 → 審批 → 修補 → 自動結案」的完整生命週期。
先建立一份 Google Sheets,命名為 「SecOps 資安自動化稽核日誌」。
在第一列(Row 1)建立以下欄位:
| 欄位名稱 | 用途說明 |
|---|---|
| Timestamp | 事件發生時間 |
| Agent Name | 受害主機名稱 |
| CVE ID | 漏洞編號 |
| Severity | 漏洞嚴重程度 |
| AI Assessment | Gemini 分析結果 |
| Status | 工單目前的處理狀態 |
| Approval Time | 管理員授權時間 |
這份表單就是我們今天的「資安工單資料庫」。
回到昨天完成的 n8n 流程。在 Gemini AI 節點 後面、LINE 審批節點 的前面加入一個 Google Sheets 節點。
Append Row(新增一筆資料){{ $now }}
{{ $('Webhook').item.json.body.agent_name }}
{{ $('Webhook').item.json.body.cve_id }}
{{ $('Webhook').item.json.body.severity }}
等待審批中 ⏳
設定完成後,只要 Wazuh 傳入一筆漏洞告警,且 AI 分析完畢,n8n 就會自動在這裡建立一張工單。
這一步在系統設計中非常重要。當 Google Sheets 新增資料後,n8n 會在輸出結果回傳這筆資料的列號(row number)。
例如:row_number = 5,代表這次的資安事件被記錄在試算表的第 5 列。
後續的流程就可以利用這個 row_number 當作這張工單的專屬 ID,直接精準找到剛才建立的紀錄進行更新,而不需要重新搜尋整個資料庫。
在昨天的流程中,管理員在 LINE 按下「授權執行自動修補」後,n8n 會經過 Wait 節點,並透過 SSH 執行漏洞修補。我們要在 SSH 修補成功後,再加入一個 Google Sheets 節點。
Update Row(更新資料){{ $json.row_number }}。接著更新以下欄位,宣告結案:
✅ 已完成修補
{{ $now }}
這樣一來,試算表上原本的 等待審批中 ⏳ 就會瞬間變身為 ✅ 已完成修補,並留下精確的授權時間戳記。
現在,可以按下 n8n 的 Execute Workflow,送出一筆測試資料。
請觀察資料是否順暢地流過這條精心設計的管線:
Wazuh 告警
⬇
Webhook 接收
⬇
Gemini AI 分析漏洞
⬇
Google Sheets 自動建立工單 (Append Row)
⬇
LINE 發送審批卡片
⬇
Wait 節點休眠等待
⬇
管理員手機點擊授權
⬇
SSH 遠端執行修補
⬇
Google Sheets 自動更新結案 (Update Row)
⬇
LINE 發送修補完成通知
最後回到 Google Sheets 驗收成果,你將會看到一筆極具專業度、有始有終的事件紀錄!
今天我們沒有增加複雜的 AI 功能,而是替昨天完成的 HITL 流程補上了靈魂——「紀錄」。現在的系統已經可以做到:
到這裡,我們的 SOAR 流程不再只是「無腦自動執行」,而是真正具備企業級事件追蹤能力的安全維運中樞。
明天(Day 18),我們將繼續往下延伸,探討如何讓不同主機之間互相配合,實作更進一步的「自動化聯防機制」。我們明天見!