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

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 認証します。

前提 条件

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

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

環境を構成する

フェデレーショントークンの取得元に基づいて環境を構成します。

いずれの場合も、次の環境変数、 .databrickscfg フィールド、Terraformフィールドまたは Config フィールドを設定する必要があります。

環境変数

説明

DATABRICKS_HOST

アカウント操作の https://accounts.cloud.databricks.com として指定された Databricks ホスト、またはターゲット ワークスペース URL (ワークスペース操作の https://dbc-a1b2345c-d6e7.cloud.databricks.com など)。

DATABRICKS_ACCOUNT_ID

Databricks アカウント ID (ホストがアカウント コンソール URL の場合のみ)。

DATABRICKS_CLIENT_ID

サービスプリンシパルクライアント ID(ワークロード ID フェデレーション専用)。 アカウント全体のトークンフェデレーションポリシーを使用して認証する場合は、設定しないでください。

DATABRICKS_AUTH_TYPE

使用する認証方法。トークンが環境変数から取得されるかどうか env-oidc 。トークンがファイルから取得されるかどうか file-oidc

DATABRICKS_OIDC_TOKEN_ENV

トークンを含む環境変数の名前。認証方法が env-oidcの場合にのみ適用されます。デフォルトは DATABRICKS_OIDC_TOKENです。

DATABRICKS_OIDC_TOKEN_FILEPATH

フェデレーテッド・トークンを含むファイルへのパス。認証方法が file-oidcの場合にのみ適用されます。

認証環境を設定するための優先設定方法を選択します。

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

Bash
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

アクセス Databricks APIs

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

たとえば、CLI では次のようになります。

Bash
databricks workspace list

または、Python SDK を使用します。

Python
from databricks.sdk import WorkspaceClient

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

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

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

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...

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

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

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

OAuth トークンの連携フロー

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

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

Bash
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 を含めます。

Bash
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) 要求があります。

応答例:

JSON
{
"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 ユーザーと表示名を取得するには、次のようにします。

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

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

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

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