題目與範圍
設計多租戶稽核日誌服務,記錄登入、權限變更、資料存取和設定更新等安全與合規動作。調查人員需要可搜尋歷史和可驗證匯出,同時日誌故障不能讓一般業務悄悄遺失關鍵證據。
先定義完整性承諾。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)第四步:分區與複製
按租戶和時間分區,用雜湊或租戶鍵分散熱點租戶。按持久性目標跨故障域複製後再確認。保留租戶內或聚合內順序即可,除非確有必要,不要承諾全域順序。
第五步:建構熱搜尋與冷保留
近期事件進入調查索引,舊段壓縮到不可變物件儲存。索引必須能從日誌重建。保留任務遵守租戶策略和法律保全;刪除可以留下可稽核的策略記錄,但不保留受保護載荷。
第六步:執行存取與匯出控制
每次查詢按租戶、角色、用途和時間範圍授權。查詢和匯出本身也記錄為稽核事件。匯出生成簽名清單,包含篩選條件、事件數、段雜湊和時間戳,接收方可驗證完整性。
第七步:定義故障和過載行為
選擇有界本地緩衝、背壓和關鍵事件策略。非關鍵遙測可以採樣或延遲;安全事件則拒絕原始變更,或路由到隔離應急通道。只有易失記憶體暫存時,不能向呼叫方報告已接收。
第八步:運作信任邊界
監控接入延遲、持久確認耗時、消費者延遲、拒絕事件、序列缺口、雜湊失敗、索引新鮮度、匯出耗時和保留錯誤。限制密鑰存取、輪換簽名密鑰、測試復原和驗證,並記錄「稽核系統的稽核」。
高品質示範回答
「我會把稽核日誌視為獨立證據系統。業務服務產生帶事件 ID、租戶、操作者、驗證上下文、動作、目標、結果、請求 ID 與 Schema 版本的規範事件;事件進入跨故障域複寫的持久日誌後才確認接收,搜尋索引與匯出由非同步消費者建立,索引遺失時可從證據日誌重建。
證據日誌按租戶與時間分段,保存前序雜湊並週期性簽章或錨定。查詢按租戶、角色、用途與時間範圍授權,查詢與匯出本身也寫入稽核;匯出包含篩選條件、事件數、段雜湊與簽章清單。安全事件在接入故障時進入有界應急通道或阻止原始高風險操作,不能只放在行程記憶體後就回報成功。維運上監控接入延遲、序號缺口、雜湊失敗、索引新鮮度、拒絕事件與保留錯誤,並定期演練索引重建、金鑰輪替和熱點租戶隔離。這個服務證明記錄在接收後是否保持完整,上游事件真實性仍依賴身分、授權與業務交易。」
常見錯誤
- 在事件持久化前回報成功,行程結束後留下無聲缺口。
- 把可修改的一般資料庫表或除錯日誌直接當成稽核證據。
- 讓查詢索引成為唯一副本,索引損壞後無法重建。
- 忽略查詢、匯出、保留策略變更與金鑰輪替本身也要稽核。
- 聲稱雜湊鏈可以證明上游事件內容真實。
追問與應對
搜尋索引全部遺失怎麼辦?
保持證據日誌繼續接收,從不可變分段重建索引,並用事件數、序號與簽章清單驗證重建範圍。
稽核接入不可用時,業務是否繼續?
按事件關鍵性處理。一般低風險動作可以進入有界持久緩衝;無法可靠記錄的高風險安全動作應拒絕或進入隔離應急通道,不能靜默放行。
如何避免熱點租戶拖垮其他租戶?
按租戶與時間分區,設定接入、查詢與匯出配額,隔離消費者資源;壓力測試時同時驗證其他租戶的持久性與查詢服務等級目標。
如何處理隱私刪除與稽核保留衝突?
按法律保全與租戶策略區分欄位,優先保存去識別摘要或受控引用;執行刪除時同步處理索引、物件分段與備份,並保留可驗證的策略執行記錄。