共用方式為


Databricks 如何強制執行使用者隔離?

本頁說明 Azure Databricks 如何使用 Lakeguard 在共用計算環境中強制執行使用者隔離,以及在專用計算中強制執行精細的存取控制。

什麼是 Lakeguard?

Lakeguard 是 Databricks 上的一組技術,可強制執行程式代碼隔離和資料篩選,讓多個使用者可以安全且符合成本效益地共用相同的計算資源,並在計算上使用精細的存取控制來存取資料,從而提供特殊許可權的機器存取權。

Lakeguard 如何運作?

在標準傳統計算、無伺服器計算和 SQL 倉儲等共用計算環境中,Lakeguard 會將使用者程式碼與 Spark 引擎和其他使用者隔離。 這種設計使許多使用者能夠共用相同的計算資源,同時在使用者、Spark 驅動程式和執行程式之間保持嚴格的界限。

傳統 Spark 架構

下圖顯示在傳統 Spark 架構中,使用者應用程式如何共用具有基礎機器特殊許可權存取權的 JVM。

傳統 Spark 架構

Lakeguard 架構

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。