Google Cloud Storageに接続するためのストレージ資格情報を作成する

この記事では、Unity Catalog でストレージ認証情報を作成して Google Cloud Storage に接続する方法について説明します。

テーブルとボリュームを格納する基盤となるクラウドストレージへのアクセスを管理するために、Unity Catalogは次のオブジェクトタイプを使用します。

  • ストレージ資格情報は、クラウドストレージにアクセスするための長期的なクラウド資格情報をカプセル化します。

  • 外部ロケーションには、ストレージ資格情報とクラウドストレージパスへの参照が格納されています。

詳細については、「Unity Catalogを使用してクラウド ストレージへのアクセスを管理する」を参照してください。

Unity Catalog は、 Databricks on Google Cloudの 3 つのクラウド ストレージ オプション ( Google Cloud Storage (GCS) バケット、Cloudflare R2 バケット、 DBFSルート) をサポートしています。 Cloudflare R2は、主にDelta Sharingのユースケースで、データエグレス料金を回避したいと考えているケースを対象としています。 GCS は、他のほとんどのユースケースに適しています。 この記事では、GCS のストレージ認証情報の作成に焦点を当てています。 Cloudflare R2 については、「 Cloudflare R2 に接続するためのストレージ資格情報を作成する」を参照してください。

DBFSルートは、 DBFSルートへのアクセスを制御するために使用されます。 Databricks では DBFSルート ストレージにデータを格納しないことをお勧めしますが、従来のプラクティスにより、ワークスペースが格納する場合もあります。DBFSルートについては、「DBFSルート内のデータの外部ロケーションを作成する」を参照してください。

GCSバケットにアクセスするためのストレージ資格情報を作成するには、そのバケット上のIAMロールをDatabricksが生成したGoogle Cloudサービスアカウントに割り当てることで、Unity Catalogにそのバケットへの読み書き権限を与えます。

要件

Databricks:

  • Unity Catalogが有効化されたDatabricksワークスペース

  • CREATE STORAGE CREDENTIAL 権限(ワークスペースにアタッチされたUnity Catalogのメタストア上の)。アカウント管理者とメタストア管理者には、デフォルトでこれらの権限があります。

Google Cloudアカウントの場合

  • GCS バケット。 エグレス料金を回避するには、データにアクセスするワークスペースと同じリージョンにする必要があります。

  • そのバケットのアクセスポリシーを変更する権限

カタログエクスプローラーを使用してGoogle Cloudサービスアカウントを生成する

  1. Unity Catalogが有効なDatabricksワークスペースに、メタストアに対するCREATE STORAGE CREDENTIAL権限を持つユーザーとしてログインします。

    この権限はメタストア管理者ロールとアカウント管理者ロールの両方に含まれています。

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

  3. [クイック アクセス] ページで、[外部データ] > ボタンをクリックし、[資格情報] タブに移動して、[資格情報の作成] を選択します。

  4. [資格情報の種類] として [GCP サービス アカウント] を選択します。

  5. ストレージ資格情報名とオプションのコメントを入力してください。

  6. (オプション) このストレージ資格情報を使用する外部ロケーションへの読み取り専用アクセス権をユーザーに付与する場合は、[読み取り専用] を選択します。詳細については、「ストレージ資格情報を読み取り専用としてマークする」を参照してください。

  7. [作成] をクリックします。

    Databricksはストレージ資格情報を作成し、Google Cloudサービスアカウントを生成します。

  8. [ストレージ資格情報が作成されました] ダイアログで、サービスアカウントID (Eメールアドレスの形式) をメモし、[完了]をクリックします。

  9. (オプション)ストレージ資格情報を特定のワークスペースにバインドします。

    デフォルトでは、権限が付与されているユーザーなら誰でも、メタストアにアタッチされている任意のワークスペースでストレージ資格情報を使用できます。特定のワークスペースからのアクセスのみを許可したい場合は、[ワークスペース] タブに移動してワークスペースを割り当ててください。「(オプション)特定のワークスペースにストレージ資格情報を割り当てる」を参照してください。

サービスアカウントの権限を設定する

  1. Google Cloudコンソールに移動し、DatabricksワークスペースからアクセスしたいGCSバケットを開きます。

    エグレス料金を回避するには、バケットをデータにアクセスするワークスペースと同じリージョンに配置する必要があります。

  2. [権限] タブで [+ アクセス権を付与] をクリックし、サービスアカウントに以下のロールを割り当てます。

    • ストレージレガシーバケットリーダー

    • ストレージオブジェクト管理者

    サービスアカウントのEメールアドレスを主識別子として使用します。

ファイルイベントの権限を設定する

注:

このステップはオプションですが、強くお勧めします。 ユーザーに代わってファイル イベントを構成するための Databricks アクセス権を付与しない場合は、場所ごとにファイル イベントを手動で構成する必要があります。 そうしないと、Databricks が将来リリースする可能性のある重要な機能へのアクセスが制限されます。

