本頁說明 Azure Databricks 如何使用 Lakeguard 在共用計算環境中強制執行使用者隔離,以及在專用計算中強制執行精細的存取控制。
什麼是 Lakeguard?
Lakeguard 是 Databricks 上的一組技術,可強制執行程式代碼隔離和資料篩選,讓多個使用者可以安全且符合成本效益地共用相同的計算資源,並在計算上使用精細的存取控制來存取資料,從而提供特殊許可權的機器存取權。
Lakeguard 如何運作?
在標準傳統計算、無伺服器計算和 SQL 倉儲等共用計算環境中,Lakeguard 會將使用者程式碼與 Spark 引擎和其他使用者隔離。 這種設計使許多使用者能夠共用相同的計算資源,同時在使用者、Spark 驅動程式和執行程式之間保持嚴格的界限。
傳統 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。