題目與範圍
設計多租戶稽核日誌服務,記錄登入、權限變更、資料存取和設定更新等安全與合規動作。調查人員需要可搜尋歷史和可驗證匯出,同時日誌故障不能讓一般業務悄悄遺失關鍵證據。
先定義完整性承諾。AWS CloudTrail 描述可搜尋的不可變事件歷史,OpenTelemetry 提供結構化日誌模型;兩者都不能證明事件在產生前就一定真實。答案要說清系統能證明什麼。
面試官考察什麼
面試官考察持久接入、追加寫入、完整性驗證、租戶隔離、保留策略和運維權衡。好的回答會把稽核證據與一般除錯日誌分開,並解釋過載時如何避免安全事件遺失或被修改。
作答前需要確認的問題
- 哪些動作必須記錄,事件每秒量和突發量是多少?
- 需要的是可發現竄改、抗竄改,還是外部可證明?
- 稽核事件無法接收時,業務請求必須失敗嗎?
- 每個租戶保留多久,法律保全是否覆蓋刪除?
- 誰能查詢、匯出或驗證其他租戶資料?
- 調查人員需要哪些查詢維度和匯出格式?
30 秒回答框架
「我會提供區域接入 API 和本地持久緩衝,讓業務請求不依賴搜尋索引。每條事件包含租戶、操作者、動作、目標、請求關聯、事件時間、接收時間、Schema 版本和來源。按租戶與時間分區寫入追加日誌並跨故障域複製,再透過雜湊鏈或簽名段清單偵測後續修改。近期事件進入熱索引,舊段進入不可變保留。查詢和匯出按租戶授權、保留與法律保全執行,並輸出可驗證清單。監控接收與丟棄、延遲、完整性檢查和匯出完成率。」
分步深入
第一步:定義事件契約
要求事件 ID、租戶 ID、操作者和認證上下文、動作、目標、結果、來源服務、請求 ID、事件時間、接收時間、Schema 版本和必要屬性。不要把密鑰和無關載荷寫入記錄,使用引用或脫敏摘要。
第二步:分離接收與索引
只有事件進入持久緩衝或複製日誌後才回傳成功。消費者非同步建構搜尋索引和匯出。這樣搜尋叢集故障不會靜默刪除證據,也不會讓每個業務請求等待索引完成。
第三步:讓完整性可驗證
規範化事件,用前一事件或段根計算雜湊,並週期性簽名或把清單錨定到獨立信任域。保存序列缺口和驗證結果。雜湊鏈能發現接收後的修改,但不能證明上游服務發出的內容本身真實。
append(event):
canonical = canonicalize(event)
record.hash = H(previous_hash || canonical)
durable_log.append(record)
return accepted(record.event_id, record.hash)第四步:分區與複製
按租戶和時間分區,用雜湊或租戶鍵分散熱點租戶。按持久性目標跨故障域複製後再確認。保留租戶內或聚合內順序即可,除非確有必要,不要承諾全域順序。
第五步:建構熱搜尋與冷保留
近期事件進入調查索引,舊段壓縮到不可變物件儲存。索引必須能從日誌重建。保留任務遵守租戶策略和法律保全;刪除可以留下可稽核的策略記錄,但不保留受保護載荷。
第六步:執行存取與匯出控制
每次查詢按租戶、角色、用途和時間範圍授權。查詢和匯出本身也記錄為稽核事件。匯出生成簽名清單,包含篩選條件、事件數、段雜湊和時間戳,接收方可驗證完整性。
第七步:定義故障和過載行為
選擇有界本地緩衝、背壓和關鍵事件策略。非關鍵遙測可以採樣或延遲;安全事件則拒絕原始變更,或路由到隔離應急通道。只有易失記憶體暫存時,不能向呼叫方報告已接收。
第八步:運作信任邊界
監控接入延遲、持久確認耗時、消費者延遲、拒絕事件、序列缺口、雜湊失敗、索引新鮮度、匯出耗時和保留錯誤。限制密鑰存取、輪換簽名密鑰、測試復原和驗證,並記錄「稽核系統的稽核」。
權衡與邊界
權衡一:同步持久還是可用性
同步確認提供更強證據,但會增加延遲,區域故障時可能阻塞寫入。應按事件關鍵性制定策略,不要所有動作一刀切。
權衡二:全域順序還是租戶順序
租戶內順序成本更低,通常足夠調查。全域序列需要協調,會成為吞吐瓶頸。
權衡三:豐富載荷還是最小化
更多上下文利於調查,卻增加隱私、儲存和刪除風險。只收集與決策或控制相關的欄位,並記錄脫敏和保留規則。
失敗演練與演進計畫
演練一:搜尋索引遺失
刪除熱索引,從不可變段重建。透過事件數和清單驗證查詢完整性,同時保持接入繼續運行。
演練二:簽名密鑰洩露
輪換密鑰,保留舊驗證材料並標記受影響清單。確認調查人員能區分密鑰輪換和段被竄改。
演練三:租戶熱點
壓測單一租戶,驗證分區隔離、租戶配額和公平性。其他租戶仍應滿足持久性和查詢 SLO。
常見錯誤與追問
錯誤一:把普通資料庫表稱為不可變
資料庫權限能降低風險,卻不等於獨立證據。要說明追加寫入、受限刪除和外部驗證。
錯誤二:持久化前確認成功
行程內存體佇列會隨行程消失。明確回傳給呼叫方的實際持久性節點。
錯誤三:混用除錯日誌和稽核證據
除錯日誌噪聲大且常可修改。稽核事件應有獨立 Schema、保留、存取策略和完整性路徑。
錯誤四:忽略讀取和匯出
管理員下載敏感歷史本身就是可稽核動作。記錄對稽核系統的存取。
錯誤五:不說明刪除範圍
保留與隱私可能衝突。說清法律保全、脫敏、墓碑、複製副本、索引和備份如何處理。
錯誤六:聲稱雜湊證明事實真實
雜湊只能證明與記錄鏈一致,不能證明最初聲明準確。保護發出者身份,並明確這個邊界。