メインコンテンツまでスキップ

外部ロケーションの管理

このページでは、 外部ロケーションの一覧表示、表示、更新、権限の付与、ファイル イベントの有効化、および削除の方法について説明します。

注記

Databricks では、ボリュームを使用してファイル アクセスを管理することをお勧めします。 Unity Catalogボリュームとはを参照してください。

外部ロケーションを説明する

権限やワークスペースへのアクセスなど、外部ロケーションのプロパティを表示するには、カタログエクスプローラ または SQL コマンドを使用できます。

  1. サイドバーで、「データアイコン。 カタログ 」をクリックします。
  2. [外部データ >] ボタンをクリックして、 [外部ロケーション] タブに移動します。
  3. 外部ロケーションの名前をクリックすると、そのプロパティが表示されます。

外部ロケーションに対する権限を表示する

外部ロケーションの付与を表示するには、Catalog Explorer または SQL コマンドを使用できます。

  1. サイドバーで、「データアイコン。 カタログ 」をクリックします。
  2. [外部データ >] ボタンをクリックして、 [外部ロケーション] タブに移動します。
  3. 外部ロケーションの名前をクリックします。
  4. [ アクセス許可 ]をクリックします。

外部ロケーションに対するアクセス許可の付与

このセクションでは、ノートブックまたはSQLクエリで カタログエクスプローラ と SQL コマンドを使用して、外部ロケーションに対するアクセス許可を付与および取り消す方法について説明します。代わりに Databricks CLI または Terraform を使用する方法については、 Databricks Terraform のドキュメントDatabricks CLIとは?をご覧ください。

必要なアクセス許可 : メタストアと外部ロケーションで参照されるストレージ資格情報の両方に対する CREATE EXTERNAL LOCATION 特権、または外部ロケーションに対する MANAGE 特権。 メタストア管理者は、デフォルトでメタストアに CREATE EXTERNAL LOCATION を持っています。

外部ロケーションの使用を許可するには:

  1. サイドバーで、「データアイコン。 カタログ 」をクリックします。
  2. [外部データ >] ボタンをクリックして、 [外部ロケーション] タブに移動します。
  3. 外部ロケーションの名前をクリックして、そのプロパティを開きます。
  4. [ アクセス許可 ]をクリックします。
  5. ユーザーまたはグループにアクセス許可を付与するには、各 ID を選択し、[ 付与 ]をクリックします。
  6. ユーザーまたはグループから権限を取り消すには、各 ID を選択してから 取り消し をクリックします。

特定のワークスペースへの外部ロケーションの割り当て

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

外部ロケーションを特定のワークスペースにバインドする一般的なユースケースは次のとおりです。

  • 本番運用データを含む外部ロケーションに対する CREATE EXTERNAL TABLE 権限を持つデータエンジニアが、本番運用 ワークスペースでのみそのロケーションに外部テーブルを作成できるようにします。
  • 機密データを含む外部ロケーションに対する READ FILES 権限を持つデータエンジニアが、特定のワークスペースのみを使用してそのデータにアクセスできるようにする。

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

重要

ワークスペース バインディングは、外部ロケーションに対する権限が行使された時点で参照されます。たとえば、ユーザーが myWorkspace ワークスペースからステートメント CREATE TABLE myCat.mySch.myTable LOCATION 's3://bucket/path/to/table' を発行して外部テーブルを作成すると、通常のユーザー権限チェックに加えて、次のワークスペース バインディング チェックが実行されます。

  • 外部ロケーションを覆う's3://bucket/path/to/table'``myWorkspaceに縛られていますか?
  • カタログmyCatは、アクセスレベルRead & WritemyWorkspaceにバインドされていますか?

その後、外部ロケーションが myWorkspaceからバインド解除された場合、外部テーブルは引き続き機能します。

この機能を使用すると、中央からカタログにデータを入力し、カタログ バインディングを使用して他のワークスペースで使用できるようにすることもできます 外部ロケーション 他のワークスペースで使用可能にする必要はありません。

外部ロケーションを 1 つ以上のワークスペースにバインドする

外部ロケーションを特定のワークスペースに割り当てるには、カタログエクスプローラ または Databricks CLIを使用します。

必要な権限 : メタストア管理者、外部ロケーション所有者、または外部ロケーションの MANAGE

注記

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

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

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

  3. [外部データ >] ボタンをクリックして、 [外部ロケーション] タブに移動します。

  4. 外部ロケーションを選択し、 ワークスペース タブに移動します。

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

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

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

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

ワークスペースから外部ロケーションのバインドを解除する

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

