クラウド ストレージを Azure Databricks に接続するための外部の場所を作成する

この記事では、クラウド ストレージを Azure Databricks に接続するために Unity Catalog で外部の場所を構成する方法について説明します。

外部の場所によって、Unity Catalog ストレージの資格情報がクラウド オブジェクト ストレージ コンテナーに関連付けられます。 外部の場所は、カタログとスキーマのマネージド ストレージの場所を定義するため、および外部テーブルと外部ボリュームの場所を定義するために使用されます。

Azure Data Lake Storage Gen2 ストレージ コンテナーまたは Cloudflare R2 バケット内のストレージを参照する外部の場所を作成できます。

外部の場所は、カタログ エクスプローラー、Databricks CLI、ノートブックまたは Databricks SQL クエリの SQL コマンド、または Terraform を使用して作成できます。

Note

ボリュームを定義すると、ボリューム パスの下のデータへのクラウド URI アクセスは、そのボリュームのアクセス許可によって管理されます。

始める前に

前提条件:

アクセス許可の要件:

  • メタストアと、外部の場所で参照されているストレージ資格情報の両方に対する CREATE EXTERNAL LOCATION 特権が必要です。 メタストア管理者は、既定でメタストアに対する CREATE EXTERNAL LOCATION が付与されています。

カタログ エクスプローラーを使用して外部の場所を手動で作成する

カタログ エクスプローラーを使って、外部の場所を手動で作成できます。

アクセス許可と前提条件: 開始する前にをご覧ください。

外部の場所を作成するには:

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

  2. サイド バーで、カタログ アイコン [カタログ] をクリックします。

  3. [カタログ] ペインの上部にある 追加またはプラス アイコン [追加] アイコンをクリックし、メニューから [外部の場所の追加] を選択します。

    または、[クイック アクセス] ページから、[外部データ]> ボタンをクリックし、[外部の場所] タブに移動し、[場所の作成] をクリックします。

  4. 外部の場所の名前を入力してください。

  5. 必要に応じて、既存のマウント ポイントからコンテナーのパスをコピーします (Azure Data Lake Storage Gen2 コンテナーのみ)。

  6. 既存のマウント ポイントからコピーしない場合は、URL フィールドを使って、外部の場所として使うストレージ コンテナーまたは R2 バケット パスを入力してください。

    たとえば、abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path> または r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path> です。

  7. 場所へのアクセスを付与するストレージの資格情報を選択してください。

  8. (省略可能)ユーザーに外部の場所への読み取り専用アクセス権を付与する場合は、[詳細オプション] をクリックし、[読み取り専用] を選択してください。 詳細については、「外部の場所を読み取り専用としてマークする」を参照してください。

  9. Create をクリックしてください。

  10. (省略可能) 外部の場所を特定のワークスペースにバインドします。

    既定では、すべての特権ユーザーが、メタストアに接続されている任意のワークスペースで外部の場所を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、[ワークスペース] タブに移動してワークスペースを割り当てます。 「(省略可能) 外部の場所を特定のワークスペースに割り当てる」を参照してください。

  11. 外部の場所を使用するアクセス許可を付与します。

    外部の場所を使用するすべてのユーザーに、アクセス許可を付与する必要があります。

    • 外部の場所を使用して、マネージド ストレージの場所をメタストア、カタログ、またはスキーマに追加するには、CREATE MANAGED LOCATION 権限を付与してください。
    • 外部テーブルまたはボリュームを作成するには、CREATE EXTERNAL TABLE または CREATE EXTERNAL VOLUME を付与してください。

    カタログ エクスプローラーを使用してアクセス許可を付与するには:

    1. 外部の場所の名前をクリックして、詳細ウィンドウを開いてください。
    2. [アクセス許可] タブで [付与] をクリックします。
    3. [<external location>の許可] ダイアログの [プリンシパル] フィールドでユーザー、グループ、またはサービス プリンシパルを選択し、付与する権限を選択してください。
    4. [許可] をクリックします。

SQL を使って外部の場所を作成する

SQL を使用して外部の場所を作成するには、ノートブックまたは SQL クエリ エディターで次のコマンドを実行します。 プレースホルダー値を置き換えます。

アクセス許可と前提条件: 開始する前にをご覧ください。

  • <location-name>: 外部の場所の名前。 location_name にハイフン (-) などの特殊文字が含まれている場合は、バッククォート (` `) で囲む必要があります。 「名前」を参照してください。

  • <bucket-path>: この外部の場所によってアクセスを付与するクラウド テナント内のパス。 たとえば、abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path> または r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path> です。

  • <storage-credential-name>: ストレージ コンテナーまたはバケット パスに対する読み取りと書き込みを認可するストレージ資格情報の名前。 ストレージ資格情報名にハイフン (-) などの特殊文字が含まれている場合は、バッククォート (` `) で囲む必要があります。

CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

外部の場所のアクセスをアカウント内の特定のワークスペースに制限する (ワークスペースのバインディングまたは外部の場所の分離とも呼ばれます) 場合、「(省略可能) 外部の場所を特定のワークスペースに割り当てる」を参照してください。

