この記事では、Azure マネージド ID を使用して、Unity Catalog ユーザーの代わりにストレージ コンテナーに接続する方法について説明します。
Azure マネージド ID とは何か?
Unity Catalog は、Azure マネージド ID を使って、Unity Catalog ユーザーの代わりにストレージ コンテナーにアクセスするように構成できます。 マネージド ID は、アプリケーションが Microsoft Entra ID 認証をサポートするリソースに接続するときに使用でする ID を提供します。
Unity Catalog でマネージド ID を使用すると、次の 2 つの主要なユース ケースをサポートできます。
- メタストアのマネージド ストレージ アカウント (マネージド テーブルが格納されている場所) に接続するための ID として。
- 他の外部ストレージ アカウントに接続するための ID として (ファイル ベースのアクセスのため、または外部テーブルを介して既存のデータセットにアクセスするため)。
マネージド ID を使用した Unity Catalog の構成には、サービス プリンシパルを使用した Unity Catalog の構成に比べて次のベネフィットがあります。
- マネージド ID では、資格情報を維持したり、シークレットをローテーションしたりする必要がありません。
- Azure Databricks ワークスペースが独自の VNet (VNet インジェクションとも呼ばれます) にデプロイされていて、ストレージ ファイアウォールを使用して Azure Data Lake Storage アカウントを保護する場合は、マネージド ID を使用してそのアカウントにワークスペースを接続できます。 「(VNet が挿入されたワークスペースに推奨) マネージド ID に基づいて Azure Storage への信頼できるアクセスを構成する」を参照してください。
Unity Catalog のマネージド ID を構成する
Unity Catalog で使用するマネージド ID を構成するには、まず Azure で Azure Databricks 用のアクセス コネクタを作成します。 既定では、アクセス コネクタはシステム割り当てマネージド ID を使用してデプロイされます。 代わりに、ユーザー割り当てマネージド ID をアタッチすることを選択できます。 その後、Unity カタログメタストアまたはストレージ資格情報を作成するときに、マネージド ID に Azure Data Lake Storage アカウントへのアクセス権を付与し、アクセス コネクタを使用します。
要求事項
アクセス コネクタを作成する Azure ユーザーまたはサービス プリンシパルには、次の要件があります。
- Azure リソース グループの共同作成者または所有者である。
マネージド ID をストレージ アカウントに付与する Azure ユーザーまたはサービス プリンシパルには、次の要件があります。
- ストレージ アカウントの所有者、またはストレージ アカウントのユーザー アクセス管理者 Azure RBAC ロールを持つユーザーである。
ステップ 1: Azure Databricks 用のアクセス コネクタを作成する
Azure Databricks 用のアクセス コネクタはファースト パーティーの Azure リソースであり、マネージド ID を Azure Databricks アカウントに接続できます。 Azure Databricks の各アクセス コネクタには、システム割り当てマネージド ID、1 つ以上のユーザー割り当てマネージド ID、またはその両方を含めることができます。
リソース グループの共同作成者または所有者として Azure portal にログインします。
[+ 作成] または [新しいリソースを作成] をクリックします。
Azure Databricks 用のアクセス コネクタを検索し、選択します。
Create をクリックしてください。
[基本] タブで、以下のフィールドの値をそのまま使用するか、選択または入力します。
- [サブスクリプション]: これは、アクセス コネクタが作成される Azure サブスクリプションです。 既定値は、現在使用している Azure サブスクリプションです。 テナント内の任意のサブスクリプションにすることができます。
- リソース グループ: アクセス コネクタが作成される Azure リソース グループです。
- [名前]: コネクタの目的を示す名前を入力します。
- [リージョン]: これは、接続先のストレージ アカウントと同じリージョンである必要があります。
[次 ] をクリックし、タグを入力し、[次 ] をクリックします。
[マネージド ID ] タブで、次のようにマネージド ID を作成します。
- システム割り当てマネージド ID を使用するには、状態 を On に設定します
- ユーザー割り当てマネージド ID を追加するには、[+ の追加] をクリックし、1 つ以上のユーザー割り当てマネージド ID を選択します。
[Review + create](レビュー + 作成) をクリックします。
"検証に成功しました" というメッセージが表示されたら、[作成] をクリックします。
デプロイが完了したら、[リソースに移動] をクリックします。
リソース ID を記録しておきます。
リソース ID の形式は次のとおりです。
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
ステップ 2: マネージド ID にストレージ アカウントへのアクセスを許可する
この手順でアクセス許可を付与するには、ストレージ アカウントの所有者またはユーザー アクセス管理者 Azure RBAC ロールが必要です。
- Azure Data Lake Storage アカウントにログインします。
- [アクセス制御 (IAM)] に移動して、[+ 追加] をクリックし、[ロールの割り当ての追加] を選択します。
- [ストレージ BLOB データ共同作成者] ロールを選択し、[次へ] をクリックします。
- [アクセスの割り当て先] で [マネージド ID] を選択します。
- [+ メンバーの選択] をクリックし、Azure Databricks のアクセス コネクタまたはユーザー割り当てマネージド ID のいずれかを選択します。
- コネクタ名またはユーザー割り当て ID を検索して選択し、[確認と割り当て] をクリックします。
または、マネージド ID に特定のコンテナーへのアクセスを許可することにより、ストレージ アカウントへのアクセスを制限することもできます。 上記と同じ手順に従いますが、ストレージ アカウントのストレージ BLOB デリゲータ ロールとコンテナーのストレージ BLOB 共同作成者ロールを付与します。
手順 3: マネージド ID にファイル イベントへのアクセス権を付与する
マネージド ID にファイル イベントへのアクセス権を付与すると、Azure Databricks はクラウド プロバイダーにより生成されたファイル イベント通知にサブスクライブできます。 これにより、ファイル処理の効率が向上します。 詳細については、「 (推奨)外部の場所のファイル イベントを有効にする」を参照してください。
この手順でアクセス許可を付与するには、ストレージ アカウントの所有者またはユーザー アクセス管理者 Azure RBAC ロールが必要です。
- Azure Data Lake Storage アカウントにログインします。
- [アクセス制御 (IAM)] に移動して、[+ 追加] をクリックし、[ロールの割り当ての追加] を選択します。
- [ストレージ キュー データ共同作成者] ロールを選択し、[次へ] をクリックします。
- [アクセスの割り当て先] で [マネージド ID] を選択します。
- [+ メンバーの選択] をクリックし、Azure Databricks のアクセス コネクタまたはユーザー割り当てマネージド ID のいずれかを選択します。
- コネクタ名またはユーザー割り当て ID を検索して選択し、[確認と割り当て] をクリックします。
手順 4: Azure Databricks にユーザーに代わってファイル イベントを構成するアクセス権を付与する
注
この手順は省略可能ですが、強くお勧めします。 ユーザーに代わってファイル イベントを構成するアクセス権を Azure Databricks に付与しない場合、場所ごとにファイル イベントを手動で構成する必要があります。 そうしない場合、Databricks が今後リリースする可能性のある重要な機能へのアクセスが制限されます。 ファイル イベントの詳細については、「 (推奨) 外部の場所のファイル イベントを有効にする」を参照してください。
この手順により、Azure Databricks でファイル イベントを自動的に設定できます。 この手順でアクセス許可を付与するには、マネージド ID と Azure Data Lake Storage アカウントが存在するリソース グループに対する所有者またはユーザー アクセス管理者の Azure RBAC ロールが必要です。
- 「手順3 : マネージド ID にファイル イベントへのアクセス権を付与する」の手順に従い、ストレージ キュー データ共同作成者ロールと共にストレージ アカウント共同作成者をマネージド ID に割り当てます。
- Azure Data Lake Storage アカウントが存在する Azure リソース グループに移動します。
- [アクセス制御 (IAM)] に移動して、[+ 追加] をクリックし、[ロールの割り当ての追加] を選択します。
- EventGrid EventSubscription 共同作成者ロールを選択し、[次へ] をクリックします。
- [アクセスの割り当て先] で [マネージド ID] を選択します。
- [+ メンバーの選択] をクリックし、Azure Databricks のアクセス コネクタまたはユーザー割り当てマネージド ID のいずれかを選択します。
- コネクタ名またはユーザー割り当て ID を検索して選択し、[確認と割り当て] をクリックします。
マネージド ID を使用して Unity Catalog ルート ストレージ アカウントにアクセスする
このセクションでは、Unity Catalog メタストアを作成するとき、ルート ストレージ アカウントへのアクセス権をマネージド ID に付与する方法について説明します。
マネージド ID を使用するように既存の Unity Catalog メタストアをアップグレードする方法については、「既存の Unity Catalog メタストアをアップグレードしてマネージド ID を使用してそのルート ストレージにアクセスする」を参照してください。
Azure Databricks アカウント管理者として、Azure Databricks アカウント コンソールにログインします。
[
カタログ。
[メタストアの作成] をクリックします。
次のフィールドの値を入力します。
メタストアの [名前]。
メタストアをデプロイする [リージョン]。
パフォーマンスを最適にするには、同じクラウド リージョン内にアクセス コネクタ、ワークスペース、メタストア、クラウド ストレージを併置します。
[ADLS Gen 2 のパス]: メタストアのルート ストレージとして使うストレージ コンテナーへのパスを入力します。
abfss://
プレフィックスが自動的に追加されます。Access Connector ID: Azure Databricks アクセス コネクタのリソース ID を次の形式で入力します。
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
(省略可能) マネージド ID: ユーザー割り当てマネージド ID を使用してアクセス コネクタを作成した場合、マネージド ID のリソース ID を入力します。
Create をクリックしてください。
メッセージが表示されたら、メタストアにリンクするワークスペースを選択します。
マネージド ID を使用して Unity Catalog で管理されている外部ストレージにアクセスする
Unity Catalog を使用すると、ストレージの資格情報と外部の場所を使用して、ストレージ アカウント内の既存のデータにアクセスできます。 ストレージ資格情報にはマネージド ID が格納され、外部の場所ではストレージ資格情報への参照と共にストレージへのパスが定義されます。 この方法を使用すると、クラウド ストレージ内の既存のデータへのアクセスを許可および制御したり、Unity Catalog に外部テーブルを登録したりできます。
ストレージ資格情報には、マネージド ID またはサービス プリンシパルを保持できます。 マネージド ID を使用すると、サービス プリンシパルを使用できないネットワーク ルールによって保護されたストレージ アカウントに Unity カタログがアクセスできるという利点があり、シークレットを管理およびローテーションする必要がなくなります。
マネージド ID を使用してストレージ資格情報を作成し、そのストレージ資格情報を外部の場所に割り当てるには、「 Unity カタログを使用してクラウド オブジェクト ストレージに接続する」の手順に従います。
(VNet が挿入されたワークスペースに推奨) マネージド ID に基づいて Azure Storage への信頼できるアクセスを構成する
Azure Databricks ワークスペースが独自の Azure 仮想ネットワーク ( "VNet インジェクション" とも呼ばれます) にデプロイされており、ストレージ ファイアウォールを使用して Azure Data Lake Storage アカウントを保護する場合は、次の手順を実行する必要があります。
- Azure Storage にアクセスするように Azure Databricks ワークスペースを有効にします。
- マネージド ID を有効にして Azure Storage にアクセスします。
ステップ 1. Azure Storage にアクセスするように Azure Databricks ワークスペースを有効にする
Azure Databricks ワークスペースが Azure Data Lake Storage にアクセスできるようにネットワーク設定を構成する必要があります。 サブネットから Azure Data Lake Storage アカウントへの接続を許可するように、プライベート エンドポイントまたは Azure Data Lake Storage 上の仮想ネットワークからのアクセスを構成できます。
手順については、「 Azure Databricks ワークスペースに Azure Data Lake Storage へのアクセス権を付与する」を参照してください。
ステップ 2: マネージド ID を有効にして Azure Storage にアクセスする
このステップは、Azure Storage アカウントで [信頼されたサービス一覧にある Azure サービスがこのストレージ アカウントにアクセスすることを許可します] が無効になっている場合にのみ必要です。 その構成が有効になっている場合:
- ストレージ アカウントと同じテナント内の Azure Databricks 用のアクセス コネクタは、すべてストレージ アカウントにアクセスできます。
- 信頼されたすべての Azure サービスが、ストレージ アカウントにアクセスできます。 「信頼された Azure サービスにアクセスを許可する」を参照してください。
次の手順には、この構成を無効にするステップが含まれています。 Azure portal か、Azure CLI を使用することができます。
Azure portal を使用する
Azure portal にログインし、Azure Storage アカウントを見つけて選択し、[ネットワーク] タブに移動します。
[パブリック ネットワーク アクセス] を [選択した仮想ネットワークと IP アドレスから有効] に設定します。
代わりに、[パブリック ネットワーク アクセス] を [無効] に設定することもできます。 マネージド ID を使用して、パブリック ネットワーク アクセスのチェックをバイパスできます。
[リソース インスタンス] で、[Microsoft.Databricks/accessConnectors] の [リソースの種類] を選択し、Azure Databricks アクセス コネクタを選択します。
[例外] で [信頼されたサービスの一覧にある Azure サービスがこのストレージ アカウントにアクセスすることを許可します] チェックボックスをオフにします。
Azure CLI の使用
-
Microsoft Entra ID サービス プリンシパルを使用してサインインするには、Microsoft Entra ID サービス プリンシパルを使用した Azure CLI ログイン
参照してください。 Azure Databricks ユーザー アカウントを使用してサインインするには、Azure Databricks ユーザー アカウントを使用した Azure CLI ログイン
を参照してください。 ストレージ アカウントにネットワーク ルールを追加します。
az storage account network-rule add \ -–subscription <subscription id of the resource group> \ -–resource-id <resource Id of the access connector for Azure Databricks> \ -–tenant-id <tenant Id> \ -g <name of the Azure Storage resource group> \ -–account-name <name of the Azure Storage resource> \
リソース ID を次の形式で追加します。
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
ネットワーク ルールを作成したら、Azure portal で Azure Storage アカウントに移動し、[リソース インスタンス] の下の [ネットワーク] タブでマネージド ID を表示します。リソースの種類は
Microsoft.Databricks/accessConnectors
です。[例外] で [信頼されたサービスの一覧にある Azure サービスがこのストレージ アカウントにアクセスすることを許可します] チェックボックスをオフにします。
必要に応じて、[パブリック ネットワーク アクセス] を [無効] に設定します。 マネージド ID を使用して、パブリック ネットワーク アクセスのチェックをバイパスできます。
標準的な方法は、この値を [選択した仮想ネットワークと IP アドレスから有効] に設定したままにすることです。
(推奨) サーバーレス SQL ウェアハウスからのアクセスを許可するように Azure Storage ファイアウォールを構成する
サーバーレス SQL ウェアハウスは、お持ちの Azure サブスクリプションではなく、Azure Databricks 用の Azure サブスクリプションで実行されるコンピューティング リソースです。 Azure Data Lake Storage でファイアウォールを構成し、サーバーレス SQL ウェアハウスを使用する予定の場合は、サーバーレス SQL ウェアハウスからのアクセスを許可するようにファイアウォールを構成する必要があります。
手順については、「サーバーレス コンピューティング アクセス用のファイアウォールを構成する」を参照してください。
マネージド ID を使用してルート ストレージにアクセスするように既存の Unity Catalog メタストアをアップグレードする
サービス プリンシパルを使用して作成された Unity Catalog メタストアがあり、マネージド ID を使用するようにアップグレードする場合は、API 呼び出しを使用して更新できます。
「Unity Catalog のマネージド ID を構成する」の手順に従って、Azure Databricks 用のアクセス コネクタを作成し、Unity Catalog メタストア ルート ストレージに使用されているストレージ コンテナーへのアクセス許可を割り当てます。
アクセス コネクタは、システム割り当てマネージド ID またはユーザー割り当てマネージド ID のいずれかを使用して作成できます。
アクセス コネクタのリソース ID を書き留めます。 ユーザー割り当てマネージド ID を使用する場合、そのリソース ID も書き留めます。
アカウント管理者として、メタストアに割り当てられている Azure Databricks ワークスペースにログインします。
ワークスペース管理者である必要はありません。
以下を含む Azure Databricks 認証構成プロファイルをローカル環境に作成します。
- 個人用アクセス トークンを生成したワークスペースのワークスペース インスタンス名とワークスペース ID。
- 個人用アクセス トークンの値。
「Azure Databricks 個人用アクセス トークン認証」をご覧ください。
Databricks CLI を使用し、次のコマンドを実行してストレージの資格情報を再作成します。
プレースホルダー値を次のように置き換えます。
-
<credential-name>
: ストレージ資格情報の名前。 -
<access-connector-id>
:/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
の形式の、Azure Databricks アクセス コネクタのリソース ID -
<managed-identity-id>
: ユーザー割り当てマネージド ID を使用してアクセス コネクタを作成した場合、マネージド ID のリソース ID を指定します。 -
<profile-name>
: Azure Databricks 認証構成プロファイルの名前。
databricks storage-credentials create --json '{ "name\": "<credential-name>", "azure_managed_identity": { "access_connector_id": "<access-connector-id>", "managed_identity_id": "<managed-identity-id>" } }' --profile <profile-name>
-
応答内のストレージ資格情報 ID を記録しておきます。
次の Databricks CLI コマンドを実行して、
metastore_id
を取得します。<profile-name>
を Azure Databricks 認証構成プロファイルの名前で置き換えます。databricks metastores summary --profile <profile-name>
次の Databricks CLI コマンドを実行して、新しいルート ストレージ資格情報でメタストアを更新します。
プレースホルダー値を次のように置き換えます。
-
<metastore-id>
: 前のステップで取得したメタストア ID。 -
<storage-credential-id>
: ストレージ資格情報 ID。 -
<profile-name>
: Azure Databricks 認証構成プロファイルの名前。
databricks metastores update <metastore-id> \ --storage-root-credential-id <storage-credential-id> \ --profile <profile-name>
-