外部ロケーションの所有者を変更する

外部ロケーションの作成者は、その最初の所有者です。所有者を別のアカウントレベルのユーザーまたはグループに変更するには、Catalog Explorer または SQL コマンドを使用できます。

必要な権限 : 外部ロケーションの所有者または MANAGE 権限を持つユーザー。

  1. サイドバーで、「データアイコン。 カタログ 」をクリックします。
  2. [外部データ >] ボタンをクリックして、 [外部ロケーション] タブに移動します。
  3. 外部ロケーションの名前をクリックします。
  4. 編集アイコン [所有者] の横にある [] をクリックします。
  5. 入力してプリンシパルを検索し、それを選択します。
  6. 保存 をクリックします。

外部ロケーションを読み取り専用としてマークする

ユーザーに外部ロケーションへの読み取り専用アクセスを許可したい場合は、カタログ エクスプローラーを使用して外部ロケーションを読み取り専用としてマークできます。 この変更がすべてのコンピュート リソースに反映されるまでに最大 60 分かかる場合があります。

外部ロケーションを読み取り専用にする:

  • ストレージ認証情報の基になる IAMロールによって付与された書き込み権限や、その外部ロケーションに付与された Unity Catalog 権限に関係なく、ユーザーがこれらの外部ロケーションのファイルに書き込むことを防止します。
  • ユーザーがこれらの外部ロケーションにあるテーブルにデータを挿入できないようにします。
  • ユーザーがそれらの外部ロケーションにマネージドテーブルまたはボリュームを作成できないようにします。
  • 読み取り専用の外部ロケーションを使用してカタログの作成をブロックします。
  • 作成時にシステムが外部ロケーションを適切に検証できるようにします。

外部ロケーションは、作成時に読み取り専用にすることができます。

カタログエクスプローラーを使用して、外部ロケーションの作成後に読み取り専用ステータスを変更することもできます。

  1. サイドバーで、「データアイコン。 カタログ 」をクリックします。
  2. [外部データ >] ボタンをクリックして、 [外部ロケーション] タブに移動します。
  3. 外部ロケーションを選択し、 接続のテスト ボタンの横にあるケバブメニューのアイコン。メニューをクリックして、 編集 を選択します。
  4. 編集ダイアログで、 詳細オプション をクリックし、 読み取り専用使用に制限 オプションを選択します。
  5. 更新 をクリックします。

外部ロケーションでの暗号化アルゴリズムの設定 (AWS S3 のみ)

AWS は、クライアントが暗号化ヘッダーを設定する必要がある S3 バケットポリシーをサポートしています。AWS ドキュメントの 「暗号化の要求」 を参照してください。S3バケットがリクエストに暗号化ヘッダーを必要とする場合は、 Unity Catalogの外部ロケーションで暗号化アルゴリズムを設定する必要があります。この設定は、S3 バケット内のデータにアクセスするときに正しいヘッダーを設定するために使用されます。この機能は、Delta Sharing を使用して共有されている外部テーブルへのアクセスではサポートされていません。

  1. サイドバーで、「データアイコン。 カタログ 」をクリックします。

  2. カタログ ウィンドウの上部にある 歯車のアイコン。歯車アイコンをクリックし、 外部ロケーション を選択します。

  3. 外部ロケーションを選択します。 外部ロケーションは、ストレージ資格情報に IAMロールを使用する必要があります。

  4. ケバブメニューのアイコン。 接続のテスト ボタンの横にある ケバブ メニューをクリックし、 編集 を選択します。

  5. 編集ダイアログで、[ 詳細オプション ] をクリックします。

  6. 暗号化アルゴリズム で、暗号化キーに応じて SSE-SE または SSE-KMS を選択します。

    SSE-KMS の場合は、[ Encryption KMS key arn ] の下に、S3 ロケーションにアクセスするときにクライアントが参照する KMS キーの ARN を貼り付けます。

  7. 更新 をクリックします。

(推奨)外部ロケーションのファイルイベントを有効にする

クラウド・プロバイダーによってプッシュされる変更通知を取り込む場合、外部ロケーションのファイル・イベントを有効にすると、以下の利点があります。

始める前に

Databricks がユーザーに代わって SQS キューを構成する場合は、外部ロケーションが、そのための適切なアクセス許可を付与するストレージ資格情報を参照する必要があります。手順については、次の手順を参照してください。

SQS キューの場合、ストレージ認証情報によって表される ID には次の権限が必要です。

  • sqs:ReceiveMessage
  • sqs:DeleteMessage
  • sqs:PurgeQueue

