M2M フローで Open ID Connect (OIDC) フェデレーションを使用して共有データを読み取る
このページでは、データ受信者が独自のIDプロバイダー(IdP)に登録されたPythonクライアントを使用して、Databricksで作成されたOpenSharing共有にアクセスする方法を説明します。
この「マシン間」(M2M) OAuth クライアント資格情報付与フローは、仮想マシン上で実行される夜間ジョブなどのアプリケーションが自律的にデータにアクセスするようなシナリオで通常使用されます。この認証フローはOIDCフェデレーションを使用します。受信側のIdPは、短期間のOAuthトークンとして機能するJSON Webトークン(JWT)を発行し、Databricksがそれを認証します。このDatabricksからオープン共有認証フローは、Unity Catalogが有効なDatabricksワークスペースにアクセスできない受信者向けです。
オープンOIDCフェデレーションは、Databricks以外の受信者をプロバイダーに接続するために、長期間有効なDatabricksが発行したベアラー トークンを使用することの代替手段です。OAuthクライアント資格情報グラントフローでは、OAuthアプリケーションは受信者のIdPにサービスプリンシパル(SP)として登録されます。Databricks、プロバイダー、および受信者の間で、長期的なシークレットや資格情報は共有されません。代わりにベアラー トークンを使用して共有への認証を管理する方法に関する情報については、ベアラー トークンを使用して非Databricks ユーザーの受信者オブジェクトを作成する (Databricks-to-Open 共有)を参照してください。
このページは受信者向けです。プロバイダーがDatabricksで受信者に対してOIDCフェデレーションを有効にする方法については、Open ID Connect (OIDC) フェデレーションをOpenSharing受信者向けに有効にするを参照してください。
「ユーザーマシン間」 (U2M) フローに関する情報については、U2M フローで Open ID Connect (OIDC) フェデレーションを使用して共有されたデータを読み取るを参照してください。
アプリを IdP に登録する
OIDC フェデレーションを使用してクライアントアプリケーションが OpenSharing シェアにアクセスできるようにするには、IdP に OAuth アプリケーションを登録する必要があります。本セクションでは、Microsoft Entra ID で OAuth アプリケーションを登録する方法について説明します。他のIdPについては、ドキュメントを参照してください。
Microsoft Entra ID にアプリを登録する
これらの手順は一般的なガイダンスとして意図されており、常に最新の状態に保たれることを保証するものではありません。詳細なアプリ登録手順については、この Microsoft クイックスタートを参照してください。
- 少なくともアプリケーション開発者として、Microsoft Entra管理センターにサインインします。
- 「**アプリの登録**」に移動し、リダイレクトURLなしで新しい登録を作成します。
- アプリで、 証明書とシークレット > シークレットの作成に移動します。
- シークレットの値をコピーし、安全に保管してください。
- アプリの「**アプリの登録 > 概要**」ページで、**アプリケーション (クライアント) ID**をコピーします。
- マニフェストを更新して、アプリをV2アプリケーションに変更します。
- アプリの**管理**セクションで、**マニフェスト**を選択します。
- エディタで、
accessTokenAcceptedVersionを2に設定します。 - 変更を保存します。
必要な情報を Databricks データプロバイダーに送信する
受信者であるお客様が Microsoft Entra ID を使用している場合、これらの手順に従うことでプロバイダーが必要とするフィールドを取得できます。最新の手順については、常に Microsoft Entra ID のドキュメントを参照してください。
-
発行者URL :
https://login.microsoftonline.com/{tenantId}/v2.0。{tenantId}を Entra テナント ID に置き換えてください。テナント ID が不明な場合は、Microsoft Entra ID のドキュメントを参照してください。 -
Subject Claim :データにアクセスするエンティティを識別するJWTペイロードのフィールドを指します。使用される特定のフィールドは、IDプロバイダー(IdP)およびユースケースによって異なります。たとえば、Microsoft Entra IDのM2Mアプリケーションの場合、サブジェクトクレームは
azpであり、これは、トークンの使用を承認されたアプリケーションのクライアントIDを表します。詳細については、Microsoft Entra ID アクセストークンクレームリファレンスを参照してください。 -
件名 : 受信者のIDプロバイダー(IdP)に登録されているOAuthアプリケーションの一意の識別子を指します。
例えば、Microsoft Entra IDでは、これは アプリケーション (クライアント) ID です。登録中にクライアントIDをコピーしなかった場合は、IdP固有のステップに従って取得できます。Microsoft Entra IDについては、次のステップに従ってください。- Microsoft Entra管理センターで**[アプリの登録]**に移動します。
- 登録済みのOAuthアプリケーションを選択してください。
- 概要ページで「**アプリケーション (クライアント) ID**」を見つけます。
その他の IdP の場合は、同等の識別子を取得するためにドキュメントを参照してください。
-
対象: Databricksへのマシン認証の場合、通常はリソースの
clientIdを使用しますが、他の有効なリソース識別子を指定することもできます。これを前のステップでコピー済みのはずです。そうでない場合は、Microsoft Entra 管理センターに移動し、「アプリの登録」を検索し、登録済みのアプリケーションを選択し、概要ページで「アプリケーション (クライアント) ID」を見つけてください。 別のリソースIDを使用することもできます。
プロバイダーと、発行者、サブジェクトクレーム、サブジェクト、オーディエンスを共有します。
Databricks プロバイダーによって共有される OAuth プロファイルファイルを使用するようにアプリを構成します
プロバイダーからOpenSharingの共有にアクセスするようにアプリを構成するには:
-
Databricks プロバイダーから共有された OIDC プロファイルポータルの URL にアクセスしてください。
まだお受け取りになっていない場合は、URLをご請求ください。
-
ポータルページで M2M タイルを選択し、 OAuth の下で ファイルをダウンロード をクリックしてください。
-
ダウンロードした
oauth_config.shareのJSONファイルを変更して、clientId、clientSecret、およびscopeを追加します。アプリを登録したときに、クライアント ID とクライアント シークレットをコピーしている必要があります。クライアント シークレットを再度取得することはできません。クライアント ID を取得するには、前のセクションの手順を参照してください。
アプリの
{clientId}をオーディエンスとして使用することを選択した場合、スコープは{clientId}/.defaultである必要があります。たとえば、オーディエンスが61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6の場合、スコープは61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6/.defaultである必要があります。サンプルプロファイル:
JSON{
"shareCredentialsVersion": 2,
"endpoint": "https://oregon.cloud.databricks.com/api/2.0/delta-sharing/metastores/11a11aaa-11aa-11a12-11aa-111a1aa11111/recipients/a11da11aa1-a1a1-11a1-a11a-1111a11111aa",
"tokenEndpoint": "https://login.microsoftonline.com/a111a111-1111-1aaa-1aa1-1aa1111aa1/oauth2/v2.0/token",
"type": "oauth_client_credentials",
"clientId": "[REPLACE_WITH_YOUR_CLIENT_ID]",
"clientSecret": "[REPLACE_WITH_YOUR_CLIENT_SECRET]",
"scope": "[REPLACE_WITH_YOUR_SCOPE]"
} -
最新のOpenSharing Python OSS クライアントをインストールおよび設定します。
OpenSharing Python OSS クライアントの最新バージョンが必要です。
Bashpython3 -m venv .venv
source .venv/bin/activate
pip3 install "delta-sharing>=1.3.1" -
更新された
oauth_config.shareファイルを保存します。 -
構成をテストします。
テストスクリプト「
test.py」を作成します。Pythonimport delta_sharing
# Point to the profile file. It can be a file on the local file system or a file on a remote storage.
profile_file = "oauth_config.share"
# Create a SharingClient.
client = delta_sharing.SharingClient(profile_file)
#
# List all shared tables.
tables = client.list_all_tables()
print(tables)
# replace the following line with the coordinates of the shared table
#table_url = profile_file + "#sample_share.sample_db.sample_table"
# Fetch 10 rows from a table and convert it to a Pandas DataFrame.
# This can be used to read sample data from a table that cannot fit in the memory.
#df = delta_sharing.load_as_pandas(table_url, limit=10)
#print(df)スクリプトを実行します。
Pythonpython3 test.pyスクリプトは共有テーブルを一覧表示する必要があります。