(省略可能) 外部の場所を特定のワークスペースに割り当てる

重要

この機能はパブリック プレビュー段階にあります。

既定では、外部の場所は、メタストア内のすべてのワークスペースからアクセスできます。 つまり、ユーザーがその外部の場所で特権 (READ FILES など) を付与されている場合、メタストアに接続されたどのワークスペースからでもその特権を行使できるということです。 ワークスペースを使用してユーザーのデータ アクセスを分離する場合、特定のワークスペースからのみ外部の場所へのアクセスを許可することができます。 この機能はワークスペースのバインディングまたは外部の場所の分離とも呼ばれます。

外部の場所を特定のワークスペースにバインドする一般的なユース ケースには次のものがあります。

  • 運用データを含む外部の場所に対する CREATE EXTERNAL TABLE 特権を持つデータ エンジニアが、運用ワークスペース内のその場所でのみ外部テーブルを作成できることを確実にする。
  • 機密データを含む外部の場所に対する READ FILES 特権を持つデータ エンジニアが、特定のワークスペースのみを使用してそのデータにアクセスできることを確実にする。

ワークスペース別に他の種類のデータ アクセスを制限する方法の詳細については、「特定のワークスペースに対するカタログ アクセスの制限」を参照してください。

重要

ワークスペース バインディングは、外部の場所に対する特権が行使される時点で参照されます。 たとえば、ユーザーが myWorkspace ワークスペースからステートメント CREATE TABLE myCat.mySch.myTable LOCATION 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance' を発行して外部テーブルを作成した場合、通常のユーザー特権チェックに加えて、次のワークスペース バインド チェックが実行されます。

  • 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance' を対象範囲とする外部の場所は myWorkspace にバインドされているかどうか。
  • カタログ myCat はアクセス レベル Read & WritemyWorkspace にバインドされているかどうか。

その後、外部の場所が myWorkspace からバインド解除されると、外部テーブルは引き続き機能します。

この機能を使用すると、中央のワークスペースからカタログを設定し、カタログ バインドを使用して他のワークスペースで使用できるようにできます。外部の場所を他のワークスペースでも使用できるようにする必要はありません。

外部の場所を 1 つ以上のワークスペースにバインドする

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

必要なアクセス許可: メタストア管理者または外部の場所の所有者。

Note

外部の場所が現在のワークスペースに割り当てられているかどうかに関係なく、メタストア管理者はカタログ エクスプローラーを使用してメタストア内のすべての外部の場所を表示できます。また、外部の場所の所有者は、メタストア内で自分が所有しているすべての外部の場所を表示できます。 ワークスペースに割り当てられていない外部の場所は、灰色で表示されます。

カタログ エクスプローラー

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

  2. サイド バーで、カタログ アイコン [カタログ] をクリックします。

  3. [カタログ] ペインの上部にある 歯車アイコン 歯車アイコンをクリックし、[外部の場所] を選択します。

    または、[クイック アクセス] ページから、[外部データ]> ボタンをクリックし、[外部の場所] タブに移動します。

  4. 外部の場所を選択し、[ワークスペース] タブに移動します。

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

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

  6. [Assign to workspaces] (ワークスペースに割り当てる) をクリックし、割り当てるワークスペースを入力または検索します。

アクセスを取り消すには、[ワークスペース] タブに移動し、ワークスペースを選択して [失効] をクリックします。 すべてのワークスペースからのアクセスを許可するには、[All workspaces have access] (すべてのワークスペースにアクセス権がある) チェック ボックスをオンにします。

CLI

外部の場所をワークスペースに割り当てるには、2 つの Databricks CLI コマンド グループと 2 つの手順が必要です。

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

  1. external-locations コマンド グループの update コマンドを使用して、外部の場所の isolation modeISOLATED に設定します。

    databricks external-locations update <my-location> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    既定の isolation-mode は、メタストアにアタッチされているすべてのワークスペースで OPEN です。

  2. workspace-bindings コマンド グループの update-bindings コマンドを使用して、ワークスペースを外部の場所に割り当てます。

    databricks workspace-bindings update-bindings external-location <my-location> \
    --json '{
      "add": [{"workspace_id": <workspace-id>}...],
      "remove": [{"workspace_id": <workspace-id>}...]
    }' --profile <profile-name>
    

    "add" プロパティと "remove" プロパティを使用し、ワークスペース バインドを追加するか、削除します。

    Note

    読み取り専用バインディング (BINDING_TYPE_READ_ONLY) は、外部の場所では使用できません。 したがって、外部の場所のバインディングに binding_type を設定する理由はありません。

外部の場所のすべてのワークスペース割り当てを一覧表示するには、workspace-bindings コマンド グループの get-bindings コマンドを使用します。

databricks workspace-bindings get-bindings external-location <my-location> \
--profile <profile-name>

REST API リファレンスの「ワークスペース バインド」もご覧ください。

ワークスペースから外部の場所のバインドを解除する

カタログ エクスプローラーまたは workspace-bindings CLI コマンドを使用して外部の場所へのワークスペース アクセスを取り消す手順は、「外部の場所を 1 つ以上のワークスペースにバインドする」に記載されています。

次のステップ