大家好!歡迎來到鐵人賽第二十七天。
我們的 SOAR 系統經過將近一個月的打造,已經擁有數十個節點、多條分流劇本,以及複雜的 API 串接邏輯。這些心血結晶目前都安穩地運作在 n8n 伺服器中。
但是,身為專業的 IT 與資安人員,我們必須問自己一個致命的問題:「如果這台 n8n 主機硬碟掛了怎麼辦?」 或者是,如果同事不小心把一個寫滿複雜邏輯的 Switch 節點刪除,還順手按了「儲存」,我們該如何復原?
在軟體工程中,程式碼必須要有版本控制;而 n8n 的「工作流(Workflow)」本質上就是標準的 JSON 格式檔案,當然也必須上 Git!今天,我們不寫手動備份的腳本,我們要實作一個「自動備份工作流」,讓 n8n 每天午夜自己把自己所有的工作流匯出,並推送到私有的 GitHub 儲存庫中。
為了安全存放我們的自動化劇本,我們需要一個專屬的空間。
soar-n8n-backup。請務必將可見度設定為 Private(私有)。soar-n8n-backup 這個 Repository 的 Contents: Read and write 權限。建立一個全新的工作流,命名為「SOAR 系統自動備份任務」。
00:00 執行(Midnight)。讓系統在大家都在睡覺、且沒有資安告警干擾的離峰時間進行備份。Workflow。Get Many(取得多個)。現在我們手上有了所有工作流的 JSON 資料,接著要把它們變成檔案,存進 GitHub。
在 n8n 節點後方,新增一個 GitHub 節點:
File。Create/Update(如果檔案不存在就建立,存在就更新版本)。your_account/soar-n8n-backup)。workflows/{{ $json.name }}_{{ $json.id }}.json
{{ JSON.stringify($json, null, 2) }}
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 除了看懂文字,還能擁有解析未知檔案風險的能力。我們明天見!