グループへのコンピュート リソースの割り当て
この記事では、 専用 アクセス モードを使用して、グループに割り当てられたコンピュート リソースを作成する方法について説明します。
専用グループ アクセス モードを使用すると、ユーザーは標準アクセス モード クラスタリングの運用効率を得ると同時に、 Databricks Runtime for ML、 Spark 機械学習ライブラリ (MLlib)、 RDD APIs、R など、標準アクセス モードでサポートされていない言語とワークロードを安全にサポートできます。
必要条件
専用グループアクセスモードを使用するには:
- ワークスペースは Unity Catalog に対して有効になっている必要があります。
- Databricks Runtime 15.4 以降を使用する必要があります。
- 割り当てられたグループは、グループ クラスターで使用されるノートブック、 ML エクスペリメント、およびその他のワークスペース アーティファクトを保持できるワークスペース フォルダーに対する
CAN MANAGE
アクセス許可を持っている必要があります。
専用アクセスモードとは何ですか?
専用アクセスモードは、シングルユーザーアクセスモードの最新バージョンです。 専用アクセスを使用すると、コンピュート リソースを 1 人のユーザーまたはグループに割り当てて、割り当てられたユーザーのみがコンピュート リソースを使用できるようになります。
ユーザーがグループ専用のコンピュート リソース (a グループ クラスター) に接続している場合、ユーザーのアクセス許可は自動的にグループのアクセス許可にダウンスコープされ、ユーザーはリソースをグループの他のメンバーと安全に共有できます。
グループ専用のコンピュートリソースを作成する
- Databricksワークスペースで、 コンピュート に移動し、 コンピュートを作成 をクリックします。
- 詳細設定 セクションを展開します。
- アクセス モード で 手動 をクリックし、ドロップダウン メニューから 専用 (旧称: シングルユーザー) を選択します。
- シングル ユーザーまたはグループ フィールドで、このリソースに割り当てるグループを選択します。
- その他の必要なコンピュート設定を構成し、 作成 をクリックします。
グループ クラスターを管理するためのベスト プラクティス
グループ クラスターを使用する場合、ユーザーのアクセス許可はグループに限定されるため、 Databricks グループ クラスターで使用する予定のグループごとに/Workspace/Groups/<groupName>
フォルダーを作成することをお勧めします。 次に、フォルダに対する CAN MANAGE
権限をグループに割り当てます。 これにより、グループは権限エラーを回避できます。 グループのすべてのノートブックとワークスペース資産は、グループ フォルダーで管理する必要があります。
また、グループ クラスターで実行するには、次のワークロードを変更する必要があります。
- MLflow: ノートブックをグループ フォルダーから実行するか、
mlflow.set_tracking_uri("/Workspace/Groups/<groupName>")
を実行してください。 - AutoML: AutoML の実行で省略可能な
experiment_dir
パラメーターを“/Workspace/Groups/<groupName>”
に設定します。 dbutils.notebook.run
: グループに、実行中のノートブックに対するREAD
権限があることを確認します。
グループ クラスタリングでのアクセス許可の動作
グループ クラスタリングで実行されるすべてのコマンド、クエリ、およびその他のアクションは、個々のユーザーではなく、グループに割り当てられたアクセス許可を使用します。
すべてのグループ メンバーが Spark APIs および共有コンピュート環境へのフル アクセスを持っているため、個々のユーザー権限を強制することはできません。 ユーザーベースのアクセス許可が適用された場合、1 つのメンバーは制限されたデータをクエリでき、アクセス権を持たない別のメンバーは引き続き共有環境を通じて結果を取得できます。したがって、グループのメンバーであるユーザーではなく、グループ自体が、アクションを正常に実行するために必要なアクセス許可を持っている必要があります。
たとえば、グループには、テーブルのクエリ、シークレットスコープまたはシークレットへのアクセス、 Unity Catalog 接続認証情報の使用、 Git フォルダへのアクセス、またはワークスペースオブジェクトの作成を行うための明示的なアクセス許可が必要です。
グループ権限の例
グループ クラスターを使用してデータ オブジェクトを作成すると、そのグループはオブジェクトの所有者として割り当てられます。
たとえば、ノートブックがグループ クラスターにアタッチされていて、次のコマンドを実行するとします。
use catalog main;
create schema group_cluster_group_schema;
次に、次のクエリを実行して、スキーマの所有者を確認します。
describe schema group_cluster_group_schema;
グループ専用コンピュートのアクティビティの監査
グループ クラスターがワークロードを実行する場合、次の 2 つの主要な ID が関係します。
- グループ クラスターでワークロードを実行しているユーザー
- 実際のワークロードアクションの実行にアクセス許可が使用されるグループ
監査ログのシステムテーブルは、これらの ID を次のパラメーターで記録します。
identity_metadata.run_by
: アクションを実行する認証ユーザーidentity_metadata.run_as
: アクションに権限が使用される認証グループ。
次のクエリ例では、グループ クラスターで実行されたアクションの ID メタデータをプルアップします。
select action_name, event_time, user_identity.email, identity_metadata
from system.access.audit
where user_identity.email = "uc-group-cluster-group" AND service_name = "unityCatalog"
order by event_time desc limit 100;
監査ログのシステムテーブル リファレンスで、クエリのその他の例を参照してください。 監査ログシステムテーブルリファレンスを参照してください。
既知の問題
-
グループ クラスターから作成されたワークスペース ファイルとフォルダは、割り当てられたオブジェクト所有者
Unknown
になります。 これにより、これらのオブジェクトに対する後続の操作 (read
、write
、delete
など) は、アクセス許可が拒否されたエラーで失敗します。 -
コンピュートスコープの initスクリプトは、GKE にコンピュート リソースをデプロイするワークスペースではサポートされていません。 GCE コンピュート deployment のパーミッションを更新して、グループ クラスタリングと共に initスクリプトを使用する必要があります。 「GCE コンピュート デプロイのアクセス許可を更新する」を参照してください。
制限
専用グループアクセスには、次の制限があります。
- リネージ システムテーブルは、グループ クラスターで実行されているワークロードの
identity_metadata.run_as
(認証グループ) またはidentity_metadata.run_by
(認証ユーザー) の ID を記録しません。 - 顧客ストレージに配信される監査ログには、グループ クラスターで実行されているワークロードの
identity_metadata.run_as
(認証グループ) またはidentity_metadata.run_by
(認証ユーザー) の ID は記録されません。 ID メタデータを表示するには、system.access.audit
テーブルを使用する必要があります。 - グループ クラスターにアタッチされている場合、Catalog Explorer は、グループのみがアクセスできるアセットでフィルタリングされません。
- グループ メンバーではないグループ マネージャーは、グループ クラスターを作成、編集、または削除できません。 ワークスペースの管理者とグループメンバーのみがこれを行うことができます。
- グループの名前を変更した場合は、グループ名を参照するコンピュート ポリシーを手動で更新する必要があります。
- グループ クラスターは、ACL が無効になっているワークスペース (isWorkspaceAclsEnabled == false) では、ワークスペース ACL が無効になっている場合、セキュリティとデータ アクセス制御が本質的に欠如しているため、サポートされていません。
- 現在、
%run
コマンドは、グループ クラスターで実行されるときに、グループの権限ではなくユーザーの権限を使用します。dbutils.notebook.run()
などの代替手段は、グループの権限を正しく使用します。 is_member(<group>)
関数は、グループ クラスタリング自体のメンバーではないため、グループ クラスタリングで呼び出されたときにfalse
を返します。グループ クラスタリング モードと他のアクセス モードの両方でメンバーシップを正しく確認するには、is_member(<group>) OR current_user() == <group>
.