手順 1: Databricks が S3 のファイル イベントにアクセスできることを確認する

外部ロケーション セキュリティ保護可能なオブジェクトのファイル イベントを有効にする前に、 S3 アカウントが、発行するファイル イベントへのアクセス権を Databricks に付与するように構成されていることを確認する必要があります。 Databricks で S3 のファイルイベントを設定する場合は、Databricks に適切なアクセス権があることも確認する必要があります。

このアクセス権の割り当ては、ストレージの資格情報を構成するときに推奨される手順です。

Databricks がバケットのイベント通知を設定およびサブスクライブできることを確認するには、次のようにします。

  1. IAMロールを取得します。

    1. サイドバーで、「データアイコン。 カタログ 」をクリックします。

    2. [外部データ >] ボタンをクリックして、 [外部ロケーション] タブに移動します。

    3. 外部ロケーションを選択します。

    4. [ 概要 ] タブで、 資格情報 の名前をクリックします。

    5. ストレージ認証情報の [ 概要 ] タブで、 IAMロール (ARN) をコピーします。

      これは次の手順で使用します。

  2. AWSアカウントにログインします。

  3. IAM に移動し、ステップ 1 でコピーしたロールを検索します。

  4. 権限ポリシー で、IAMロールに関連付けられている IAM ポリシーまたはポリシーを見つけて開きます。

  5. ポリシーまたはポリシーを開き、次のプロパティを含むものがあることを確認します。

    Databricks で通知リソースを自動的に作成するには ( File event type Automaticに設定)、次のポリシーを使用します。これにより、Databricks アカウントでバケットのイベント通知構成を更新し、SNS トピックを作成し、SQS キューを作成し、SQS キューを SNS トピックにサブスクライブできるようになります。

    <BUCKET> を S3 バケットの名前に置き換えます。

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "ManagedFileEventsSetupStatement",
    "Effect": "Allow",
    "Action": [
    "s3:GetBucketNotification",
    "s3:PutBucketNotification",
    "sns:ListSubscriptionsByTopic",
    "sns:GetTopicAttributes",
    "sns:SetTopicAttributes",
    "sns:CreateTopic",
    "sns:TagResource",
    "sns:Publish",
    "sns:Subscribe",
    "sqs:CreateQueue",
    "sqs:DeleteMessage",
    "sqs:ReceiveMessage",
    "sqs:SendMessage",
    "sqs:GetQueueUrl",
    "sqs:GetQueueAttributes",
    "sqs:SetQueueAttributes",
    "sqs:TagQueue",
    "sqs:ChangeMessageVisibility",
    "sqs:PurgeQueue"
    ],
    "Resource": ["arn:aws:s3:::<BUCKET>", "arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
    },
    {
    "Sid": "ManagedFileEventsListStatement",
    "Effect": "Allow",
    "Action": ["sqs:ListQueues", "sqs:ListQueueTags", "sns:ListTopics"],
    "Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
    },
    {
    "Sid": "ManagedFileEventsTeardownStatement",
    "Effect": "Allow",
    "Action": ["sns:Unsubscribe", "sns:DeleteTopic", "sqs:DeleteQueue"],
    "Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
    }
    ]
    }

    あるいは、通知リソースを自分で設定し、Databricks にキュー エンドポイント ( File event typeProvidedに設定) を提供するには、次のポリシーを使用します。これはセルフサービス操作であり、Databricks はリソースのセットアップに関するサポートを提供することはできません。

    <QUEUE_NAME> SQS キューの名前に置き換えます。

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "ManagedFileEventsReadStatement",
    "Effect": "Allow",
    "Action": ["sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage", "sqs:PurgeQueue"],
    "Resource": ["arn:aws:sqs:*:*:<QUEUE_NAME>"]
    }
    ]
    }

    提供されたキューを使用する場合は、提供された SQS キューがバケットの次のS3 イベント通知にサブスクライブされていることを確認してください。

    • s3:オブジェクトが作成されました:*
    • s3:オブジェクトが削除されました:*
    • s3:ライフサイクル有効期限:*

    AWS S3 バケットにアクセスするストレージ認証情報の作成」も参照してください。

  6. このポリシーが見つからない場合は、 IAMロールに追加します。

ステップ 2: カタログエクスプローラ を使用して外部ロケーションのファイル イベントを有効にする

