サービス プリンシパルを使って Unity Catalog のマネージド ストレージを作成する (レガシ)
重要
このドキュメントは廃止され、更新されない可能性があります。 このコンテンツで言及されている製品、サービス、テクノロジは、サポートされなくなりました。 現在の管理者ドキュメントを表示するには、「Azure Databricks アカウントの管理」を参照してください。
この記事では、サービス プリンシパルを使って外部の場所とマネージド ストレージを作成する従来の方法について説明します。 Databricks では、サービス プリンシパルの代わりに、ストレージ コンテナーへのアクセスを許可する ID として Azure マネージド ID を使うことを強くお勧めします。 「Unity Catalog で Azure マネージド ID を使用してストレージにアクセスする」をご覧ください。
ただし、サービス プリンシパルを引き続き使う場合、またはサービス プリンシパルを使う既存の Unity Catalog のマネージド ストレージまたは外部の場所があり、そのプロセスを理解したい場合は、このアーカイブ記事の手順を参照してください。
サービス プリンシパルを使ってアクセスするメタストアを作成する (レガシ)
サービス プリンシパルを使ってアクセスする Unity Catalog メタストアを作成するには:
Azure Data Lake Storage Gen2 のストレージ アカウントを作成します。
このアカウントのストレージコンテナは、メタストアのすべてのマネージド テーブルを保持しています。ただし、独自のマネージド ストレージの場所が指定されたカタログまたはスキーマ内にあるテーブルは、このコンテナには含まれません。
「Azure Data Lake Storage Gen2 で使用するストレージ アカウントを作成する」をご覧ください。 これは、Azure Databricks ワークスペースと同じリージョンの Premium パフォーマンス Azure Data Lake Storage Gen2 アカウントに存在する必要があります。
新しいストレージ アカウントにコンテナーを作成します。
コンテナーの ADLSv2 URI を書き留めます。これは次の形式です。
abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<metastore-name>
次の手順では、
<storage-container>
をこの URI に置き換えます。Microsoft Entra ID で、「でサービス プリンシパルと Microsoft Entra ID (Azure Active Directory) を使ってストレージにアクセスする」の手順に従って、サービス プリンシパルを作成し、ストレージ アカウントへのアクセス許可を割り当てます。
Unity Catalog では、このサービス プリンシパルを使用して、Unity Catalog ユーザーに代わってストレージ アカウント内のコンテナーにアクセスします。 サービス プリンシパルのクライアント シークレットを生成します。 「MS Entra サービス プリンシパルの認証」を参照してください。 サービス プリンシパルのクライアント シークレット、クライアント アプリケーション ID、およびこのサービス プリンシパルを作成したディレクトリ ID を書き留めます。 次の手順では、
<client-secret>
、<client-application-id>
、<directory-id>
をこれらの値に置き換えます。これらのプロパティを書き留めます。これらはメタストアの作成時に使用します。
<aad-application-id>
- ストレージ アカウントのリージョン
<storage-container>
- サービス プリンシパルの
<client-secret>
、<client-application-id>
、および<directory-id>
アカウント コンソール UI でサービス プリンシパルを使用して、アクセスするメタストアを作成することはできません。 代わりに、アカウント メタストア API を使用してください。 次に例を示します。
curl -n -X POST --header 'Content-Type: application/json' https://<account-domain>/api/2.0/accounts/<account-id>/metastores --data '{ "metastore_info": { "name": "<metastore-name>", "storage_root": "<storage-container>", "region": "<region>" "storage_root_credential_id" } }'
アカウントレベル API に対して認証する方法については、「MS Entra サービス プリンシパルの認証」を参照してください。
メタストアを作成したユーザーが、その所有者になります。 Databricks では、メタストア所有者ロールをグループに再割り当てすることをお勧めします。 「メタストア管理者を割り当てる」を参照してください。
メタストアの ID をメモしておきます。 メタストアのプロパティを表示したとき、メタストアの ID は URL の
/data
より後ろで/configuration
より前の部分になります。メタストアは作成されましたが、Unity Catalog ではまだデータを書き込めません。 メタストアの設定を完了するには、次の手順を実行します。
別のブラウザーで、メタストアにワークスペース管理者として割り当てられているワークスペースにログインします。
ワークスペースの URL (
https://
の後の URL の最初の部分でazuredatabricks.net
を含める) をメモしておきます。個人用アクセス トークンを生成します。 トークン管理 API に関するページを参照してください。
ホーム ディレクトリ内の
.netrc
ファイルに個人用アクセス トークンを追加します。 これにより、シェルのコマンド履歴に個人用アクセス トークンが表示されるのを防ぐことで、セキュリティが向上します。 トークン管理 API に関するページを参照してください。次の cURL コマンドを実行して、メタストアのルート ストレージ資格情報を作成します。 プレースホルダー値を次のように置き換えます。
<workspace-url>
: 個人用アクセス トークンが生成されたワークスペースの URL。<credential-name>
: ストレージ資格情報の名前。<directory-id>
: 作成したサービス プリンシパルのディレクトリ ID。<application-id>
: 作成したサービス プリンシパルのアプリケーション ID。<client-secret>
: (クライアント シークレット ID ではなく) サービス プリンシパルに対して生成したクライアント シークレットの値。
curl -n -X POST --header 'Content-Type: application/json' https://<workspace-url>/api/2.0/unity-catalog/storage-credentials --data "{ \"name\": \"<credential-name>\", \"azure_service_principal\": { \"directory_id\": \"<directory-id>\", \"application_id\": \"<application-id>\", \"client_secret\": \"<client-secret>\" } }"
ストレージ資格情報 ID をメモしておきます。これは、cURL コマンドの応答の
id
の値です。
次の cURL コマンドを実行して、新しいルート ストレージ資格情報でメタストアを更新します。 プレースホルダー値を次のように置き換えます。
<workspace-url>
: 個人用アクセス トークンが生成されたワークスペースの URL。<metastore-id
>: メタストアの ID。<storage-credential-id
>: 前のコマンドのストレージ資格情報の ID。
curl -n -X PATCH --header 'Content-Type: application/json' https://<workspace-url>/api/2.0/unity-catalog/metastores/<metastore-id> --data "{\"storage_root_credential_id\": \"<storage-credential-id>\"}"
これで、メタストアにワークスペースを追加できます。
サービス プリンシパルを使うストレージの資格情報を作成する (レガシ)
サービス プリンシパルを使用してストレージ資格情報を作成するには、Azure Databricks アカウント管理者である必要があります。サービス プリンシパル ストレージ資格情報を作成するアカウント管理者は、所有権を別のユーザーまたはグループに委任して、その資格情報に対するアクセス許可を管理できます。
まず、サービス プリンシパルを作成し、「サービス プリンシパルと Microsoft Entra ID (Azure Active Directory) を使ってストレージにアクセスする」の手順に従って、ストレージ アカウントへのアクセス権を付与します。
Catalog Explorer を使用してサービス プリンシパルのストレージ資格情報を追加することはできません。 代わりに、Storage Credentials API を使用します。 次に例を示します。
curl -X POST -n \
https://<databricks-instance>/api/2.1/unity-catalog/storage-credentials \
-d '{
"name": "<storage-credential-name>",
"read_only": true,
"azure_service_principal": {
"directory_id": "<directory-id>",
"application_id": "<application-id>",
"client_secret": "<client-secret>"
},
"skip_validation": "false"
}'
Databricks Terraform プロバイダーと databricks_storage_credential を使用して、ストレージ資格情報を作成することもできます。