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

外部ロケーションの管理

この記事では、 外部ロケーションの一覧表示、表示、更新、アクセス許可の付与、ファイル イベントの有効化、および削除の方法について説明します。

注記

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

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

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

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

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

外部ロケーションに対する権限を表示するには、次のようなコマンドを使用します。 オプションで、結果をフィルタリングして、指定したプリンシパルの権限のみを表示できます。

SQL
SHOW GRANTS [<principal>] ON EXTERNAL LOCATION <location-name>;

プレースホルダーの値を置き換えます。

  • <location-name>: クラウド テナント内のバケットの読み取りとバケットへの書き込みを許可する外部ロケーションの名前。
  • <principal>:アカウントレベルのユーザーのメールアドレスまたはアカウントレベルのグループの名前。
注記

グループまたはユーザー名にスペースまたは @ 記号が含まれている場合は、アポストロフィではなくバッククォート( )を使用します。

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

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

外部ロケーションに対して次の権限を付与できます。

  • CREATE EXTERNAL TABLE
  • CREATE EXTERNAL VOLUME
  • CREATE MANAGED STORAGE

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

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

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

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

外部ロケーションの作成者は、その最初の所有者です。所有者を別のアカウント レベルのユーザーまたはグループに変更するには、ノートブックまたは Databricks SQL エディターで次のコマンドを実行するか、 カタログ エクスプローラーを使用します。

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

プレースホルダーの値を置き換えます。

  • <location-name>:資格情報の名前。
  • <principal>:アカウントレベルのユーザーのメールアドレスまたはアカウントレベルのグループの名前。
SQL
ALTER EXTERNAL LOCATION <location-name> OWNER TO <principal>

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

ユーザーに外部ロケーションへの読み取り専用アクセスを許可する場合は、カタログエクスプローラーを使用して外部ロケーションを読み取り専用としてマークできます。

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

  • ストレージ資格情報の基になるサービス アカウントによって付与された書き込みアクセス許可や、その外部ロケーションに付与された Unity Catalog アクセス許可に関係なく、ユーザーがこれらの外部ロケーションのファイルに書き込むことを防止します。
  • ユーザーがそれらの外部ロケーションにマネージドテーブルまたはボリュームを作成できないようにします。
  • 作成時にシステムが外部ロケーションを適切に検証できるようにします。

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

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

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

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

AWS は、S3 のデータを保護するために、Amazon S3 マネージドキー (SSE-S3) または AWS KMS キー (SSE-KMS) を使用したサーバー側の暗号化 (SSE) をサポートしています。 S3バケットで SSE 暗号化が必要な場合は、外部ロケーションで暗号化アルゴリズムを設定して、外部テーブルとUnity Catalog内のボリュームが S3 バケット内のデータにアクセスできるようにすることができます。SSE は、Delta Sharing を使用して共有される外部テーブルではサポートされていません。 詳細については、「 S3 with KMSの暗号化の設定」を参照してください。

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

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

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

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

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

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

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

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

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

備考

プレビュー

この機能は パブリック プレビュー段階です。

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

始める前に

Databricks がユーザーに代わって Pub/Sub サブスクリプションまたは SQS キューを設定する場合は、外部ロケーションが適切な権限を付与するストレージ認証情報を参照する必要があります。手順については、次の手順を参照してください。

独自の Pub/Sub サブスクリプションを作成する場合は、ストレージ認証情報で表される ID に、それらの Pub/Sub サブスクリプションに対する次の権限が必要です。

  • pubsub.subscriptions.consume

独自の SQS キューを作成する場合は、ストレージ認証情報で表される ID に、それらの SQS キューに対する次のアクセス許可が必要です。

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

ステップ 1: Databricks が GCS または AWS S3 のファイルイベントにアクセスできることを確認する

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

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

GCS バケットの場合

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

  1. サービス アカウント Eメール アドレスを取得します。

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

    2. クイック アクセス ページで、 外部データ > ボタンをクリックして外部 ロケーション タブに移動します。

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

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

    5. ストレージ資格情報の 概要 タブで、サービス アカウント Eメール アドレスをコピーします。

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

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

  3. IAM & 管理 >ロール に移動します。

  4. 手順1でEメールアドレスをコピーしたサービスアカウントを見つけます。

  5. 次の設定を含むカスタムロールが割り当てられていることを確認します。

    pubsub.subscriptions.consume
    pubsub.subscriptions.create
    pubsub.subscriptions.delete
    pubsub.subscriptions.get
    pubsub.subscriptions.list
    pubsub.subscriptions.update
    pubsub.topics.attachSubscription
    pubsub.topics.create
    pubsub.topics.delete
    pubsub.topics.get
    pubsub.topics.list
    pubsub.topics.update
    storage.buckets.update
  6. これらの構成を持つロールがサービス アカウントにない場合は、ロールを持つカスタム ロールを作成し、それをサービス アカウントに割り当てます。手順については、「 (推奨) ファイル イベントのアクセス許可を構成する」を参照してください。

S3バケットの場合

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

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

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

    2. クイック アクセス ページで、 外部データ > ボタンをクリックして外部 ロケーション タブに移動します。

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

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

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

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

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

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

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

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

    このポリシーにより、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-*"]
    }
    ]
    }

    ステップ 1: IAMロールを作成するも参照してください。

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

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

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

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

  2. クイック アクセス ページで、 外部データ > ボタンをクリックして外部 ロケーション タブに移動します。

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

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

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

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

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

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

    提供 : Google Cloud Pub/Sub サブスクリプション または SQS キュー をすでに自分で設定している場合は、これを選択します。

  8. [ 提供ファイル ] イベントタイプを選択した場合は、既存の Pub/Sub サブスクリプション 名またはストレージ キューの URL を入力します。

    • Pub/Sub サブスクリプション: projects/<project-id>/subscriptions/<subscription-name>

    • AWS SQS キュー: https://sqs.<region>.amazonaws.com/<account-ID>/<queue-name>

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

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

ファイルイベントの制限

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

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

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

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

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

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

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

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

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

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

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

外部ロケーションの変更

外部ロケーションの所有者または 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>;