ファイルイベントを有効にするには:

  1. サイドバーで、「データアイコン。 カタログ 」をクリックします。

  2. [外部データ >] ボタンをクリックして、 [外部ロケーション] タブに移動します。

  3. 外部ロケーションを選択します。

  4. ケバブメニューのアイコン。 接続のテスト ボタンの横にある ケバブ メニューをクリックし、 編集 を選択します。

  5. 編集ダイアログで、[ 詳細オプション ] をクリックします。

  6. ファイルイベントを有効にする を選択します。

  7. ファイルイベント・タイプ を選択します。

    自動 : (推奨) Databricks でサブスクリプションとイベントを設定する場合は、これを選択します。

    提供 : SQS キューを自分で設定済みの場合は、これを選択します。

  8. 提供 ファイルイベント タイプを選択した場合は、既存の SQS キューの キュー URL に [ https://sqs.<region>.amazonaws.com/<account-ID>/<queue-name>] を入力します。

  9. 更新 をクリックします。

  10. 数秒待ってから、メインの外部ロケーション編集ページで 接続のテスト をクリックして、ファイル イベントが正常に有効化されたことを確認します。

ファイルイベントの制限

外部ロケーションのファイルイベントには、次の制限があります。

  • ファイル イベント キャッシュには、過去 7 日間に変更されたファイルのメタデータのみが保持されます。したがって、Auto Loader を少なくとも 7 日ごとに 1 回実行する場合にのみ、増分読み取りをサポートできます。Auto Loader を少なくともこの頻度で実行しない場合は、完全なディレクトリ リストを実行してキャッシュとチェックポイントを更新します。

  • イベント スループットは、1 秒あたりに取り込まれる 2000 ファイルに制限されています。

  • resourceTagsオプションを使用してクラウドリソースにタグを付けることはできません。代わりに、Auto Loader サービスによってキューとサブスクリプション リソースが作成された後に、クラウド コンソールを使用してリソースにタグを付けます。

  • Unity Catalogメタストアのルートストレージの場所に対して外部ロケーションが定義されていない場合、そのストレージの場所に対してファイルイベントを設定することはできません。

    Unity Catalogで外部ロケーションオブジェクトが定義されていないストレージロケーションにファイルイベントを設定することはできません。Unity Catalog の実装には、外部ロケーションに関連付けられていないメタストア ルート ストレージの場所が含まれる場合があります。これがメタストアのルート保存場所に当てはまるかどうかを判断するには、次のようにします。

    1. アカウント管理者として、アカウントコンソールにログインします。

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

    3. メタストア名をクリックします。

    4. 構成 タブに移動します。

    5. S3 バケットパス の値がある場合、メタストアルートには外部ロケーションオブジェクトが定義されていません。

      メタストアのルート ストレージを更新して外部ロケーションを使用するには、[ 削除 ] ボタンをクリックします。 外部ロケーションが作成されます。 詳細については、「 メタストア レベルのストレージを削除する」を参照してください。

外部ロケーションの変更

外部ロケーションの所有者または MANAGE 権限を持つユーザーは、外部ロケーションの名前変更、URI の変更、およびストレージ資格情報の変更を行うことができます。

外部ロケーションの名前を変更するには、次の操作を行います。

ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 プレースホルダーの値を置き換えます。

  • <location-name>:ロケーションの名前。
  • <new-location-name>:ロケーションの新しい名前。
SQL
ALTER EXTERNAL LOCATION <location-name> RENAME TO <new-location-name>;

クラウドテナント内の外部ロケーションが指すURIを変更するには、次の手順を実行します。

ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 プレースホルダーの値を置き換えます。

  • <location-name>:外部ロケーションの名前。
  • <url>:場所がクラウドテナント内のアクセスを承認する必要がある新しいストレージURL。
SQL
ALTER EXTERNAL LOCATION location_name SET URL '<url>' [FORCE];

FORCEオプションは、外部テーブルが外部ロケーショに依存している場合でも、URLを変更します。

外部ロケーションが使用するストレージ資格情報を変更するには、次の手順を実行します。

ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 プレースホルダーの値を置き換えます。

  • <location-name>:外部ロケーションの名前。
  • <credential-name>: クラウド テナント内の場所の URL へのアクセスを許可するストレージ資格情報の名前。
SQL
ALTER EXTERNAL LOCATION <location-name> SET STORAGE CREDENTIAL <credential-name>;

外部ロケーションの削除

外部ロケーションを削除 (ドロップ) するには、その所有者であるか、外部ロケーションに対する MANAGE 権限を持っている必要があります。 外部ロケーションを削除するには、次の操作を行います。

ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 括弧内の項目はオプションです。<location-name> を外部ロケーションの名前に置き換えます。

SQL
DROP EXTERNAL LOCATION [IF EXISTS] <location-name>;