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

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

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

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 ホスト: アカウント操作またはターゲット ワークスペース URL の https://accounts.cloud.databricks.com (ワークスペース操作の https://dbc-a1b2345c-d6e7.cloud.databricks.com など)。
  • Databricks アカウント ID: ホストがアカウントコンソールのURLである場合にのみ必要です。
  • サービスプリンシパルクライアントID: ワークロード ID フェデレーションにのみ必要です。 アカウント全体のトークンフェデレーションポリシーを使用して認証する場合は、設定しないでください。
  • Databricks 認証の種類: トークンが環境変数から取得されるかどうか env-oidc 。トークンがファイルから取得されるかどうかfile-oidc。
  • OIDC トークン環境変数: トークンを含む環境変数の名前。認証方式が env-oidcの場合にのみ必要です。デフォルトは DATABRICKS_OIDC_TOKENです。
  • OIDC トークンのファイルパス: フェデレーテッド・トークンを含むファイルへのパス。認証方式が 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 認証に使用します。

Bash
databricks clusters list

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

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

AWS IAM ワークロード (Python)​

次の例では、AWS STS GetWebIdentityTokenと連携するIdTokenSourceパターンを使用してAWSワークロードをDatabricksに認証します:

Python
import boto3
from databricks.sdk import WorkspaceClient
from databricks.sdk import oidc
from databricks.sdk.core import Config, credentials_strategy, oidc_credentials_provider


class AwsStsTokenSource(oidc.IdTokenSource):
def __init__(self, audience="databricks", region="us-east-1"):
self._audience = audience
self._region = region

def id_token(self) -> oidc.IdToken:
sts = boto3.client("sts", region_name=self._region)
resp = sts.get_web_identity_token(
Audience=[self._audience],
SigningAlgorithm="RS256",
DurationSeconds=300,
)
return oidc.IdToken(jwt=resp["WebIdentityToken"])


@credentials_strategy("aws-sts-wif", [])
def aws_sts_wif_strategy(cfg: Config):
return oidc_credentials_provider(cfg, AwsStsTokenSource())


w = WorkspaceClient(
host="https://my-workspace.cloud.databricks.com",
client_id="<service-principal-uuid>",
credentials_strategy=aws_sts_wif_strategy
)
# No secrets needed
clusters = w.clusters.list()
注記

300秒のトークンの期間が推奨されます。ワークロードのニーズに基づいて、最大3600秒まで調整できます。

次の例は、プロトコルを理解するための生のトークン交換を示しています:

Python
import boto3
import requests

sts = boto3.client("sts", region_name="us-east-1")
resp = sts.get_web_identity_token(
Audience=["databricks"],
SigningAlgorithm="RS256",
DurationSeconds=300,
)
aws_jwt = resp["WebIdentityToken"]

token_resp = requests.post(
"https://<workspace>.cloud.databricks.com/oidc/v1/token",
data={
&quot;client_id&quot;: &quot;&lt;service-principal-uuid&gt;&quot;,
&quot;grant_type&quot;: &quot;urn:ietf:params:oauth:grant-type:token-exchange&quot;,
&quot;subject_token&quot;: aws_jwt,
&quot;subject_token_type&quot;: &quot;urn:ietf:params:oauth:token-type:jwt&quot;,
&quot;scope&quot;: &quot;all-apis&quot;,
},
)
access_token = token_resp.json()["access_token"]

AWS の前提条件とフェデレーションポリシーの作成を含む完全なセットアップについては、「AWS IAM ワークロードのワークロード ID フェデレーションを有効にする」をご覧ください。

汎用カスタム実装​

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"
}