ID プロバイダー トークンを使用してDatabricks REST APIsを認証する
このページでは、組織のIDプロバイダーが発行したトークンを使用して Databricks REST APIs 認証する方法について説明します。
Databricks は OAuth 2.0 トークン交換をサポートしており、フェデレーション ID トークンをDatabricks OAuthトークンに交換できます。トークンフェデレーションを使用すると、 Databricks CLI、SDK、およびその他のツールがこの交換を自動的に処理し、アクセストークンを管理できます。
各アクセストークンの有効期間は、指定したフェデレーショントークンの有効期間から導き出されますが、これは最も一般的には 1 時間ですが、異なる場合があります。ツールは必要に応じてトークンを自動的に更新するため、資格情報を手動で要求したりローテーションしたりする必要はありません。
認証プロセス
フェデレーション ID プロバイダーからのトークンを使用して Databricks API アクセスを認証するには、まず必要な環境変数または構成フィールドを設定します。指定した SDK 場所からフェデレーテッド JSON Web トークン (JWT) を取得し、 Databricks OAuth トークンと交換し、 OAuth トークンを使用して呼び出し Databricks REST API 認証します。
前提 条件
開始する前に、次の手順を実行します。
- アカウントまたはサービスプリンシパルのフェデレーションポリシーを作成します。
- ポリシーに一致する有効な JWT を ID プロバイダーから取得します。トークンは、RS256 または ES256 を使用して署名する必要があります。手順はプロバイダーによって異なるため、プロバイダーのドキュメントを参照するか、管理者に問い合わせてください。
環境を構成する
フェデレーショントークンの取得元に基づいて環境を構成します。
いずれの場合も、次の環境変数、 .databrickscfg
フィールド、Terraformフィールドまたは Config
フィールドを設定する必要があります。
環境変数 | 説明 |
---|---|
| アカウント操作の |
| Databricks アカウント ID (ホストがアカウント コンソール URL の場合のみ)。 |
| サービスプリンシパルクライアント ID(ワークロード ID フェデレーション専用)。 アカウント全体のトークンフェデレーションポリシーを使用して認証する場合は、設定しないでください。 |
| 使用する認証方法。トークンが環境変数から取得されるかどうか |
| トークンを含む環境変数の名前。認証方法が |
| フェデレーテッド・トークンを含むファイルへのパス。認証方法が |
認証環境を設定するための優先設定方法を選択します。
- Environment
- Profile
- CLI
- Connect
- VS Code
- Terraform
- Python
- Java
- Go
次の環境変数を設定します。
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
次のフィールドを使用して.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
Databricks CLIの場合は、次のいずれかを実行します。
- 環境変数は、[ 環境] タブで指定されているように設定します。
.databrickscfg
ファイル内の値を [ プロファイル] タブで指定したように設定します。
環境変数は常に.databrickscfg
ファイルの値よりも優先されます。
Databricks Connect では、次のいずれかを行うことができます。
- 構成プロファイルを使用します。 [ プロファイル] タブの説明に従って、
.databrickscfg
ファイルでワークスペース レベルの値を設定します。また、cluster_id
をワークスペースインスタンスのURLに設定します。 - 環境変数を使用します。 [ 環境] タブに表示されているのと同じ値を設定します。また、
DATABRICKS_CLUSTER_ID
をワークスペースインスタンスのURLに設定します。
.databrickscfg
の値は、環境変数よりも優先されます。
これらの設定でDatabricks Connectを初期化するには、コンピュート構成 for Databricks Connectを参照してください。
DatabricksのVisual Studio Code拡張機能の場合は、次のようにします。
- [
.databrickscfg
プロファイル] タブで指定されているように、Databricks ワークスペースレベルの操作 の ファイル内の値を設定します。 - DatabricksのVisual Studio Code拡張機能の [ 構成 ] ウィンドウで、[ Databricksを構成する ] をクリックします。
- コマンド パレット の [Databricks ホスト ] に、 ワークスペースの URL (
https://dbc-a1b2345c-d6e7.cloud.databricks.com
など) を入力し、Enter
を押します。 - コマンド パレット で、URL のリストでターゲット プロファイルの名前を選択します。
詳細については、「 Visual Studio Code の Databricks 拡張機能の承認を設定する」を参照してください。
アカウントレベルの操作の場合
provider "databricks" {
alias = "accounts"
}
ワークスペースレベルの操作の場合:
provider "databricks" {
alias = "workspace"
}
ワークスペースレベルの操作の場合:
from databricks.sdk import WorkspaceClient
# Uses environment configuration automatically
w = WorkspaceClient()
アカウントレベルの操作の場合:
from databricks.sdk import AccountClient
# Uses environment configuration automatically
a = AccountClient()
ワークスペースレベルの操作の場合:
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();
ワークスペースレベルの操作の場合:
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による認証の詳細については、アカウントまたはワークスペースで Go向けDatabricks SDKを認証するを参照してください。
アクセス Databricks APIs
環境を構成すると、Databricks CLI と SDK を通常どおり使用できます。トークン交換を自動的に処理し、結果の OAuth トークンを API 認証に使用します。
たとえば、CLI では次のようになります。
databricks workspace list
または、Python SDK を使用します。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient() # Uses environment configuration
clusters = w.clusters.list()
カスタム認証プロバイダーを実装する
フェデレーション トークンが環境変数またはファイル以外のソースから取得されている場合は、Databricks SDK の 1 つを使用して、フェデレーション トークンを取得するカスタム実装を記述できます。
- Python
- Java
- Go
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...
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
import com.databricks.sdk.core.TokenProvider;
import com.databricks.sdk.core.Token;
import java.time.Instant;
public class CustomOIDCExample {
// Custom TokenProvider that returns an OIDC ID token
static class MyCustomIdTokenSource implements TokenProvider {
@Override
public Token getToken() {
// TODO: Implement logic to fetch or generate the ID token
String jwt = "..."; // your OIDC token here
return new Token(jwt, Instant.now().plusSeconds(3600)); // token with expiry
}
}
public static void main(String[] args) {
// Configure with workspace host
DatabricksConfig cfg = new DatabricksConfig()
.setHost("https://my-workspace.cloud.databricks.com")
.setTokenProvider(new MyCustomIdTokenSource()); // plug in custom OIDC provider
// Initialize the workspace client
WorkspaceClient w = new WorkspaceClient(cfg);
System.out.println("Databricks client initialized: " + w);
// Use the client...
}
}
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...
}
トークンを手動で交換する
統合クライアント認証をサポートする Databricks SDK、CLI、またはその他のツールを使用していない場合は、ID プロバイダーからの JWT を Databricks OAuth トークンと手動で交換できます。これを行うには、OAuth 2.0 トークン交換 (RFC 8693) を使用して Databricks トークンエンドポイントにリクエストを送信します。
まず、ドキュメントに従って ID プロバイダーからフェデレーション JWT を取得します。次に、JWTを Databricks OAuth トークンに交換し、そのトークンを使用してアクセス Databricks REST APIs:
フェデレーション 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 プロバイダーからのトークンが有効で、フェデレーション ポリシーと一致する場合は、 access_token
フィールドに Databricks OAuth トークンを含む標準の JSON 応答を受け取ります。 この OAuth トークンは、 Databricks APIにアクセスするために使用できます。結果の Databricks OAuth トークンには、subject_token
パラメーターで指定された JWT と同じ有効期限 (exp
) 要求があります。
応答例:
{
"access_token": "eyJraWQ...odi0WFNqQw",
"scope": "all-apis",
"token_type": "Bearer",
"expires_in": 3600
}
OAuthトークンを使用してDatabricks APIsを呼び出します
その後、Databricks APIにアクセスするために、生成された Databricks OAuth トークンをベアラー トークンとして使用します。 たとえば、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"
}