Unity カタログ サービスの資格情報を使用して外部クラウド サービスに接続する

この記事では、Unity カタログのサービス資格情報を使用して外部クラウド サービスに接続する方法について説明します。 Unity Catalog のサービス資格情報オブジェクトは、ユーザーが Azure Databricks から接続する必要がある外部クラウド サービスへのアクセスを提供する長期的なクラウド資格情報をカプセル化します。

関連項目:

必要条件

サービス資格情報を使用して外部クラウド サービスに接続するには、次が必要です。

  • Unity Catalog が有効な Azure Databricks ワークスペース。

  • Databricks Runtime 16.2 以降にあるコンピューティング リソース。

    SQLウェアハウスはサービス認証情報を直接使うには対応されていません。 「Python UDFでサービス認証情報を使う」を参照してください。

    サービス資格情報のパブリック プレビュー バージョンは、Databricks Runtime 15.4 LTS 以降で利用できます。Python はサポートされていますが、Scala はサポートされません。

  • クラウド サービスへのアクセスを許可する Unity カタログ メタストアで作成されたサービス資格情報。

  • サービス認証情報に対する ACCESS 特権、またはサービス認証情報の所有権。

コードでサービス資格情報を使用する

このセクションでは、ノートブックでサービス資格情報を使用する例を示します。 プレースホルダーの値を置き換えます。 これらの例では、アクセスするクライアント サービスに依存する必要なライブラリのインストールが必ずしも示されるとは限りません。

サポートされているのはPythonのみです。

Python UDFでサービス認証情報を使う

UDF では、 databricks.service_credentials.getServiceCredentialsProvider() を使用してサービス資格情報にアクセスします。 ノートブックで使われている dbutils.credentials.getServiceCredentialsProvider() 関数はUDF実行コンテキストでは利用できません。

要件はUDFの種類によって異なります:

UDF の種類 必要条件
PySpark のセッション スコープ スカラー UDF クラシック コンピュート上の Databricks Runtime 17.1 以降、または環境バージョン 3 以降で実行されるサーバーレス ノートブックもしくはジョブ セッション。
Batch Unity Catalog Python UDF Databricks Runtime 16.3以上をクラシックコンピュートで使用;サーバーレスコンピュート;ProおよびサーバーレスSQLウェアハウスで対応可能です。 環境バージョン6は必須ではありません。
Scalar Unity Catalog Python UDF Databricks Runtime 18.1以上をクラシックコンピュートで搭載しています。 サーバーレスコンピュートやプロ・サーバーレスのSQLウェアハウスでは、UDFの environment_version を明示的に 6 以上に設定してください。 ENVIRONMENT節全体や設定environment_version = 'None'を省略しても、これらの計算タイプではこの機能が有効になりません。 クラシックコンピュートは環境バージョン6を必要としません。

サーバーレス SQL ウェアハウス上のスカラーまたはバッチ Unity Catalog Python UDF からアウトバウンドコールを行うには、ワークスペースのPreviews ページで、Enable networking for isolated workloads in Serverless SQL Warehouses Public Preview を有効にしてください。 Pro SQL Warehouseではこのプレビューは必要ありません。

サービス認証を宣言するUnityカタログUDFを作成するには、関数作成者が認証情報に ACCESS を持っている必要があります。 サーバーレス計算、プロおよびサーバーレスSQLウェアハウス、標準アクセスモードの計算では、呼び出し者は通常の関数権限( EXECUTEを含む)を必要としますが、認証情報に付与 ACCESS 必要はありません。 専用アクセスモードの計算では、発信者も ACCESSが必要です。

PySparkのセッションスコープUDFは発信者の権限を利用します。 発信者はサービス認証情報に ACCESS を持っている必要があります。専用アクセスモードの計算では、発信者は MANAGEを持っています。

環境バージョンとカスタム依存要件を参照してください。

Python の例: 特定のサービス資格情報を使用するように Azure SDK クライアントを構成する

from azure.keyvault.secrets import SecretClient # example Azure SDK client

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

コンピューティング リソースの既定のサービス資格情報を指定する

必要に応じて、環境変数を設定することで、汎用またはジョブコンピューティング クラスターの既定のサービス資格情報を指定できます。 既定では、認証が指定されていない場合、SDK はそのサービス資格情報を使用します。 ユーザーは、外部クラウド サービスに接続するために、そのサービス資格情報に対する ACCESS を引き続き必要とします。 Databricks では、コード内のサービス資格情報に名前を付けるよりもコードの移植性が低下するため、この方法は推奨されません。

注

サーバーレス コンピューティングと SQL ウェアハウスは環境変数をサポートしていないため、既定のサービス資格情報はサポートされません。

  1. クラスターの編集ページを開きます。

    クラシック コンピューティングの管理を参照してください。

  2. ページの下部にある [ 詳細設定 ] をクリックし、[ Spark ] タブに移動します。

  3. <your-service-credential>を置き換えて、環境変数に次のエントリを追加します。

    DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME=<your-service-credential>

次のコード サンプルでは、サービス資格情報を指定しません。 代わりに、DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME 環境変数で指定されたサービス資格情報を使用します。

Python

既定のサービス資格情報を使用している場合は、引数として資格情報を指定する必要はありません。

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

これを、Python の例と比較します。特定のサービス資格情報を使用するように Azure SDK クライアントを構成します。この場合、DefaultAzureCredential はインポートされず、資格情報の仕様が追加されます。

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')