このページでは、組織の 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 呼び出しを認証します。
[前提条件]
開始する前に、次の手順を実行します。
- アカウントまたはサービス プリンシパルのフェデレーション ポリシーを作成します。
- ポリシーに一致する有効な 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 拡張機能の場合は、次を実行します。
- [
.databrickscfg] タブで指定した Azure Databricks ワークスペース レベルの操作用に、 ファイルの値を設定します。 - Visual Studio Code 用の Databricks 拡張機能の [構成] ペインで、[Databricks の構成] をクリックします。
-
コマンド パレットの Databricks Host に、ワークスペースごとの URL (例:
https://adb-1234567890123456.7.azuredatabricks.net) を入力し、Enterキーを押します。 - コマンド パレットで、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 にアクセスします。
フェデレーション 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"
}