本頁說明 Azure Databricks 如何使用 Lakeguard 在共用計算環境中強制執行使用者隔離,以及在專用計算中強制執行精細的存取控制。
什麼是 Lakeguard?
Lakeguard 是 Databricks 上的一組技術,可強制執行程式代碼隔離和資料篩選,讓多個使用者可以安全且符合成本效益地共用相同的計算資源,並在計算上使用精細的存取控制來存取資料,從而提供特殊許可權的機器存取權。
Lakeguard 如何運作?
在標準傳統計算、無伺服器計算和 SQL 倉儲等共用計算環境中,Lakeguard 會將使用者程式碼與 Spark 引擎和其他使用者隔離。 這種設計使許多使用者能夠共用相同的計算資源,同時在使用者、Spark 驅動程式和執行程式之間保持嚴格的界限。 由於有這種隔離,標準運算能原生強制執行細緻的存取控制,例如列過濾器和欄遮罩。
專用運算採用傳統的 Spark 架構,使用者程式碼未與引擎隔離,因此無法在不造成過度擷取風險的情況下實施細粒度存取控制。 相反地,專用運算會將資料篩選工作交由您工作空間的無伺服器運算處理;該運算受 Lakeguard 隔離保護,並代為執行篩選。 這就是為什麼在專用運算上實作細粒度存取控制時,您的工作區必須啟用無伺服器運算。 請參閱 專用計算的細微訪問控制。
傳統 Spark 架構
下圖顯示在傳統 Spark 架構中,使用者應用程式如何共用具有基礎機器特殊許可權存取權的 JVM。
Lakeguard 架構
Lakeguard 使用安全容器隔離所有使用者程式碼。 這可讓多個工作負載在相同的計算資源上執行,同時保持使用者之間的嚴格隔離。
Spark 用戶端隔離
Lakeguard 使用兩個關鍵元件將用戶端應用程式與 Spark 驅動程式隔離,並彼此隔離:
Spark Connect:Lakeguard 使用 Spark Connect (隨 Apache Spark 3.4 引進) 將用戶端應用程式與驅動程式分離。 用戶端應用程式和驅動程式不再共用相同的 JVM 或類別路徑。 這種分離可以防止未經授權的資料存取。 此設計也可防止使用者在查詢包含資料列層級或資料行層級篩選器時,存取因過度擷取而取得的資料。
備註
Spark Connect 會將分析和名稱解析延遲到執行時間,這可能會改變程式碼的行為。 請參閱 比較 Spark Connect 與 Spark Classic。
容器沙箱:每個用戶端應用程式都在自己的隔離容器環境中執行。 這可防止使用者程式碼存取其他使用者的資料或基礎電腦。 沙箱機制採用基於容器的隔離技術,在使用者之間建立安全邊界。
UDF 隔離機制
根據預設,Spark 執行程式不會隔離 UDF。 缺乏隔離可能會允許 UDF 寫入檔案或存取基礎機器。
Lakeguard 會藉由下列方式在 Spark 執行程式上隔離使用者定義的程式碼,包括 UDF:
- 在 Spark 執行程式上沙箱化執行環境。
- 將輸出網路流量與 UDF 隔離,以防止未經授權的外部存取。
- 將用戶端環境複製到 UDF 沙箱中,以便使用者可以存取所需的程式庫。
此隔離適用於標準計算上的 UDF,以及無伺服器計算和 SQL 倉儲上的 Python UDF。