メインコンテンツまでスキップ

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

備考

プレビュー

この機能は パブリック プレビュー段階です。

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

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

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

IdPにアプリを登録する

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

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

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

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

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

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

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

  • サブジェクト要求 : アプリの識別に使用される JWT フィールドを定義します。サポートされている値: oidsubgroups

  • Entra IDでは、OAuthアプリのサービスプリンシパルのオブジェクトIDを使用すると、サブジェクトクレームは oidされます。

  • 件名 : 登録した OAuth アプリのサービスプリンシパル オブジェクトのオブジェクト ID を取得します。これは前の手順でコピーしているはずです。そうでない場合は、Microsoft Entra 管理センターに移動し、 アプリの登録 を検索し、登録済みの OAuth アプリケーションを選択し、エンタープライズ アプリケーションに移動して、プロパティ セクションで オブジェクト ID を見つけます。

    または、 azp ( clientIdに対応) を subject-claim として使用することもできますが、これには REST API を直接呼び出す必要があります。UI からアクセスすることはできません。

  • 対象ユーザー : マシン対Databricks 認証の場合、通常はリソースのclientIdを使用しますが、他の有効なリソース識別子を指定できます。

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

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

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

プロバイダーから Delta Sharing 共有にアクセスするようにアプリを構成するには、次のようにします。

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

    URL をまだ受け取っていない場合は、リクエストします。

  2. ポータル ページで M2M タイルを選択し、 For OAuth で Download file をクリックします。

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

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

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

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

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

    次の test.py、テストスクリプトを作成します。

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

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

    Python
    python3 test.py

    スクリプトには、共有テーブルが一覧表示されます。