以下のステップを使用すると、 Databricks は完全な通知パイプラインを設定して、 GCS バケットから Google クラウド Pub/Sub にイベント通知メッセージを公開できます。 GCP プロジェクトには GCS バケットがあり、Pub/Sub API が有効になっていることを前提としています。

  1. ファイル イベントのカスタム IAMロールを作成します。

    1. GCSバケットを含むプロジェクトの Google クラウド コンソールで、[IAM & Admin] > [Roles] に移動します。

    2. カスタムIAMロールがすでにある場合は、それを選択して「 ロールの編集」をクリックします。 それ以外の場合は、[ロール] ページで [+ ロールの作成] をクリックして、新しいロールを作成します。

    3. [ ロールの作成 ] または [ロールの編集 ] 画面で、次のアクセス許可をカスタム IAMロールに追加し、変更を保存します。 詳細な手順については、 GCP のドキュメントを参照してください。

      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
      
  2. ロールへのアクセス権を付与します。

    1. 「IAM」および「管理」>「IAM」に移動します。

    2. [アクセス権を付与] をクリックします。

    3. プリンシパルとしてサービスアカウントを入力します。

    4. カスタム IAMロールを選択します。

    5. [保存]をクリックします。

  3. クラウド Storage サービス エージェントにアクセス許可を付与する

    1. サービス エージェント アカウント Eメール は、 Google クラウド ドキュメントの手順に沿って検索します。

    2. Google クラウド コンソールで、[ IAM & Admin] > IAM > [Grant Access] に移動します。

    3. 「Service agent アカウント Eメール」と入力し、「 Pub/Sub Publisher*」ロールを割り当てます。

これで、このストレージ資格情報を参照する 外部の場所を作成できます

(オプション)特定のワークスペースにストレージ資格情報を割り当てる

プレビュー

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

デフォルトでは、ストレージ資格情報はメタストア内のすべてのワークスペースからアクセスできます。つまり、ユーザーがそのストレージ認証情報に対する権限(CREATE EXTERNAL LOCATIONなど)を与えられていれば、メタストアに接続されているどのワークスペースからでもその権限を行使できます。ワークスペースを使用してユーザーデータアクセスを分離する場合は、ストレージ資格情報へのアクセスを特定のワークスペースからのみ許可することをお勧めします。この機能は、ワークスペースのバインドまたはストレージ資格情報の分離と呼ばれます。

ストレージ資格情報を特定のワークスペースにバインドする一般的なユースケースには、クラウド管理者が運用クラウドアカウント資格情報を使用してストレージ資格情報を構成し、Databricksユーザーがこの資格情報を使用して運用ワークスペースでのみ外部の場所を作成できるようにする場合などが考えられます。

ワークスペースのバインド機能の詳細については、(オプション)特定のワークスペースに外部ロケーションを割り当てるおよびカタログへのアクセスを特定のワークスペースに制限するを参照してください。

注:

ワークスペースバインディングは、ストレージ資格情報に対する権限が行使されるときに参照されます。たとえば、ユーザーがストレージ資格情報を使用して外部ロケーションを作成する場合、ストレージ資格情報のワークスペースバインディングは、外部ロケーションが作成されたときにのみチェックされます。作成された後、外部ロケーションはストレージ資格情報に設定されているワークスペースバインディングとは独立して機能します。

ストレージ認証情報を1つ以上のワークスペースにバインドする

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

必要なアクセス許可: メタストア管理者、ストレージ資格情報の所有者、またはストレージ資格情報の MANAGE

注:

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

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

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

  3. [クイック アクセス] ページで、[外部データ>] ボタンをクリックし、[資格情報] タブに移動します。

  4. ストレージ資格情報を選択し、[ワークスペース] タブに移動します。

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

    ストレージ資格情報がすでに1つ以上のワークスペースにバインドされている場合、このチェックボックスはすでにオフになっています。

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

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

ワークスペースにストレージ認証情報を割り当てるには、2 つの Databricks CLIコマンドグループと2つのステップが必要です。

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

  1. storage-credentialsコマンドグループのupdateコマンドを使用して、ストレージ認証情報のisolation modeISOLATEDに設定します。

    databricks storage-credentials update <my-storage-credential> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

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

  2. workspace-bindingsコマンドグループのupdate-bindingsコマンドを使用して、ワークスペースをストレージ認証情報に割り当てます。

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

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

    注:

    読み取り専用バインディング(BINDING_TYPE_READ_ONLY)はストレージ認証情報では使用できません。したがって、ストレージ認証情報のバインディングにbinding_typeを設定する理由はありません。

ストレージ認証情報のすべてのワークスペース割り当てを一覧表示するには、workspace-bindingsコマンドグループのget-bindingsコマンドを使用します。

databricks workspace-bindings get-bindings storage-credential <my-storage-credential> \
--profile <profile-name>

ワークスペースからストレージ資格情報のバインドを解除する

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

次のステップ

ストレージ資格情報を使用するアクセス許可を表示、更新、削除、および他のユーザーに付与できます。 「 ストレージ資格情報の管理」を参照してください。

ストレージ資格情報を使用して外部ロケーションを定義できます。「外部ロケーションを作成してクラウドストレージをDatabricksに接続する」を参照してください。