特定のワークスペースにカタログ アクセスを制限する
この記事では、ワークスペースとカタログのバインドについて紹介し、Unity Catalog のカタログを Azure Databricks ワークスペースにバインドして、Azure Databricks アカウント内の他のワークスペースがアクセスできないようにする方法について説明します。
ワークスペースとカタログのバインドとは
ワークスペースを使用してユーザー データへのアクセスを分離する場合は、アカウントでカタログ アクセスを特定のワークスペースに制限できます (ワークスペースとカタログのバインドとも呼ばれます)。 既定では、カタログは現在のメタストアにアタッチされているすべてのワークスペースと共有します。
この既定に対する例外が、すべての新しいワークスペースに対して自動的に作成されるワークスペース カタログです。 他のワークスペースにアクセス権を付与しない限り、このワークスペース カタログは自分のワークスペースにのみバインドされます。 このカタログをバインド解除する場合のアクセス許可の割り当てに関する重要な情報については、「ワークスペースからカタログをバインド解除する」を参照してください。
ワークスペースからカタログへの読み書きアクセスを許可するか、読み取り専用アクセスを指定できます。 読み取り専用を指定すると、そのワークスペースからそのカタログへのすべての書き込み操作がブロックされます。
カタログを特定のワークスペースにバインドする一般的なユース ケースには次のものがあります。
- ユーザーが運用ワークスペース環境からのみ運用データにアクセスできるようにする。
- ユーザーが専用ワークスペースからのみ機密データを処理できるようにする。
- 開発とテストを可能にするため、開発者ワークスペースから運用環境データへの読み取り専用アクセスをユーザーに与えます。
Note
外部の場所とストレージの資格情報を特定のワークスペースにバインドし、外部の場所でデータにアクセスできる機能を、そのワークスペースの特権ユーザーに制限することもできます。 「(省略可能) 特定のワークスペースに外部の場所を割り当てる」と「(省略可能) ストレージ資格情報を特定のワークスペースに割り当てる」を参照してください。
ワークスペースとカタログのバインドの例
運用環境と開発環境の分離の例を見てみます。 運用データ カタログには運用ワークスペースからのみアクセスできることを指定した場合、この指定が、ユーザーに付与される個別のどの許可よりも優先されます。
この図では、prod_catalog
が 2 つの運用ワークスペースにバインドされています。 my_table
という名前の prod_catalog
内のテーブルへのアクセス権が (GRANT SELECT ON my_table TO <user>
を使用して) ユーザーに付与されているとします。 ユーザーが Dev ワークスペースで my_table
にアクセスしようとすると、エラー メッセージが表示されます。 ユーザーは、Prod ETL および Prod Analytics ワークスペースからのみ my_table
にアクセスできます。
ワークスペースとカタログのバインドは、プラットフォームのすべての領域で順守されます。 たとえば、情報スキーマに対するクエリを実行すると、クエリを発行するワークスペースでアクセスできるカタログのみが表示されます。 同様に、データ系列と検索 UI でも、(バインドを使用するか既定によるかに関係なく) ワークスペースに割り当てられているカタログのみが表示されます。
カタログを 1 つ以上のワークスペースにバインドする
特定のワークスペースにカタログを割り当てるには、カタログ エクスプローラーまたは Databricks CLI を使用できます。
必要なアクセス許可: メタストア管理者またはカタログ所有者。
Note
カタログが現在のワークスペースに割り当てられているかどうかに関係なく、メタストア管理者はカタログ エクスプローラーを使用してメタストア内のすべてのカタログを表示できます。また、カタログ所有者は、メタストア内で自分が所有しているすべてのカタログを表示できます。 ワークスペースに割り当てられていないカタログはグレー表示され、子オブジェクトは表示されずクエリも実行できません。
カタログ エクスプローラー
メタストアにリンクされているワークスペースにログインします。
[カタログ] をクリックします。
[カタログ] ウィンドウで、左側のカタログ名をクリックします。
メインのカタログ エクスプローラー ペインには、既定で [カタログ] 一覧が表示されます。 そこでカタログを選択することもできます。
[ワークスペース] タブ で、[All workspaces have access] (すべてのワークスペースにアクセス権がある) チェック ボックスをオフにします。
カタログが既に 1 つ以上のワークスペースにバインドされている場合、このチェック ボックスは既にオフになっています。
[Assign to workspaces] (ワークスペースに割り当てる) をクリックし、割り当てるワークスペースを入力または検索します。
(省略可能) ワークスペース アクセスを読み取り専用に制限します。
[アクセス レベルの管理] メニューで [読み取り専用にアクセスを変更する] を選択します。
この選択はいつでも、カタログを編集し、[読み取りと書き込みにアクセスを変更する] を選択することで元に戻すことができます。
アクセスを取り消すには、[ワークスペース] タブに移動し、ワークスペースを選択して [失効] をクリックします。
CLI
Databricks CLI コマンド グループは 2 つあり、カタログをワークスペースに割り当てるには 2 つの手順が必要です。
次の例では、<profile-name>
を Azure Databricks 認証構成プロファイルの名前に置き換えてください。 これには、個人用アクセス トークンを生成したワークスペースのワークスペース インスタンス名とワークスペース ID に加えて、個人用アクセス トークンの値が含まれている必要があります。 「Azure Databricks 個人用アクセス トークン認証」をご覧ください。
catalogs
コマンド グループのupdate
コマンドを使用して、カタログのisolation mode
をISOLATED
に設定します。databricks catalogs update <my-catalog> \ --isolation-mode ISOLATED \ --profile <profile-name>
既定の
isolation-mode
は、メタストアにアタッチされているすべてのワークスペースでOPEN
です。workspace-bindings
コマンド グループのupdate-bindings
コマンドを使用して、ワークスペースをカタログに割り当てます。databricks workspace-bindings update-bindings catalog <my-catalog> \ --json '{ "add": [{"workspace_id": <workspace-id>, "binding_type": <binding-type>}...], "remove": [{"workspace_id": <workspace-id>, "binding_type": "<binding-type>}...] }' --profile <profile-name>
"add"
プロパティと"remove"
プロパティを使用し、ワークスペース バインドを追加するか、削除します。<binding-type>
は、“BINDING_TYPE_READ_WRITE”
(既定値) または“BINDING_TYPE_READ_ONLY”
のどちらかにできます。
カタログのすべてのワークスペース割り当てを一覧表示するには、workspace-bindings
コマンド グループの get-bindings
コマンドを使用します。
databricks workspace-bindings get-bindings catalog <my-catalog> \
--profile <profile-name>
ワークスペースからカタログをバインド解除する
カタログ エクスプローラーまたは workspace-bindings
CLI コマンド グループを使用してカタログへのワークスペース アクセスを取り消す手順は、「カタログを 1 つ以上のワークスペースにバインドする」に含まれています。
重要
Unity Catalog に対してワークスペースが自動的に有効になり、"ワークスペース カタログ" がある場合、ワークスペース管理者はそのカタログを所有し、そのワークスペース内でのみ、そのカタログに対するすべてのアクセス許可を持ちます。 そのカタログをバインド解除するか、他のカタログにバインドする場合は、ワークスペース管理者グループはワークスペースローカル グループであるため、ワークスペース管理者グループのメンバーに個別のユーザーとして、またはアカウントレベルのグループを使って、必要なアクセス許可を手動で付与する必要があります。 アカウント グループとワークスペースローカル グループの詳細については、「アカウント グループとワークスペースローカル グループの違い」を参照してください。