特定のワークスペースへのカタログアクセスを制限する

この記事では、ワークスペースカタログバインディングを紹介し、 Unity CatalogカタログをDatabricksスペースにバインドして、 Databricks内の他のワークスペースがアクセスできないようにする方法について説明します。

ワークスペースカタログバインディングとは何ですか?

ワークスペースを使用してユーザー データ アクセスを分離する場合、カタログ アクセスをアカウント内の特定のワークスペースに制限できます (ワークスペース カタログ バインディングとも呼ばれます)。 デフォルトでは、現在のメタストアに接続されているすべてのワークスペースとカタログを共有します。

このデフォルト の例外は、すべての新しいワークスペースに対して自動的に作成されるワークスペース カタログです。 このワークスペース カタログは、他のワークスペースにアクセスを許可しない限り、自分のワークスペースにのみバインドされます。 このカタログをバインド解除する場合の権限の割り当てに関する重要な情報については、 「ワークスペースからカタログをバインド解除する」を参照してください。

ワークスペースからカタログへの読み取りおよび書き込みアクセスを許可することも、読み取り専用アクセスを指定することもできます。 読み取り専用を指定すると、そのワークスペースからそのカタログへのすべての書き込み操作がブロックされます。

カタログを特定のワークスペースにバインドする一般的な使用例は次のとおりです。

  • ユーザーが本番運用ワークスペース環境からのみ本番運用データにアクセスできるようにします。

  • ユーザーが専用のワークスペースからのみ機密データを処理できるようにします。

  • 開発とテストを可能にするために、開発者ワークスペースから本番運用データへの読み取り専用アクセス権をユーザーに付与します。

注:

また、外部ロケーションとストレージの認証情報を特定のワークスペースにバインドして、外部ロケーションのデータにアクセスする機能をそれらのワークスペースの特権ユーザーに制限することもできます。 「(オプション) 特定のワークスペースに外部ロケーションを割り当てる」および「(オプション) 特定のワークスペースにストレージ資格情報を割り当てる」を参照してください。

ワークスペースとカタログのバインディングの例

本番運用と開発の分離の例を見てみましょう。 実稼働データカタログに実稼働ワークスペースからのみアクセスできるように指定した場合、これはユーザーに発行される個々の許可よりも優先されます。

カタログとワークスペースのバインディング図

この図では、 prod_catalog 2 つの本番運用ワークスペースにバインドされています。 ユーザーが my_table というprod_catalogのテーブルへのアクセス権を付与されているとします (GRANT SELECT ON my_table TO <user>を使用)。ユーザーが Dev ワークスペースでmy_tableにアクセスしようとすると、エラー メッセージが表示されます。 ユーザーは、Prod ETLおよび Prod アナリティクス ワークスペースからのみ my_table にアクセスできます。

ワークスペースとカタログのバインディングは、プラットフォームのすべての領域で尊重されます。 たとえば、情報スキーマをクエリすると、クエリを発行したワークスペースでアクセス可能なカタログのみが表示されます。 同様に、データ リネージと検索 UI には、ワークスペースに割り当てられているカタログのみが表示されます (バインディングを使用するか、デフォルトによって割り当てられるかに関係なく)。

カタログを 1 つ以上のワークスペースにバインドする

特定のワークスペースにカタログを割り当てるには、カタログ エクスプローラーまたは Databricks CLI を使用できます。

必要なアクセス許可: メタストア管理者またはカタログ所有者。

注:

メタストア管理者は、カタログ エクスプローラーを使用してメタストア内のすべてのカタログを表示できます。また、カタログ所有者は、カタログが現在のワークスペースに割り当てられているかどうかに関係なく、メタストア内で所有するすべてのカタログを表示できます。 ワークスペースに割り当てられていないカタログはグレー表示され、子オブジェクトは表示されず、クエリも実行できません。

  1. メタストアにリンクされているワークスペースにログインします。

  2. [カタログ アイコン カタログ ] をクリックします。

  3. [ カタログ ] ウィンドウの左側で、カタログ名をクリックします。

    メインのカタログ エクスプローラー ペインには、デフォルトでカタログリストが表示されます。 そこでカタログを選択することもできます。

  4. ワークスペースタブで、 [すべてのワークスペースにアクセス権がある]チェックボックスをオフにします。

    カタログがすでに 1 つ以上のワークスペースにバインドされている場合、このチェックボックスはすでにオフになっています。

  5. 「ワークスペースへの割り当て」をクリックし、割り当てるワークスペースを入力または検索します。

  6. (オプション) ワークスペースへのアクセスを読み取り専用に制限します。

    [ アクセス レベルの管理 ] メニューで、[ アクセスを読み取り専用に変更] を選択します。

    この選択は、カタログを編集し、[ 読み取りと書き込みへのアクセスの変更] を選択することで、いつでも元に戻すことができます。

アクセスを取り消すには、ワークスペースタブに移動し、ワークスペースを選択して、 「取り消し」をクリックします。

ワークスペースにカタログを割り当てるには、2 つのDatabricks CLIコマンド グループと 2 つのステップが必要です。

次の例では、 <profile-name> Databricks 認証構成プロファイルの名前に置き換えます。 個人アクセストークンを生成したワークスペースのワークスペースインスタンス名とワークスペース ID に加えて、個人アクセストークンの値も含める必要があります。 Databricks個人アクセストークン認証を参照してください。

  1. catalogsコマンド グループのupdateコマンドを使用して、カタログのisolation modeISOLATEDに設定します。

    databricks catalogs update <my-catalog> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    デフォルトのisolation-modeは、メタストアにアタッチされているすべてのワークスペースに対してOPENです。

  2. 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>

ワークスペースからのカタログのバインド解除

Catalog Explorer または workspace-bindings CLIコマンド グループを使用してカタログへのワークスペース アクセスを取り消す手順については、「カタログを 1 つ以上のワークスペースにバインドする」を参照してください。

重要

ワークスペースが Unity Catalog に対して自動的に有効になっていて、ワークスペースカタログがある場合、ワークスペース管理者はそのカタログを所有し、ワークスペース内でのみそのカタログに対するすべての権限を持ちます。 そのカタログをバインド解除するか、他のカタログにバインドする場合は、ワークスペース admins グループはワークスペース ローカル グループであるため、ワークスペース admins グループのメンバーに個別のユーザーとして、またはアカウント レベルのグループを使用して、必要な権限を手動で付与する必要があります。 アカウント グループとワークスペース-local グループの詳細については、 「アカウント グループとワークスペース-local グループの違い」を参照してください。