iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
AI 自動化

從漏洞告警到 AI 決策:Wazuh × RAG × n8n 實作自動化資安漏洞驗證與智慧通報系列 第 27 篇

Day 27 | 守護自動化的結晶 : 實作 SOAR 工作流備份與 Git 版本控制

  • 分享至 

  • xImage
  •  

大家好!歡迎來到鐵人賽第二十七天。

我們的 SOAR 系統經過將近一個月的打造,已經擁有數十個節點、多條分流劇本,以及複雜的 API 串接邏輯。這些心血結晶目前都安穩地運作在 n8n 伺服器中。

但是,身為專業的 IT 與資安人員,我們必須問自己一個致命的問題:「如果這台 n8n 主機硬碟掛了怎麼辦?」 或者是,如果同事不小心把一個寫滿複雜邏輯的 Switch 節點刪除,還順手按了「儲存」,我們該如何復原?

在軟體工程中,程式碼必須要有版本控制;而 n8n 的「工作流(Workflow)」本質上就是標準的 JSON 格式檔案,當然也必須上 Git!今天,我們不寫手動備份的腳本,我們要實作一個「自動備份工作流」,讓 n8n 每天午夜自己把自己所有的工作流匯出,並推送到私有的 GitHub 儲存庫中。


第一步:準備 GitHub 私有儲存庫與憑證

為了安全存放我們的自動化劇本,我們需要一個專屬的空間。

  1. 登入 GitHub,建立一個全新的儲存庫(Repository),命名為 soar-n8n-backup。請務必將可見度設定為 Private(私有)。
  2. 前往 GitHub 的 Developer Settings ➡ Personal Access Tokens (Fine-grained tokens)。
  3. 產生一把新的 Token,並給予對 soar-n8n-backup 這個 Repository 的 Contents: Read and write 權限。
  4. 回到 n8n 的 Credentials 介面,新增一個 GitHub API 憑證,將剛才拿到的 Token 存入保險箱中妥善保管。

第二步:建立排程與讀取所有工作流

建立一個全新的工作流,命名為「SOAR 系統自動備份任務」。

  1. 新增 Schedule Trigger:
    設定為每天 00:00 執行(Midnight)。讓系統在大家都在睡覺、且沒有資安告警干擾的離峰時間進行備份。
  2. 新增 n8n 節點:
    這是一個非常特別的內建節點,它的作用是「透過 n8n 控制 n8n 自己」。
  • Credential:設定你的 n8n API 憑證(如果尚未建立,可在 n8n 設定中快速生成一把)。
  • Resource:選擇 Workflow。
  • Operation:選擇 Get Many(取得多個)。
  • 這個節點執行後,會將你系統內所有存在的工作流(包含名稱、ID、啟動狀態以及完整的 JSON 結構),一口氣全部撈出來變成一個陣列(Array)。

第三步:將工作流推送到 GitHub (Git Commit)

現在我們手上有了所有工作流的 JSON 資料,接著要把它們變成檔案,存進 GitHub。

在 n8n 節點後方,新增一個 GitHub 節點:

  • Authentication:選擇剛剛建立的 GitHub API 憑證。
  • Resource:選擇 File。
  • Operation:選擇 Create/Update(如果檔案不存在就建立,存在就更新版本)。
  • Repository:填入你的 GitHub 帳號與儲存庫名稱(例如 your_account/soar-n8n-backup)。
  • File Path(檔案路徑):我們透過變數動態命名檔案,讓它井然有序:
    workflows/{{ $json.name }}_{{ $json.id }}.json
  • File Content(檔案內容):將 n8n 抓出來的物件轉回 JSON 字串寫入:
    {{ JSON.stringify($json, null, 2) }}
  • Commit Message:輸入 Auto-backup: {{ $now.toFormat('yyyy-MM-dd') }}。

(💡 實務小提示:因為第二步撈出來的是多筆工作流資料,n8n 會聰明地對這個 GitHub 節點執行「自動迴圈」。如果你的系統有 10 個工作流,這個節點就會自動執行 10 次,將 10 個檔案分別推送到 GitHub 上!)


第四步:發送備份成功通知

備份完成後,照慣例要向維運群組報平安。

在 GitHub 節點後方,接上一個 LINE HTTP Request 節點:

{
  "to": "你的_LINE_維運群組_ID",
  "messages": [
    {
      "type": "text",
      "text": "💾 【系統備份通知】\n\nSOAR 系統已於今日午夜完成全自動備份。\n所有工作流 (Workflows) 均已成功匯出並 Commit 至 GitHub 私有儲存庫中,版本控制已同步!"
    }
  ]
}


完整流程測試與架構

這個「自己備份自己」的管線非常簡潔有力:

Schedule Trigger (每天 00:00)
 ↓
n8n 節點 (撈取系統內所有工作流的 JSON)
 ↓
GitHub 節點 (逐一 Create/Update 檔案到遠端 Git)
 ↓
LINE 通知 (發送備份成功報表)

你可以按下 Execute Workflow 測試一下。
執行完畢後,打開你的 GitHub soar-n8n-backup 儲存庫,你會看到一個 workflows 資料夾,裡面整整齊齊地躺著你這 20 幾天來所有做過的工作流 JSON 檔。點開它的 History,還能看到每日的 Commit 紀錄!


今天的成果

今天我們運用 n8n 自身的 API 結合 GitHub,完美實作了「基礎設施即程式碼(IaC, Infrastructure as Code)」中極為重要的版本控制與災難復原機制。

現在,你的 SOAR 系統真正達到了「金剛不壞」的境界。
如果未來某天你不小心把某個工作流改壞了,或是主機意外掛點,你只需要到 GitHub 把前一天的 JSON 檔下載下來,回到 n8n 點擊「Import from File」,不用一秒鐘,所有複雜的防禦邏輯瞬間滿血復活!

明天(Day 28),我們將把防禦的觸角伸向另一個深水區:實作「惡意檔案與網域的自動化沙箱(Sandbox)分析」,讓我們的 AI 除了看懂文字,還能擁有解析未知檔案風險的能力。我們明天見!


上一篇
Day 26 | 讓數據說話 : 實作 SOAR 資安戰情室與視覺化儀表板
下一篇
Day 28 | 抽絲剝繭 : 實作 SOAR 可疑檔案自動化沙箱分析
系列文
從漏洞告警到 AI 決策:Wazuh × RAG × n8n 實作自動化資安漏洞驗證與智慧通報 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言