Databricks はどのようにしてユーザーの分離を強制しますか?
このページでは、 Databricks が Lakeguard を使用して、共有コンピュート環境でユーザー分離を強制し、専用コンピュートできめ細かなアクセス制御を適用する方法について説明します。
レイクガードとは?
Lakeguard は、コードの分離とデータ フィルタリングを強制する Databricks 上のバックグラウンド サービスであるため、きめ細かなアクセス制御が実施されている場合でも、複数のユーザーが同じリソースを安全かつコスト効率よく共有できます。
Lakeguard はどのように機能しますか?
標準のクラシックコンピュート、サーバレスコンピュート、 SQLウェアハウスなどの共有コンピュート環境では、Lakeguard はユーザーコードを Spark エンジンや他のユーザーから分離します。 この設計により、多くのユーザーが同じコンピュート リソースを共有しながら、ユーザー、 Spark ドライバー、エグゼキューターの間の厳密な境界を保つことができます。
クラシック Spark アーキテクチャ
次の図は、従来の Spark アーキテクチャで、ユーザーアプリケーションが基盤となるマシンへの特権アクセスを持つ JVM を共有する方法を示しています。
Lakeguard アーキテクチャ
Lakeguard は、セキュリティで保護されたコンテナーを使用してすべてのユーザー コードを分離します。これにより、複数のワークロードを同じコンピュート リソースで実行しながら、ユーザー間の厳密な分離を維持します。
Spark クライアントの分離
Lakeguard は、次の 2 つの主要なコンポーネントを使用して、クライアント アプリケーションを Spark ドライバーから分離し、クライアント アプリケーションを相互に分離します。
-
Spark Connect : Lakeguard は、Spark Connect (Apache Spark 3.4 で導入) を使用して、クライアント アプリケーションをドライバーから切り離します。クライアントアプリケーションとドライバーは、同じJVMまたはクラスパスを共有しなくなりました。この分離により、不正なデータアクセスが防止されます。また、この設計により、クエリに行レベルまたは列レベルのフィルターが含まれている場合に、オーバーフェッチによって生じるデータにユーザーがアクセスできないようにします。
-
コンテナサンドボックス: 各クライアントアプリケーションは、独自の分離されたコンテナ環境で実行されます。これにより、ユーザーコードが他のユーザーのデータや基になるマシンにアクセスできなくなります。サンドボックスでは、コンテナベースの分離技術を使用して、ユーザー間の安全な境界を作成します。
UDF 分離
デフォルトでは、 Spark エグゼキューター UDF を分離しません。 この分離の欠如により、UDF はファイルを書き込んだり、基盤となるマシンにアクセスしたりする可能性があります。
Lakeguard は、次の方法で UDF を含むユーザー定義コードを Spark エグゼキューター で分離します。
- サンドボックス エグゼキューター上の実行環境 Spark .
- エグレスネットワークトラフィックをUDFから分離して、不正な外部アクセスを防止します。
- クライアント環境を UDF サンドボックスにレプリケートして、ユーザーが必要なライブラリにアクセスできるようにします。
この分離は、標準コンピュートの UDF と、サーバレス コンピュートと SQLウェアハウスのPython UDF に適用されます。