次の方法で共有


ID プロバイダー トークンを使用して認証する

このページでは、組織の ID プロバイダーによって発行されたトークンを使用して Azure Databricks に対して認証する方法について説明します。

Azure Databricks では OAuth 2.0 Token Exchange がサポートされており、フェデレーション ID トークンを Databricks OAuth トークンと交換できます。 トークンフェデレーションを使用すると、Databricks CLI、SDK、およびその他のツールで、この交換を自動的に処理し、アクセス トークンを管理できます。

各アクセス トークンの有効期間は、指定したフェデレーション トークンの有効期間から派生します。これは最も一般的に 1 時間ですが、異なる場合があります。 ツールは必要に応じてトークンを自動的に更新するため、資格情報を手動で要求したりローテーションしたりする必要はありません。

認証プロセス

フェデレーション ID プロバイダーからのトークンを使用して Azure Databricks API アクセスを認証するには、最初に必要な環境変数または構成フィールドを設定します。 任意のツールまたは SDK は、指定した場所からフェデレーション JSON Web トークン (JWT) を取得し、それを Azure Databricks OAuth トークンと交換し、OAuth トークンを使用して Azure Databricks REST API 呼び出しを認証します。

[前提条件]

開始する前に、次の手順を実行します。

  1. アカウントまたはサービス プリンシパルのフェデレーション ポリシーを作成します。
  2. ポリシーに一致する有効な JWT を ID プロバイダーから取得します。 トークンは RS256 または ES256 を使用して署名する必要があります。 手順はプロバイダーによって異なるため、プロバイダーのドキュメントを参照するか、管理者に問い合わせてください。

環境を構成する

フェデレーション トークンの取得元に基づいて環境を構成します。 次の環境変数、 .databrickscfg フィールド、Terraform フィールド、または Config フィールドを設定します。

  • Databricks host:https://accounts.azuredatabricks.net アカウント操作または ワークスペースごとのターゲット URL (ワークスペース操作の https://adb-1234567890123456.7.azuredatabricks.net など)。
  • Databricks アカウント ID: ホストがアカウント コンソールの URL である場合にのみ必要です。
  • サービス プリンシパル クライアント ID: ワークロード ID フェデレーションにのみ必要です。 アカウント全体のトークン フェデレーション ポリシーを使用して認証する場合は、設定しないでください。
  • Databricks 認証の種類:env-oidc トークンが環境変数から取得される場合は > file-oidc トークンがファイルから取得される場合は a0/>。
  • OIDC トークン環境変数: トークンを含む環境変数の名前。 認証方法が env-oidc場合にのみ必要です。 既定値は DATABRICKS_OIDC_TOKEN です。
  • OIDC トークン ファイルパス: フェデレーション トークンを含むファイルへのパス。 認証方法が file-oidc場合にのみ必要です。

すべての統合認証環境変数と構成フィールドの完全なリファレンスについては、 統合認証の環境変数とフィールドを参照してください。

認証環境を設定する好みの構成方法を選択します。

環境

以下の環境変数を設定します。

export DATABRICKS_HOST=<workspace-url-or-account-console-url>
export DATABRICKS_ACCOUNT_ID=<account-id>  # If DATABRICKS_HOST is the account console URL
export DATABRICKS_CLIENT_ID=<client-id>    # Only for workload identity federation
export DATABRICKS_AUTH_TYPE=<auth-method> # env-oidc or file-oidc
export DATABRICKS_OIDC_TOKEN_ENV=<token-env-name>  # If auth type is env-oidc
export DATABRICKS_OIDC_TOKEN_FILEPATH=<token-filepath-name> # If auth type is file-oidc

Profile

次のフィールドを使用して、 .databrickscfg構成プロファイル を作成または識別します。

[<profile-name>]
host = <workspace-url-or-account-console-url>
account_id = <account-id>  # If host is the account console URL
client_id = <client-id>    # Only for workload identity federation
auth_type = <auth-method>  # env-oidc or file-oidc
oidc_token_env = <token-env-name>  # If auth type is env-oidc
oidc_token_filepath = <token-filepath-name> # If auth type is file-oidc

CLI

Databricks CLI の場合は、次のいずれかを行います。

  • [ 環境 ] タブで指定した環境変数を設定します。
  • [.databrickscfg] タブで指定した ファイルの値を設定します。

環境変数は、.databrickscfg ファイル内の値よりも常に優先されます。

接続する

Databricks Connect の場合は、次のいずれかを実行できます。

  • 構成プロファイルを使用します。[.databrickscfg] タブの説明に従って、 ファイルでワークスペース レベルの値を設定します。また、cluster_idをワークスペース インスタンスの URL に設定します。
  • 環境変数を使用します。 [ 環境 ] タブに表示されるのと同じ値を設定します。また、 DATABRICKS_CLUSTER_ID をワークスペース インスタンスの URL に設定します。

.databrickscfgの値は環境変数よりも優先されます。

