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
-
Log in to a workspace that is linked to the metastore.
-
In the sidebar, click
Catalog.
-
On the Quick access page, click the External data > button and go to the Credentials tab.
-
Select the storage credential and go to the Workspaces tab.
-
On the Workspaces tab, clear the All workspaces have access checkbox.
If your storage credential is already bound to one or more workspaces, this checkbox is already cleared.
-
Click Assign to workspaces and enter or find the workspaces you want to assign.
To revoke access, go to the Workspaces tab, select the workspace, and click Revoke. To allow access from all workspaces, select the All workspaces have access checkbox.
There are two Databricks CLI command groups and two steps required to assign a storage credential to a workspace.
In the following examples, replace <profile-name>
with the name of your Databricks authentication configuration profile. It should include the value of a personal access token, in addition to the workspace instance name and workspace ID of the workspace where you generated the personal access token. See Databricks personal access token authentication.
-
Use the
storage-credentials
command group’supdate
command to set the storage credential’sisolation mode
toISOLATED
:Bashdatabricks storage-credentials update <my-storage-credential> \
--isolation-mode ISOLATED \
--profile <profile-name>The default
isolation-mode
isOPEN
to all workspaces attached to the metastore. -
Use the
workspace-bindings
command group’supdate-bindings
command to assign the workspaces to the storage credential:Bashdatabricks workspace-bindings update-bindings storage-credential <my-storage-credential> \
--json '{
"add": [{"workspace_id": <workspace-id>}...],
"remove": [{"workspace_id": <workspace-id>}...]
}' --profile <profile-name>Use the
"add"
and"remove"
properties to add or remove workspace bindings.
Read-only binding (BINDING_TYPE_READ_ONLY
) is not available for storage credentials. Therefore there is no reason to set binding_type
for the storage credentials binding.
To list all workspace assignments for a storage credential, use the workspace-bindings
command group’s get-bindings
command:
databricks workspace-bindings get-bindings storage-credential <my-storage-credential> \
--profile <profile-name>
ワークスペースからのストレージ資格情報のバインド解除
Catalog Explorer または workspace-bindings
CLI コマンド グループを使用してストレージ認証情報へのワークスペースのアクセスを取り消す手順については、「 ストレージ認証情報を 1 つ以上のワークスペースにバインドする」を参照してください。
次のステップ
ストレージ認証情報を表示、更新、削除したり、他のユーザーにストレージ認証情報を使用する権限を付与したりできます。 「ストレージ資格情報の管理」を参照してください。
ストレージの認証情報を使用して外部ロケーションを定義できます。 クラウドストレージをDatabricksに接続するための外部ロケーションの作成を参照してください。