資料工程面試:如何設計 Parquet Modular Encryption 的金鑰與讀取邊界?
題干與適用場景
資料湖中的 Parquet 檔案包含公開欄位與敏感欄位。團隊希望加密敏感資料及中繼資料,同時繼續利用欄投影、謂詞下推與壓縮。請設計 footer 加密、欄位金鑰、金鑰託管、讀取授權、舊讀者相容與輪換復原。
本題討論 Parquet Modular Encryption 規範能力,不假設所有查詢引擎或語言繫結都支援相同的金鑰設定。
面試官考察點
- 能否區分加密 footer、加密欄位與只加密頁面的保護範圍。
- 能否把 KEK、DEK、金鑰中繼資料與 KMS 權限分層,而不是把金鑰寫進檔案。
- 能否理解加密 footer 對 schema、統計資訊、謂詞下推與舊讀者的影響。
- 能否設計金鑰輪換、撤銷、重寫與無法解密時的可觀測錯誤。
回答前需要釐清的問題
- 哪些欄位屬於敏感資料,是否還要隱藏 schema、行組與統計資訊?
- 查詢引擎需要哪些欄位,是否支援欄位級金鑰與 footer 解密?
- KMS 是集中服務、雲端 HSM,還是由呼叫方注入金鑰?
- 檔案是否跨帳戶、跨區域複製,備份如何取得解密權限?
- 輪換目標是新寫檔案、歷史重寫,還是立即撤銷舊金鑰?
30 秒回答框架
「Parquet 模組化加密可以保護檔案資料與中繼資料,並保留欄式功能,但 footer 加密會讓沒有金鑰的讀者無法取得 schema 與行組資訊。我要把 KMS 中的主金鑰與檔案或欄位使用的金鑰分離,授權讀取者按欄位取得金鑰;舊讀者遇到加密 footer 應明確失敗,而不是把檔案當損壞。輪換透過新寫檔案與受控重寫完成,記錄金鑰版本、檔案 ID 與失敗原因,並以能力矩陣驗證查詢引擎是否仍能做謂詞下推。」
分步驟深入解答
1. 選擇保護範圍
加密 footer 會保護 FileMetaData 及其中的行組、欄位塊等中繼資料;欄位加密可針對敏感欄位使用不同金鑰。若 footer 保持明文,讀者可能看到 schema 或統計資訊,即使無法讀取欄位頁面。先按威脅模型決定是否需要隱藏中繼資料。
2. 分離金鑰職責
KMS 或 HSM 保存金鑰加密金鑰,檔案寫入時產生或取得資料加密金鑰,並把受保護的 key metadata 寫入檔案。讀取器由授權服務解析中繼資料,向 KMS 請求解包權限;檔案本身不應攜帶可直接解密的主金鑰。
3. 評估查詢能力
Apache Parquet 文件說明模組化加密可在加密與驗證資料、中繼資料的同時保留欄投影、謂詞下推、編碼與壓縮能力,但實際查詢引擎仍要先取得相應金鑰。加密 footer 可能阻止無金鑰掃描器讀取 schema 與統計資訊,測試必須覆蓋只讀公開欄位、敏感欄位過濾與混合投影。
KMS KEK -> wraps file/column DEK -> protected key metadata
reader authorization -> unwrap allowed DEK -> decrypt footer/pages4. 處理檔案識別與舊讀者
加密 footer 檔案使用不同的 magic bytes,Apache Parquet 文件列出 PARE,明文檔案使用 PAR1。舊讀者可能把加密檔案視為不支援的格式;平台應在能力偵測或登錄表中提前標註,而不是等查詢中途才回報模糊的損壞錯誤。
5. 設計輪換與撤銷
輪換優先影響新檔案:新 DEK 由新 KEK 包裝,舊檔案依保留策略逐步重寫。需要立即撤銷時,KMS 拒絕解包會使讀取失敗;平台必須保留待重寫檔案清單、金鑰版本與復原流程。重寫應使用暫存檔與原子替換,避免產生半加密檔案。
6. 觀測和故障分層
記錄檔案 ID、footer/欄位金鑰版本、授權主體、KMS 延遲、解密失敗類型與查詢中的欄位集合,禁止記錄明文金鑰或敏感值。區分權限拒絕、金鑰不存在、驗證標籤失敗、舊讀者不支援與檔案損壞,分別告警與處理。
高品質示範回答
「我先按威脅模型決定是否隱藏 footer。模組化加密可保護 footer、欄位與頁面;footer 加密會讓無金鑰讀者看不到 schema 與統計資訊,而欄位金鑰可限制敏感欄位。KMS 保存 KEK,檔案或欄位 DEK 以受保護中繼資料關聯,讀取者透過授權服務解包。能力矩陣要驗證公開欄位投影、敏感欄位過濾與謂詞下推。加密檔案的 PARE 與明文 PAR1 讓平台可提前識別舊讀者風險。輪換採用新寫檔案、批量重寫與原子替換,記錄金鑰版本與失敗類型,撤銷時走 KMS 拒絕並保留復原清單。」
常見錯誤
- 把 KEK 直接寫進檔案 → 拿到檔案即可解密 → 只存受保護 key metadata。
- 只加密欄位不評估 footer → schema 和統計資訊仍可能洩露 → 按威脅模型選擇 footer 模式。
- 假設所有引擎支援欄位級金鑰 → 生產查詢才發現能力缺口 → 建立引擎與繫結版本矩陣。
- 輪換時原地覆蓋檔案 → 中斷會留下不可讀或半完成檔案 → 暫存寫入後原子替換。
- 把驗證失敗當壞檔案 → 排障方向錯誤 → 區分 KMS、授權、驗證標籤與格式錯誤。
追問及應對
加密 footer 會不會讓謂詞下推失效?
不必然。取得 footer 與所需欄位金鑰後,格式仍可保留欄式讀取與謂詞下推;沒有 footer 金鑰的掃描器無法讀取統計資訊,實際能力取決於查詢引擎的加密支援。
為什麼需要欄位級金鑰?
不同主體可能只應讀取部分欄位。欄位級金鑰把授權邊界從整個檔案細化到敏感欄位,減少授予公開欄位讀取權時的金鑰暴露範圍。
舊讀者遇到 PARE 應如何處理?
應明確回報不支援模組化加密,並指導使用相容讀者或解密重寫流程,不能把 PARE 檔案靜默當成損壞的 PAR1 檔案。