先釐清:耐久性、版本控管與備份並不相同
Amazon S3、Google Cloud Storage 等服務通常能妥善處理硬體故障,但合法的刪除指令仍會被忠實執行。誤操作、錯誤的生命週期規則、部署腳本缺陷,或遭竊的高權限憑證,都可能讓大量物件在短時間內消失。因此,儲存服務宣稱的耐久性不能取代刪除防護與備份設計。
版本控管是第一層防線。覆寫物件時保留舊版本,刪除時則可能建立刪除標記、保留舊世代,或將物件置於可復原狀態,實際行為依雲端平台而異。它適合處理一般誤刪與錯誤覆寫,但若同一組管理權限可以永久刪除所有版本,版本控管就無法抵抗憑證外洩或惡意管理操作。
依資料價值組合三種保護機制
我們通常不會為所有 bucket 套用相同政策。公開網站素材、可重新產生的報表、使用者上傳內容與法規要求保存的紀錄,其復原時間、保存年限及成本容忍度都不同。先為資料分類,再決定版本保存期、不可刪除期間與異地副本,比單純開啟一個功能更可靠。
- 版本控管:適合防止日常覆寫與誤刪,但必須搭配非現行版本的生命週期政策,否則舊版本及大型檔案會持續累積費用。
- 保留鎖定:在指定期間內禁止刪除或覆寫。治理模式通常允許受控的高權限例外;合規模式則更嚴格,部分鎖定設定可能無法縮短或取消,啟用前應先在測試 bucket 驗證。
- 獨立副本:將重要物件複寫至不同帳號、專案或安全邊界,降低單一管理員權限或帳號入侵同時破壞來源與備份的風險。需特別確認刪除標記、既有物件、加密金鑰及中繼資料是否會一併複寫。
讓刪除成為受控操作,而不是日常權限
應用程式通常只需要讀取、建立及更新特定前綴,不應持有永久刪除歷史版本、修改保留政策或停用複寫的權限。將這些能力集中到獨立的維運角色,採臨時授權、多人核准或緊急帳號,可縮小一般憑證遭竊時的影響範圍。備份目的地也應使用不同的管理邊界,否則跨區複寫只能防區域故障,不能防同一身分造成的刪除。
防護還需要可觀測性。記錄物件刪除、批次作業、生命週期規則變更、保留政策變更與權限調整,並對異常大量刪除發出警示。警示內容至少應包含 bucket、前綴、操作者、請求來源與受影響版本,才能讓值班工程師快速判斷是正常清理、程式錯誤,還是帳號入侵。
成本治理要在啟用版本前完成
版本控管常見的問題不是功能失效,而是舊版本沒有清理邊界。頻繁更新的大型物件、資料匯出檔及日誌封存,可能快速增加儲存量。政策應明確區分現行版本、非現行版本、刪除標記及未完成的分段上傳,並依資料分類設定轉入低成本儲存層或到期刪除的時間。
生命週期規則本身也可能造成事故。新規則上線前,先以清單或模擬結果檢查預計影響的物件;對高價值資料採較小範圍逐步推出。保留鎖定期間必須與生命週期政策相容,並把加密金鑰的保存納入同一套規劃,因為保有物件卻遺失客戶管理金鑰,仍然無法完成復原。
把復原寫成可演練的工程流程
發生誤刪時,第一步不是立即大量複製,而是先停止仍在執行的寫入程式、同步工作及生命週期變更,保存稽核紀錄,並確認事件時間範圍。接著列出受影響物件與版本,優先還原到新的前綴或隔離 bucket;驗證內容、大小、雜湊值、中繼資料、存取政策及應用程式相容性後,再決定是否切換正式路徑。這能避免錯誤版本覆蓋仍然正確的資料。
大量復原工具應具備分頁處理、重試、速率限制、進度紀錄及可重複執行的特性,並避免把刪除標記誤當成有效內容。團隊也應定期抽樣復原,測量列舉版本、取得解密權限及重新掛接應用程式所需的實際時間。若環境同時整合 LINE、ERP、CRM 或 IoT 資料流程,演練還要驗證下游系統是否會因舊事件重送而產生重複交易。真正可靠的方案,不只是資料仍存在,而是工程團隊知道如何安全地把服務恢復到一致狀態。