これらの設定で Databricks Connect を初期化するには、「 Databricks Connect のコンピューティング構成」を参照してください。

VS Code

Visual Studio Code 用 Databricks 拡張機能の場合は、次を実行します。

  1. [.databrickscfg] タブで指定した Azure Databricks ワークスペース レベルの操作用に、 ファイルの値を設定します。
  2. Visual Studio Code 用の Databricks 拡張機能の [構成] ペインで、[Databricks の構成] をクリックします。
  3. コマンド パレットDatabricks Host に、ワークスペースごとの URL (例: https://adb-1234567890123456.7.azuredatabricks.net) を入力し、Enter キーを押します。
  4. コマンド パレットで、URL の一覧でターゲット プロファイルの名前を選択します。

詳細については、「Visual Studio Code用の Databricks 拡張機能の承認を設定する」を参照してください。

Terraform

アカウント レベルの操作の場合

provider "databricks" {
  alias = "accounts"
}

ワークスペース レベルの操作の場合:

provider "databricks" {
  alias = "workspace"
}

Python

ワークスペース レベルの操作の場合:

from databricks.sdk import WorkspaceClient

# Uses environment configuration automatically
w = WorkspaceClient()

アカウント レベルの操作の場合:

from databricks.sdk import AccountClient

# Uses environment configuration automatically
a = AccountClient()

Java

ワークスペース レベルの操作の場合:

import com.databricks.sdk.WorkspaceClient;

// Uses environment configuration automatically
WorkspaceClient w = new WorkspaceClient();

アカウント レベルの操作の場合:

import com.databricks.sdk.AccountClient;

// Uses environment configuration automatically
AccountClient a = new AccountClient();

Go

ワークスペース レベルの操作の場合:

import "github.com/databricks/databricks-sdk-go"

// Uses environment configuration automatically
w := databricks.Must(databricks.NewWorkspaceClient())

アカウント レベルの操作の場合:

import "github.com/databricks/databricks-sdk-go"

// Uses environment configuration automatically
a := databricks.Must(databricks.NewAccountClient())

Go を使用し、Databricks クライアント統合認証を実装する Databricks ツールおよび SDK を使用した認証の詳細については、「Azure Databricks アカウントまたはワークスペースで Databricks SDK for Go を認証する」を参照してください。

Databricks API にアクセスする

環境を構成したら、Databricks CLI と SDK を通常どおりに使用できます。 トークン交換を自動的に処理し、結果として得られる OAuth トークンを API 認証に使用します。

CLI

databricks clusters list

Python

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()  # Uses environment configuration
clusters = w.clusters.list()

Java

import com.databricks.sdk.WorkspaceClient;

WorkspaceClient w = new WorkspaceClient();
List<ClusterDetails> clusters = w.clusters().list();

Go

import "github.com/databricks/databricks-sdk-go"

w := databricks.Must(databricks.NewWorkspaceClient())
clusters := w.Clusters.ListAll(context.Background(), compute.List{})

カスタム承認プロバイダーを実装する

フェデレーション トークンが環境変数またはファイル以外のソースから取得される場合は、Azure Databricks SDK のいずれかを使用して、フェデレーション トークンを取得するカスタム実装を記述できます。

Python

from databricks.sdk import oidc
from databricks.sdk.core import (Config, CredentialsProvider, credentials_strategy, oidc_credentials_provider)


class MyCustomIdTokenSource(oidc.IdTokenSource):
    def id_token(self) -> oidc.IdToken:
        token = ...  # Implement logic to return the ID token here
        return oidc.IdToken(jwt=token)


@credentials_strategy("my-custom-oidc", "")
def my_custom_oidc_strategy(cfg: Config) -> CredentialsProvider:
    return oidc_credentials_provider(cfg, MyCustomIdTokenSource())


if __name__ == "__main__":
    cfg = Config(
        host="https://my-workspace.cloud.databricks.com",
        credentials_strategy=my_custom_oidc_strategy
    )
    from databricks.sdk import WorkspaceClient
    w = WorkspaceClient(config=cfg)
    # Use the client...

Java

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
import com.databricks.sdk.core.CredentialsProvider;
import com.databricks.sdk.core.oauth.IDTokenSource;
import com.databricks.sdk.core.oauth.IDToken;

public class CustomOIDCExample {

    // Custom IDTokenSource that returns an OIDC ID token
    static class MyCustomIdTokenSource implements IDTokenSource {
        @Override
        public IDToken getIDToken(String audience) {
            // TODO: Implement logic to fetch or generate the ID token
            String jwt = "...";  // your OIDC token here
            return new IDToken(jwt);
        }
    }

    public static void main(String[] args) {
        // TODO: Wrap MyCustomIdTokenSource in a CredentialsProvider
        // See the SDK documentation for the appropriate method
        CredentialsProvider provider = ...; // Configure with MyCustomIdTokenSource

        // Configure with workspace host and custom OIDC provider
        DatabricksConfig cfg = new DatabricksConfig()
            .setHost("https://my-workspace.cloud.databricks.com")
            .setCredentialsProvider(provider);

        // Initialize the workspace client
        WorkspaceClient w = new WorkspaceClient(cfg);

        System.out.println("Databricks client initialized: " + w);

        // Use the client...
    }
}

この例では、カスタム IDTokenSourceを実装する方法を示します。 カスタム トークン ソースで CredentialsProvider を構成する最新の方法については、 Databricks SDK for Java のドキュメント を参照するか、 GitHub の SDK ソース コードを参照してください。

Go

package main

import (
    "context"
    "fmt"

    "github.com/databricks/databricks-sdk-go"
    "github.com/databricks/databricks-sdk-go/config"
    "github.com/databricks/databricks-sdk-go/credentials"
)

// MyCustomIdTokenSource implements a custom OIDC token source
type MyCustomIdTokenSource struct{}

func (s *MyCustomIdTokenSource) IDToken(ctx context.Context) (*credentials.IDToken, error) {
    // TODO: Implement logic to return the ID token
    token := "..."
    return &credentials.IDToken{JWT: token}, nil
}

// myCustomOIDCStrategy is a custom credentials strategy
func myCustomOIDCStrategy(cfg *config.Config) (credentials.CredentialsProvider, error) {
    return credentials.NewOIDCCredentialsProvider(cfg, &MyCustomIdTokenSource{}), nil
}

func main() {
    cfg := &config.Config{
        Host: "https://my-workspace.cloud.databricks.com",
    }

    // Register the custom credentials strategy
    credentials.Register("my-custom-oidc", myCustomOIDCStrategy)

    // Initialize the Databricks workspace client with custom auth
    w, err := databricks.NewWorkspaceClientWithConfig(cfg)
    if err != nil {
        panic(err)
    }

    fmt.Println("Databricks client initialized:", w)
    // Use the client...
}

トークンを手動で交換する

統合認証をサポートする Azure Databricks SDK、CLI、またはその他のツールを使用していない場合は、ID プロバイダーの JWT を Databricks OAuth トークンと手動で交換できます。 これを行うには、OAuth 2.0 Token Exchange (RFC 8693) を使用して Azure Databricks トークン エンドポイントに要求を送信します。

まず、ドキュメントに従って ID プロバイダーからフェデレーション JWT を取得します。 次に、JWT を Databricks OAuth トークンと交換し、そのトークンを使用して Databricks REST API にアクセスします。

OAuth トークン連携フロー

フェデレーション JWT を Databricks OAuth トークンと交換する

アカウント全体のフェデレーション ポリシーの場合、このコマンドはフェデレーション JWT を Databricks OAuth トークンと交換します。

curl --request POST https://<databricks-workspace-host>/oidc/v1/token \
  --data "subject_token=${FEDERATED_JWT_TOKEN}" \
  --data 'subject_token_type=urn:ietf:params:oauth:token-type:jwt' \
  --data 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
  --data 'scope=all-apis'

ヒント

Databricks アカウント リソースにアクセスするには、URL https://<databricks-account-host>/oidc/accounts/<account-id>/v1/tokenを使用します。

サービス プリンシパル フェデレーション ポリシーの場合は、要求にクライアント ID を含めます。

curl --request POST https://<databricks-workspace-host>/oidc/v1/token \
  --data "client_id=${CLIENT_ID}" \
  --data "subject_token=${FEDERATED_JWT_TOKEN}" \
  --data 'subject_token_type=urn:ietf:params:oauth:token-type:jwt' \
  --data 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
  --data 'scope=all-apis'

CLIENT_ID をサービス プリンシパル UUID (たとえば、7cb2f8a4-49a7-4147-83db-35cb69e5cede) に置き換えます。

ID プロバイダーからのトークンが有効で、フェデレーション ポリシーと一致する場合は、databricks OAuth トークンを含む標準の JSON 応答を access_token フィールドに受信します。 この OAuth トークンを使用して、Databricks API にアクセスできます。 結果として得られる Databricks OAuth トークンの有効期限 (exp) 要求は、subject_token パラメーターで指定された JWT と同じです。

応答の例:

{
  "access_token": "eyJraWQ...odi0WFNqQw",
  "scope": "all-apis",
  "token_type": "Bearer",
  "expires_in": 3600
}

OAuth トークンを使用して Databricks API を呼び出す

その後、結果の Databricks OAuth トークンをベアラー トークンとして使用して、Databricks API にアクセスできます。 たとえば、Databricks SCIM Me API を呼び出して Databricks ユーザーと表示名を取得するには、次のようにします。

TOKEN='<your-databricks-oauth-token>'

curl --header "Authorization: Bearer $TOKEN" \
  --url https://${DATABRICKS_WORKSPACE_HOSTNAME}/api/2.0/preview/scim/v2/Me

応答は次のように表示されます。

{
  "userName": "username@mycompany.com",
  "displayName": "Firstname Lastname"
}