次の方法で共有


Python クライアントと Open ID Connect (OIDC) のフェデレーションを使用して機械間フロー (オープン共有) で Delta Sharing の共有を受け取る

このページでは、データ受信者が独自の ID プロバイダー (IdP) に登録されている Python クライアントを使用して、Databricks で作成された差分共有共有へのアクセスを確立する方法について説明します。 この "マシン間" (M2M) OAuth クライアント資格情報付与フローは、通常、仮想マシンで実行されている夜間ジョブなどのアプリケーションが自律的にデータにアクセスするシナリオで使用されます。 この認証フローでは OIDC フェデレーションが使用されるため、受信者の IdP によって発行された JSON Web トークン (JWT) を、Databricks によって認証される有効期間の短い OAuth トークンとして使用できます。 この Databricks オープン共有認証フローは、Unity Catalog 対応 Databricks ワークスペースにアクセスできない受信者を対象にしています。

Open OIDC フェデレーションは、有効期間が長い Databricks によって発行されたベアラー トークンを使用して、Databricks 以外の受信者をプロバイダーに接続する代わりに使用できます。 OAuth クライアント資格情報の付与フローでは、OAuth アプリケーションが受信者の IdP のサービス プリンシパル (SP) として登録されます。 有効期間が長いシークレットや資格情報は、Databricks、プロバイダー、受信者の間で共有されません。 代わりにベアラー トークンを使用して共有への認証を管理する方法については、ベアラー トークンを使用して Databricks 以外のユーザーのための受信者オブジェクトを作成(オープン シェアリング)を参照してください。

この記事は受信者を対象としています。 プロバイダーが Azure Databricks の受信者に対して OIDC フェデレーションを有効にする方法については、「Open ID Connect (OIDC) フェデレーションを使用してDelta Sharing の共有 (オープンシェア) に対する認証を有効にする」を参照してください。 "ユーザーからマシンへの" (U2M) フローの詳細については、ユーザーからマシンへのフロー (オープン共有) で Open ID Connect (OIDC) フェデレーションを使用して Delta Sharing の共有を受信するを参照してください。

IdP にアプリを登録する

OIDC フェデレーションを使用してクライアント アプリケーションにDelta Sharingの共有アクセス権を付与するには、事前にOAuthアプリケーションをIdPに登録する必要があります。 このセクションでは、Microsoft Entra ID で OAuth アプリケーションを登録する方法について説明します。 その他の IdP については、そのドキュメントを参照してください。

Microsoft Entra ID でアプリを登録する

これらの手順は一般的なガイダンスとして意図されており、最新の状態に保持される保証はありません。 アプリの登録手順の詳細については、この Microsoft クイック スタートを参照してください。

  1. Microsoft Entra 管理センターに、少なくともアプリケーション開発者としてサインインします。
  2. [アプリの登録] に移動し、リダイレクト URL なしで新しい登録を作成します。
  3. [ 証明書] と [シークレット] > アプリのシークレットを作成 するに移動します。
  4. シークレット値をコピーし、安全に保存します。
  5. アプリの [アプリの登録] > [概要] ページで、アプリケーション (クライアント) ID をコピーします
  6. マニフェストを更新して、アプリを V2 アプリケーションに変更します。
    1. アプリの [管理 ] セクションで、[マニフェスト] を選択 します
    2. エディターで、 accessTokenAcceptedVersion2 に設定します。
    3. 変更を保存します。

必要な情報を Azure Databricks データ プロバイダーに送信する

受信者として Microsoft Entra ID を使用する場合は、次の手順に従ってプロバイダーに必要なフィールドを取得できます。 最新の手順については、常に Microsoft Entra ID のドキュメントを参照してください。

  • 発行者 URL: https://login.microsoftonline.com/{tenantId}/v2.0{tenantId}を Entra テナント ID に置き換えます。 テナント ID がわからない場合は、 Microsoft Entra ID のドキュメントを参照してください。

  • サブジェクト要求: データにアクセスするエンティティを識別する JWT ペイロード内のフィールドを参照します。 使用される特定のフィールドは、ID プロバイダー (IdP) とユース ケースによって異なります。 たとえば、Microsoft Entra ID の M2M アプリケーションの場合、サブジェクト要求は azpされ、トークンの使用が承認されたアプリケーションのクライアント ID を表します。 詳細については、Microsoft Entra ID アクセス トークン要求リファレンスを参照してください

  • 件名: 受信者の ID プロバイダー (IdP) に登録されている OAuth アプリケーションのユニーク識別子を参照します。
    たとえば、Microsoft Entra ID では、これは アプリケーション (クライアント) ID です。 登録中にクライアント ID をコピーしなかった場合は、IdP に固有の手順に従って取得できます。 Microsoft Entra ID の場合は、次の手順に従います。

    1. Microsoft Entra 管理センターの [アプリの登録 ] に移動します。
    2. 登録済みの OAuth アプリケーションを選択します。
    3. [概要] ページで アプリケーション (クライアント) ID を 見つけます。

    その他の IdPについては、対応する識別子を取得するためにその文書を参照してください。

  • 対象ユーザー: コンピューターから Azure Databricks への認証の場合、通常はリソースの clientIdを使用しますが、その他の有効なリソース識別子は指定できます。

    これは前の手順でコピーしておく必要があります。 そうでない場合は、Microsoft Entra 管理センターに移動し、 アプリの登録を検索し、登録済みのアプリケーションを選択して、[概要] ページで アプリケーション (クライアント) ID を 見つけます。 別のリソース ID を使用することもできます。

発行者、サブジェクト要求、件名、および対象ユーザーをプロバイダーと共有します。

Databricks プロバイダーによって共有される OAuth プロファイル ファイルを使用するようにアプリを構成する

プロバイダーからDelta Sharingのシェアにアクセスするために、アプリを構成するには:

  1. Databricks プロバイダーが共有した OIDC プロファイル ポータルの URL に移動します。

    まだ受信していない場合は、URL を要求します。

  2. ポータル ページで M2M タイルを選択し、[ OAuth の場合] で [ ファイルのダウンロード] をクリックします。

  3. ダウンロードした oauth_config.share JSON ファイルを変更して、 clientIdclientSecretscopeを追加します。

    アプリを登録するときに、クライアント ID とクライアント シークレットをコピーしている必要があります。 クライアント シークレットを再度取得することはできません。 クライアント ID を取得するには、前のセクションの手順を参照してください。

    対象ユーザーとしてアプリの {clientId} を使用する場合は、スコープを {clientId}/.defaultする必要があります。 たとえば、対象ユーザーが 61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6場合、スコープは 61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6/.defaultする必要があります。

    サンプル プロファイル:

    {
      "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]"
    }
    
  4. 最新の Delta Sharing Python OSS クライアントをインストールして構成します。

    Delta Sharing Python OSS クライアントの最新バージョンが必要です。

    python3 -m venv .venv
    source .venv/bin/activate
    pip3 install "delta-sharing>=1.3.1"
    
  5. 更新した oauth_config.share ファイルを保存します。

  6. 構成をテストします。

    test.pyのテストスクリプトを作成してください。

    import 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)
    

    次のスクリプトを実行します。

    python3 test.py
    

    スクリプトは共有テーブルを一覧表示する必要があります。