このページでは、Azureマネージド ID を使用して、Unity カタログ ユーザーの代わりにストレージ コンテナーに接続する方法について説明します。
Azureマネージド ID とは
Unity Catalog は、Azure マネージド ID を使用して、Unity カタログ ユーザーに代わってストレージ コンテナーにアクセスするように構成できます。 マネージド 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 カタログで使用するマネージド ID を構成するには、まず、AzureでAzure Databricks用のアクセス コネクタを作成します。 既定では、アクセス コネクタはシステム割り当てマネージド ID を使用してデプロイされます。 代わりに、ユーザー割り当てマネージド ID をアタッチすることを選択できます。 その後、Azure Data Lake Storage アカウントへのアクセス権をマネージド ID に付与し、Unity カタログメタストアまたはストレージ資格情報を作成するときにアクセス コネクタを使用します。
要求事項
アクセス コネクタを作成するAzureユーザーまたはサービス プリンシパルは、次の操作を行う必要があります。
- Azure リソース グループの
ContributorまたはOwner。
マネージド ID をストレージ アカウントに付与するAzureユーザーまたはサービス プリンシパルは、次の操作を行う必要があります。
-
Ownerのユーザー、もしくはストレージ アカウント上でUser Access AdministratorAzure RBAC ロールを持つユーザーであること。
手順 1: Azure Databricks用のアクセス コネクタを作成する
Access Connector for Azure Databricks は、マネージド ID を Azure Databricks アカウントに接続できるファーストパーティの Azure リソースです。 Azure Databricksの各アクセス コネクタには、システム割り当てマネージド ID、1 つ以上のユーザー割り当てマネージド ID、またはその両方を含めることができます。
リソース グループの共同作成者または所有者としてAzure portalにログインします。
[+ 作成] または [新しいリソースを作成] をクリックします。
Access Connector for Azure Databricks を検索してそれを選択します。
Create をクリックしてください。
[基本] タブで、以下のフィールドの値をそのまま使用するか、選択または入力します。
- Subscription: アクセス コネクタが作成される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 にストレージ アカウントへのアクセスを許可する
この手順でアクセス許可を付与するには、ストレージ アカウントに Owner または User Access Administrator Azure RBAC ロールが必要です。
マネージド ID にストレージ アカウントとコンテナーへのアクセスを許可する場合は、次のオプションがあります。
-
Storage Blob Data Contributorロールを使用して、ストレージ アカウント全体に読み取りと書き込みのアクセス権を付与します。 -
Storage Blob Delegatorロールを使用してストレージ アカウントに対してより制限されたロールを付与し、Storage Blob Data Contributorロールを使用して特定のコンテナーへの読み取りおよび書き込みアクセスを許可します。
次の手順では、ストレージ アカウントに Storage Blob Data Contributor ロールを付与していることを前提としていますが、必要に応じて他のオプションに置き換えることができます。
- Azure Data Lake Storage アカウントにログインします。
- Access Control (IAM) に移動し、+ Add をクリックし、ロールの割り当ての追加 を選択します。
- [ストレージ BLOB データ共同作成者] ロールを選択し、[次へ] をクリックします。
- [アクセスの割り当て先] で [マネージド ID] を選択します。
- + メンバーの選択をクリックし、Access コネクタ (Azure Databricks) または ユーザー割り当てのマネージドID を選択します。
- コネクタ名またはユーザー割り当て ID を検索して選択し、[確認と割り当て] をクリックします。
手順 3: マネージド ID にファイル イベントへのアクセス権を付与する
必要なAzureロールを構成し、外部の場所のファイル イベントを有効にするには、「外部の場所のファイル イベントを設定する」を参照してください。
マネージド ID を使用して Unity Catalog ルート ストレージ アカウントにアクセスする
このセクションでは、Unity Catalog メタストアを作成するとき、ルート ストレージ アカウントへのアクセス権をマネージド ID に付与する方法について説明します。
マネージド ID を使用するように既存の Unity Catalog メタストアをアップグレードする方法については、「既存の Unity Catalog メタストアをアップグレードしてマネージド ID を使用してそのルート ストレージにアクセスする」を参照してください。
Azure Databricks アカウント管理者として、Azure Databricks アカウント コンソールにログインします。
[
カタログ。
[メタストアの作成] をクリックします。
次のフィールドの値を入力します。
メタストアの [名前]。
メタストアをデプロイする [リージョン]。
パフォーマンスを最適にするには、同じクラウド リージョン内にアクセス コネクタ、ワークスペース、メタストア、クラウド ストレージを併置します。
[ADLS Gen 2 のパス]: メタストアのルート ストレージとして使うストレージ コンテナーへのパスを入力します。
パスが
abfss://で始まることを確認します。Access コネクタ 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 Databricks ワークスペースを有効にしてAzure Storageにアクセスする
Azure Databricks ワークスペースがAzure Data Lake Storageにアクセスできるようにネットワーク設定を構成する必要があります。 まず、Azure Databricks ワークスペースが、 Azure 仮想ネットワーク (VNet インジェクション) にAzure Databricksをデプロイした後に、独自の仮想ネットワークにデプロイされていることを確認します。 その後、private エンドポイントまたは仮想ネットワークからのアクセスを構成して、サブネットからAzure Data Lake Storage アカウントへの接続を許可できます。
サーバーレス SQL ウェアハウスなどのサーバーレス コンピューティングを使用している場合は、サーバーレス コンピューティング プレーンから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 アカウントを見つけて選択し、Networking タブに移動します。
[パブリック ネットワーク アクセス] を [選択した仮想ネットワークと IP アドレスから有効] に設定します。
代わりに、[パブリック ネットワーク アクセス] を [無効] に設定することもできます。 マネージド ID を使用して、パブリック ネットワーク アクセスのチェックをバイパスできます。
Resource インスタンスで、Resource 型としてMicrosoft.Databricks/accessConnectorsを選択し、Azure Databricks アクセス コネクタを選択します。
Exceptions で、信頼されたサービスの一覧にある Allow Azure サービスがこのストレージ アカウントにアクセスすることを許可する チェックボックスのチェックを外します。
Azure CLIを使用する
Azure CLIをインストールし、sign in。 ユーザー アカウントまたはサービス プリンシパルを使用してサインインするには、「
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 アカウントに移動し、Resource instances セクションの
Microsoft.Databricks/accessConnectorsリソースの種類における Networking タブでマネージド ID を表示します。[Exceptions で、信頼されたサービスのリストにある Azure サービスにこのストレージ アカウントへのアクセスを許可する チェック ボックスをオフにします。
必要に応じて、[パブリック ネットワーク アクセス] を [無効] に設定します。 マネージド ID を使用して、パブリック ネットワーク アクセスのチェックをバイパスできます。
標準的な方法は、この値を [選択した仮想ネットワークと IP アドレスから有効] に設定したままにすることです。
(推奨) サーバーレス SQL ウェアハウスからのアクセスを許可するように Azure ストレージ ファイアウォールを構成する
Serverless SQL warehouses は、Azure のお客様自身のサブスクリプションではなく、Azure Databricks の Azure サブスクリプションで実行されるコンピューティング リソースです。 Azure Data Lake Storageでファイアウォールを構成し、サーバーレス SQL ウェアハウスを使用する予定の場合は、サーバーレス SQL ウェアハウスからのアクセスを許可するようにファイアウォールを構成する必要があります。
手順については、 サーバーレス コンピューティング アクセス用のファイアウォールの構成 (レガシ) に関する記事を参照してください。
マネージド ID を使用してルート ストレージにアクセスするように既存の Unity Catalog メタストアをアップグレードする
サービス プリンシパルを使用して作成された Unity Catalog メタストアがあり、マネージド ID を使用するようにアップグレードする場合は、API 呼び出しを使用して更新できます。
Azure Databricks用の Access Connector を作成し、「
Unity Catalog のマネージド ID を構成する0」の手順に従って、Unity カタログのメタストア ルート ストレージに使用されているストレージ コンテナーにアクセス許可を割り当てます。 アクセス コネクタは、システム割り当てマネージド ID またはユーザー割り当てマネージド ID のいずれかを使用して作成できます。
アクセス コネクタのリソース ID を書き留めます。 ユーザー割り当てマネージド ID を使用する場合、そのリソース ID も書き留めます。
アカウント管理者として、メタストアに割り当てられているAzure Databricks ワークスペースにログインします。
ワークスペース管理者である必要はありません。
次を含むAzure Databricks認証構成プロファイルをローカル環境に作成します。
- 個人用アクセス トークンを生成したワークスペースのワークスペース インスタンス名とワークスペース ID。
- 個人用アクセス トークンの値。
「個人用アクセス トークン認証 (レガシ)」を参照してください。
Databricks CLI を使用し、次のコマンドを実行してストレージの資格情報を再作成します。
プレースホルダー値を次のように置き換えます。
-
<credential-name>: ストレージ資格情報の名前。 -
<access-connector-id>: Azure Databricks アクセス コネクタのリソース ID(形式:/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>) -
<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>-