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 バケット。 エグレス料金を回避するには、データにアクセスするワークスペースと同じリージョンにする必要があります。
- そのバケットのアクセスポリシーを変更する権限
Catalog Explorer を使用して Google Cloud サービス アカウントを生成する
-
Unity Catalogが有効なDatabricksワークスペースに、メタストアに対する
CREATE STORAGE CREDENTIAL
権限を持つユーザーとしてログインします。この権限はメタストア管理者ロールとアカウント管理者ロールの両方に含まれています。
-
サイドバーで、「
カタログ 」をクリックします。
-
[クイック アクセス ] ページで、[ 外部データ] > ボタンをクリックし、[ 資格情報 ] タブに移動して、[ 資格情報の作成 ] を選択します。
-
[資格情報の種類 ] として [GCP サービス アカウント ] を選択します。
-
ストレージ資格情報名 とオプションのコメントを入力してください。
-
(オプション)このストレージ認証情報を使用する外部ロケーションへの読み取り専用アクセスをユーザーに許可する場合は、 [ 読み取り専用 ] を選択します。 詳細については、「 ストレージ認証情報を読み取り専用としてマークする」を参照してください。
-
作成 をクリックします。
Databricksはストレージ資格情報を作成し、Google Cloudサービスアカウントを生成します。
-
[ ストレージ資格情報が作成されました ] ダイアログで、サービスアカウントID (Eメールアドレスの形式) をメモし、[ 完了 ]をクリックします。
-
(オプション)ストレージ資格情報を特定のワークスペースにバインドします。
デフォルトにより、特権ユーザーは、メタストアに接続されている任意のワークスペースでストレージ資格情報を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 「(省略可能) 特定のワークスペースにストレージ資格情報を割り当てる」を参照してください。
サービスアカウントの権限を設定する
-
Google Cloudコンソールに移動し、DatabricksワークスペースからアクセスしたいGCSバケットを開きます。
エグレス料金を回避するには、バケットをデータにアクセスするワークスペースと同じリージョンに配置する必要があります。
-
[ 権限 ] タブで [ + アクセス権を付与 ] をクリックし、サービスアカウントに以下のロールを割り当てます。
- ストレージレガシーバケットリーダー
- ストレージオブジェクト管理者
サービス アカウントの Eメール アドレスをプリンシパル識別子として使用します。
(推奨)ファイルイベントの権限を設定する
この手順はオプションですが、強くお勧めします。ユーザーに代わってファイル イベントを構成するための Databricks アクセス権を付与しない場合は、場所ごとにファイル イベントを手動で構成する必要があります。そうしないと、Databricks が将来リリースする可能性のある重要な機能へのアクセスが制限されます。ファイル イベントの詳細については、「 (推奨) 外部ロケーションのファイル イベントを有効にする」を参照してください。
以下の手順により、Databricks は、GCS バケットから Google Cloud Pub/Sub にイベント通知メッセージを発行するための完全な通知パイプラインをセットアップできます。 GCP プロジェクトには GCS バケットがあり、Pub/Sub API が有効になっていることを前提としています。
-
ファイル イベントのカスタム IAMロールを作成します。
-
GCS バケットを含むプロジェクトの Google Cloud コンソールで、[ IAM & Admin] > [Roles ] に移動します。
-
カスタムIAMロールがすでにある場合は、それを選択して「 ロールの編集」 をクリックします。 それ以外の場合は、[ ロール ] ページで [+ ロールの作成 ] をクリックして、新しいロールを作成します。
-
[ ロールの作成 ] または [ロールの編集 ] 画面で、次のアクセス許可をカスタム 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
-
-
ロールへのアクセス権を付与します。
- 「IAM」および「管理」>「IAM」 に移動します。
- [ アクセス権を付与 ] をクリックします。
- プリンシパルとしてサービスアカウントを入力します。
- カスタム IAMロールを選択します。
- [ 保存 ]をクリックします。
-
Cloud Storage サービス エージェントに権限を付与する
- Google Cloud ドキュメントの次の手順に従って、サービス エージェント アカウント Eメール を見つけます。
- Google Cloud コンソールで、[ IAM & Admin] > [IAM] に移動し、[アクセス権を付与> ] に移動します。
- 「Service agent アカウント Eメール」と入力し、「 Pub/Sub Publisher* 」ロールを割り当てます。
これで、このストレージ認証情報を参照する 外部ロケーションを作成できます 。
(オプション)ストレージ資格情報を特定のワークスペースに割り当てる
デフォルトでは、ストレージ資格情報はメタストア内のすべてのワークスペースからアクセスできます。つまり、ユーザーがそのストレージ認証情報に対する権限(CREATE EXTERNAL LOCATION
など)を与えられていれば、メタストアに接続されているどのワークスペースからでもその権限を行使できます。ワークスペースを使用してユーザーデータアクセスを分離する場合は、ストレージ資格情報へのアクセスを特定のワークスペースからのみ許可することをお勧めします。この機能は、ワークスペースのバインドまたはストレージ資格情報の分離と呼ばれます。
ストレージ資格情報を特定のワークスペースにバインドする一般的なユースケースには、クラウド管理者が運用クラウドアカウント資格情報を使用してストレージ資格情報を構成し、Databricksユーザーがこの資格情報を使用して運用ワークスペースでのみ外部の場所を作成できるようにする場合などが考えられます。
ワークスペースのバインドの詳細については、「 (オプション) 特定のワークスペースに外部ロケーションを割り当てる 」および「 特定のワークスペースへのカタログアクセスを制限する」を参照してください。
ワークスペースバインディングは、ストレージ資格情報に対する権限が行使されるときに参照されます。たとえば、ユーザーがストレージ資格情報を使用して外部ロケーションを作成する場合、ストレージ資格情報のワークスペースバインディングは、外部ロケーションが作成されたときにのみチェックされます。作成された後、外部ロケーションはストレージ資格情報に設定されているワークスペースバインディングとは独立して機能します。
ストレージ資格情報を 1 つ以上のワークスペースにバインドする
ストレージ認証情報を特定のワークスペースに割り当てるには、カタログエクスプローラーまたはDatabricks CLIを使用できます。
必要なアクセス許可 : メタストア管理者、ストレージ資格情報の所有者、またはストレージ資格情報の MANAGE
。
メタストア管理者は、カタログエクスプローラーを使用してメタストア内のすべてのストレージ資格情報を確認できます。ストレージ資格情報の所有者は、ストレージ資格情報が現在のワークスペースに割り当てられているかどうかに関係なく、メタストアで所有しているすべてのストレージ資格情報を確認できます。ワークスペースに割り当てられていないストレージ資格情報は、灰色で表示されます。
- Catalog Explorer
- CLI
-
メタストアにリンクされているワークスペースにログインします。
-
サイドバーで、「
カタログ 」をクリックします。
-
[クイック アクセス ] ページで、[ 外部データ> ] ボタンをクリックし、[ 資格情報 ] タブに移動します。
-
ストレージ資格情報を選択し、[ ワークスペース ] タブに移動します。
-
[ ワークスペース ] タブで、[ すべてのワークスペースがアクセス可能] チェックボックスをオフにします。
ストレージ資格情報がすでに1つ以上のワークスペースにバインドされている場合、このチェックボックスはすでにオフになっています。
-
[ ワークスペースに割り当てる ] をクリックし、割り当てるワークスペースを入力または検索します。
アクセス権を取り消すには、[ ワークスペース ] タブに移動し、ワークスペースを選択して、[ 取り消し ] をクリックします。すべてのワークスペースからのアクセスを許可するには、[ すべてのワークスペースがアクセス可能 ] チェックボックスをオンにします。
ワークスペースにストレージ資格情報を割り当てるには、2 つの Databricks CLI コマンド グループと 2 つの手順が必要です。
次の例では、 <profile-name>
を Databricks 認証構成プロファイルの名前に置き換えます。これには、個人用アクセス トークンを生成したワークスペースのワークスペース インスタンス名とワークスペース ID に加えて、個人用アクセス トークンの値を含める必要があります。「Databricks 個人用アクセス トークン認証」を参照してください。
-
storage-credentials
コマンド グループのupdate
コマンドを使用して、ストレージ資格情報のisolation mode
をISOLATED
に設定します。Bashdatabricks storage-credentials update <my-storage-credential> \
--isolation-mode ISOLATED \
--profile <profile-name>デフォルトの
isolation-mode
は、メタストアにアタッチされているすべてのワークスペースに対してOPEN
です。 -
workspace-bindings
コマンド グループのupdate-bindings
コマンドを使用して、ワークスペースをストレージ資格情報に割り当てます。Bashdatabricks 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>
ワークスペースからのストレージ資格情報のバインド解除
カタログエクスプローラ または workspace-bindings
CLI コマンド グループを使用してストレージ認証情報へのワークスペースのアクセスを取り消す手順については、「 ストレージ認証情報を 1 つ以上のワークスペースにバインドする」を参照してください。
次のステップ
ストレージ認証情報を表示、更新、削除したり、他のユーザーにストレージ認証情報を使用する権限を付与したりできます。 「ストレージ資格情報の管理」を参照してください。
ストレージの認証情報を使用して外部ロケーションを定義できます。 クラウドストレージをDatabricksに接続するための外部ロケーションの作成を参照してください。