OAuth を使用して Azure Databricks へのユーザー アクセスを承認する

このページでは、Databricks CLI または Azure Databricks REST API を使用するときに、Azure Databricks リソースへのユーザー アクセスを承認する方法について説明します。

Azure Databricks では、UI の外部でユーザーの承認と認証に推奨されるプロトコルとして OAuth 2.0 が使用されます。 統合クライアント認証により、トークンの生成と更新が自動化されます。 ユーザーがサインインして同意を付与すると、OAuth は CLI、SDK、またはユーザーの代わりに使用するその他のツールのアクセス トークンを発行します。 各アクセス トークンは 1 時間有効です。その後、新しいトークンが自動的に要求されます。

このページでは、 承認 とは OAuth を使用して Azure Databricks リソースへのアクセスを許可することを指し、 認証 はアクセス トークンを使用した資格情報の検証を指します。

詳細については、「 Azure Databricks リソースへのアクセスを承認する」を参照してください。

Azure Databricks リソースへのアクセスを承認する方法

Azure Databricks では、OAuth を使用してユーザー アカウントを承認する 2 つの方法がサポートされています。

  • 自動 (推奨): Azure Databricks Terraform SDK など、サポートされているツールと SDK を使用している場合は、 統合認証 を使用します。 この方法では、トークンの生成と更新が自動的に処理されます。

  • 手動: コード検証ツールとチャレンジを生成し、OAuth トークンと交換します。 ツールが統合認証をサポートしていない場合は、この方法を使用します。 詳細については、「 OAuth U2M アクセス トークンを手動で生成する」を参照してください。

統合認証による自動承認

注

承認を構成する前に、実行する予定のワークスペース操作の種類の ACL アクセス許可を確認し、アカウントに必要なアクセス レベルがあることを確認します。 詳細については、 アクセス制御リストを参照してください。

統合認証をサポートする Databricks SDK とツールで OAuth 承認を実行するには、コード内に以下を統合します。

環境

ツールまたは SDK で特定の Azure Databricks 認証の種類に環境変数を使用するには、 Azure Databricks リソース またはツールまたは SDK のドキュメントへのアクセスの承認に関するページを参照してください。 統合認証と認証方法の優先順位については、「環境変数とフィールド」も参照してください。

アカウントレベルの操作の場合、次の環境変数を設定します。

  • DATABRICKS_HOST は、Azure Databricks アカウント コンソール URL (https://accounts.azuredatabricks.net) の値に設定されます。
  • DATABRICKS_ACCOUNT_ID

ワークスペースレベルの操作の場合は、次の環境変数を設定します。

  • Azure Databricks のDATABRICKS_HOSTをに設定します (例: https://adb-1234567890123456.7.azuredatabricks.net)。

プロファイル

ファイルで次のフィールドを使用して、Azure Databricks .databrickscfgを作成または特定します。 プロファイルを作成する場合は、プレースホルダーを適切な値に置き換えます。 ツールまたは SDK でプロファイルを使用するには、 Azure Databricks リソース またはツールまたは SDK のドキュメントへのアクセスを承認する方法に関するページを参照してください。 統合認証と認証方法の優先順位については、「環境変数とフィールド」も参照してください。

アカウントレベルの操作の場合、.databrickscfg ファイルで次の値を設定します。 この場合、Azure Databricks アカウント コンソール の URL は https://accounts.azuredatabricks.net です。

[<some-unique-configuration-profile-name>]
host       = <account-console-url>
account_id = <account-id>

ワークスペース レベルの操作の場合は、.databrickscfg ファイルに次の値を設定します。 この場合、ホストは Azure Databricks のワークスペースごとの URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。

[<some-unique-configuration-profile-name>]
host = <workspace-url>

CLI

Databricks CLI の場合は、次のオプションを使用して databricks auth login コマンドを実行します。

次に、Web ブラウザーの指示に従って、Azure Databricks アカウントまたはワークスペースにログインします。

詳細については、Databricks CLI を使用した OAuth 承認のを参照してください。

VS Code

Databricks IDE 拡張機能の場合は、Visual Studio Code 用 Databricks 拡張機能の認証を設定する の手順に従ってください。

接続する

Databricks Runtime 13.1 以降、および Databricks Runtime 13.3 LTS 以降の Scala では、Databricks Connect for Python で OAuth U2M 認証がサポートされています。

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

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

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

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

テラフォーム

Terraform 構成を適用する前に、構成でワークスペース操作とアカウント操作のどちらを使用するかに応じて、databricks auth login タブで コマンドのいずれかを実行する必要があります。 これらのコマンドは、ユーザーのホーム フォルダー .databricks/token-cache.json に必要な OAuth トークンを生成してキャッシュします。

アカウント レベルの操作

既定の認証の場合:

provider "databricks" {
  alias = "account"
}

直接構成の場合:

provider "databricks" {
  alias      = "account"
  host       = <retrieve-account-console-url>
  account_id = <retrieve-account-id>
}

独自の実装で retrieve- プレースホルダーを置き換え、コンソールまたは HashiCorp Vaultなどの他の構成ストアから値を取得します。 コンテナー プロバイダーも参照してください。 この例では、 account_id を Azure Databricks アカウントコンソールの URL に設定できます。

ワークスペース レベルの操作

既定の認証の場合:

  provider "databricks" {
  alias = "workspace"
}

直接構成の場合:

provider "databricks" {
  alias = "workspace"
  host  = <retrieve-workspace-url>
}

Python

コードを実行する前に、ワークスペースまたはアカウントの操作オプションを使用して、databricks auth login タブで コマンドを実行する必要があります。 これらのコマンドは、ユーザーのホーム フォルダー .databricks/token-cache.json に必要な OAuth トークンを生成してキャッシュします。

アカウント レベルの操作

既定の認証の場合:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

直接構成の場合:

from databricks.sdk import AccountClient

a = AccountClient(
  host       = retrieveAccountConsoleUrl(),
  account_id = retrieveAccountId()
)
# ...

retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは Azure KeyVault などの他の構成ストアから値を取得します。

ワークスペース レベルの操作

既定の認証の場合:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

直接構成の場合:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(host = retrieve_workspace_url())
# ...

Python を使用し、Databricks 統合認証を実装する Azure Databricks ツールと SDK を使用した認証の詳細については、次を参照してください。

Java

コードを実行する前に、ワークスペースまたはアカウントの操作オプションを使用して、databricks auth login タブで コマンドを実行する必要があります。 これらのコマンドは、ユーザーのホーム フォルダー .databricks/token-cache.json に必要な OAuth トークンを生成してキャッシュします。

アカウント レベルの操作

既定の認証の場合:

import com.databricks.sdk.AccountClient;
// ...
AccountClient a = new AccountClient();
// ...

直接構成の場合:

import com.databricks.sdk.AccountClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveAccountConsoleUrl())
  .setAccountId(retrieveAccountId());
AccountClient a = new AccountClient(cfg);
// ...

retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは Azure KeyVault などの他の構成ストアから値を取得します。

ワークスペース レベルの操作

既定の認証の場合:

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

直接構成の場合:

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveWorkspaceUrl())
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

Java を使用し、 Databricks 統合認証を実装する Azure Databricks ツールと SDK を使用した承認と認証の詳細については、次を参照してください。

Go

コードを実行する前に、ワークスペースまたはアカウントの操作オプションを使用して、databricks auth login タブで コマンドを実行する必要があります。 これらのコマンドは、ユーザーのホーム フォルダー .databricks/token-cache.json に必要な OAuth トークンを生成してキャッシュします。

アカウント レベルの操作

既定の認証の場合:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...

直接構成の場合:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:      retrieveAccountConsoleUrl(),
  AccountId: retrieveAccountId(),
}))
// ...

retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは Azure KeyVault などの他の構成ストアから値を取得します。

ワークスペース レベルの操作

既定の認証の場合:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...

直接構成の場合:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
  Host: retrieveWorkspaceUrl(),
}))
// ...

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

OAuth U2M アクセス トークンを手動で生成する

このセクションは、 Databricks 統合認証 標準をサポートしていないサード パーティ製のツールまたはサービスを使用するユーザーを対象としています。 OAuth U2M 認証に Azure Databricks OAuth トークンを手動で生成、更新、または使用する必要がある場合は、このセクションの手順に従います。

手順 1: コード検証ツールとチャレンジを生成する

OAuth U2M アクセス トークンを手動で生成するには、 まず、コード検証ツール と一致する コード チャレンジを作成します。 手順 2 のチャレンジを使用して承認コードを取得し、手順 3 の検証ツールを使用して、そのコードをアクセス トークンと交換します。

注

OAuth PKCE 標準に従います。

  • コード検証ツールは、文字 A–Z、 a–z、 0–9、 -._~を使用する暗号ランダム文字列 (43 ~ 128 文字) です。
  • コードチャレンジは、検証子のSHA256ハッシュをBase64 URLエンコードしたものです。

詳細については、「承認要求」をご覧ください。

次の Python スクリプトでは、検証ツールとチャレンジが生成されます。 これらは複数回使用できますが、Azure Databricks では、アクセス トークンを手動で生成するたびに新しいペアを生成することをお勧めします。

import hashlib, base64, secrets, string

# Allowed characters for the code verifier, per PKCE spec
allowed_chars = string.ascii_letters + string.digits + "-._~"

# Generate a secure code verifier (43–128 characters)
code_verifier = ''.join(secrets.choice(allowed_chars) for _ in range(64))

# Create the SHA256 hash of the code verifier
sha256_hash = hashlib.sha256(code_verifier.encode()).digest()

# Base64-url-encode the hash and strip any trailing '=' padding
code_challenge = base64.urlsafe_b64encode(sha256_hash).decode().rstrip("=")

# Output values
print(f"code_verifier:  {code_verifier}")
print(f"code_challenge: {code_challenge}")

手順 2: 承認コードを生成する

Azure Databricks OAuth アクセス トークンを取得するには、まず OAuth 承認コードを生成する必要があります。 このコードは、使用直後に期限切れになります。 コードは、アカウント レベルまたはワークスペース レベルで生成できます。

  • アカウント レベル: ユーザーがアクセスできるすべてのワークスペースで、アカウント レベルとワークスペース レベルの REST API の両方を呼び出すために使用します。
  • ワークスペース レベル: 1 つのワークスペース内で REST API を呼び出すために使用します。

注

これらの例では、クライアント ID として databricks-cli を使用します。 CLI や SDK などの組み込みの Azure Databricks ツールを使用していない場合は、カスタム OAuth アプリケーションを有効にして、要求でその client_id を使用する必要があります。 「パートナー OAuth アプリケーションを有効または無効にする」を参照してください。

アカウント レベルの承認コードを生成する

  1. アカウント ID を確認します。

  2. ブラウザーで、次の代替の URL に移動します。

    • <account-id>: Azure Databricks アカウント ID
    • <redirect-url>: ローカル リダイレクト URI (たとえば、 http://localhost:8020)
    • <state>: 応答を検証するプレーンテキスト文字列
    • <code-challenge>: 手順 1 のコード チャレンジ
    https://accounts.azuredatabricks.net/oidc/accounts/<account-id>/v1/authorize
    ?client_id=databricks-cli
    &redirect_uri=<redirect-url>
    &response_type=code
    &state=<state>
    &code_challenge=<code-challenge>
    &code_challenge_method=S256
    &scope=all-apis+offline_access
    
  3. Azure Databricks アカウントへのアクセスを求められたらログインします。

  4. サインインすると、ブラウザーがリダイレクト URL に移動します。 そのホストとポートで何もリッスンしていない場合 (たとえば、 http://localhost:8020)、ページに接続エラーが表示されます。これは予期されます。 アドレス バーから承認コードをコピーします。 これは、 code= の後、およびクエリ文字列内の次の & の前の部分文字列です。

    http://localhost:8020/?code=dcod...7fe6&state=<state>
    

    state値が最初に指定したものと一致することを確認します。 そうでない場合は、コードを破棄します。

  5. 引き続き アカウント レベルのアクセス トークンを生成します。

ワークスペース レベルの承認コードを生成する

  1. ブラウザーで、次の代替の URL に移動します。

    • <databricks-instance>: Azure Databricks のワークスペースのインスタンス名としての <databricks-instance> (例: adb-1234567890123456.7.azuredatabricks.net)
    • <redirect-url>: ローカル リダイレクト (たとえば、 http://localhost:8020)
    • <state>: 応答検証のプレーンテキスト値
    • <code-challenge>: 手順 1 のチャレンジ文字列
    https://<databricks-instance>/oidc/v1/authorize
    ?client_id=databricks-cli
    &redirect_uri=<redirect-url>
    &response_type=code
    &state=<state>
    &code_challenge=<code-challenge>
    &code_challenge_method=S256
    &scope=all-apis+offline_access
    
  2. Azure Databricks アカウントへのアクセスを求められたらログインします。

  3. サインインすると、ブラウザーがリダイレクト URL に移動します。 そのホストとポートで何もリッスンしていない場合 (たとえば、 http://localhost:8020)、ページに接続エラーが表示されます。これは予期されます。 アドレス バーから承認コードをコピーします。 これは、 code= の後、およびクエリ文字列内の次の & の前の部分文字列です。

    http://localhost:8020/?code=dcod...7fe6&state=<state>
    

    state値が最初に指定したものと一致することを確認します。 そうでない場合は、コードを破棄します。

  4. ワークスペース レベルのアクセス トークンの生成に進みます。

注

ロールをスコープとするトークンを生成するには、承認 URL に &assume_group=<group-id> を追加します。ここで、 <group-id> はロールのバッキング グループの ID です。 結果のトークンは、すべての操作をロールとして承認します。 API (OAuth トークン交換) を参照してください。

手順 3: アクセス トークンの承認コードを交換する

Azure Databricks OAuth アクセス トークンの承認コードを交換するには、適切なレベルを選択します。

  • アカウント レベル: ユーザーがアクセスできるすべてのワークスペースで、アカウント レベルとワークスペース レベルの REST API の両方を呼び出すために使用します。
  • ワークスペース レベル: 1 つのワークスペース内で REST API を呼び出すために使用します。

アカウント レベルのアクセス トークンを生成する

  1. curlを使用して、アカウント レベルの承認コードを OAuth アクセス トークンと交換します。

    リクエストで次のコードを置き換えます。

    • <account-id>: Azure Databricks アカウント ID
    • <redirect-url>: 前の手順のリダイレクト URL
    • <code-verifier>: 前に生成した検証ツール
    • <authorization-code>: 前の手順の承認コード
    curl --request POST \
    https://accounts.azuredatabricks.net/oidc/accounts/<account-id>/v1/token \
    --data "client_id=databricks-cli" \
    --data "grant_type=authorization_code" \
    --data "scope=all-apis offline_access" \
    --data "redirect_uri=<redirect-url>" \
    --data "code_verifier=<code-verifier>" \
    --data "code=<authorization-code>"
    
  2. 応答から access_token の値をコピーします。 例えば次が挙げられます。

    {
      "access_token": "eyJr...Dkag",
      "refresh_token": "doau...f26e",
      "scope": "all-apis offline_access",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    トークンは 1 時間有効です。

  3. 手順 4: Azure Databricks REST API の呼び出しに進みます。

ワークスペース レベルのアクセス トークンを生成する

  1. curlを使用して、ワークスペース レベルの承認コードを OAuth アクセス トークンと交換します。

    リクエストで次のコードを置き換えます。

    • <databricks-instance>: Azure Databricks のワークスペースのインスタンス名としての <databricks-instance> (例: adb-1234567890123456.7.azuredatabricks.net)
    • <redirect-url>: 前の手順のリダイレクト URL
    • <code-verifier>: 前に生成した検証ツール
    • <authorization-code>: ワークスペース レベルの承認コード
    curl --request POST \
    https://<databricks-instance>/oidc/v1/token \
    --data "client_id=databricks-cli" \
    --data "grant_type=authorization_code" \
    --data "scope=all-apis offline_access" \
    --data "redirect_uri=<redirect-url>" \
    --data "code_verifier=<code-verifier>" \
    --data "code=<authorization-code>"
    
  2. 応答から access_token の値をコピーします。 例えば次が挙げられます。

    {
      "access_token": "eyJr...Dkag",
      "refresh_token": "doau...f26e",
      "scope": "all-apis offline_access",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    トークンは 1 時間有効です。

手順 4: Azure Databricks REST API を呼び出す

アクセス トークンを使用して、スコープに応じてアカウント レベルまたはワークスペース レベルの REST API を呼び出します。 アカウント レベルの API を呼び出すには、Azure Databricks ユーザーがアカウント管理者である必要があります。

アカウント レベルの REST API 要求の例

この例では、curl を Bearer 認証と共に使用して、アカウントに関連付けられているすべてのワークスペースの一覧を取得します。

  • <oauth-access-token> を、アカウント レベルの OAuth アクセス トークンで置き換えます。
  • <account-id> を、アカウント ID に置き換えます。
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
"https://accounts.azuredatabricks.net/api/2.0/accounts/<account-id>/workspaces"

ワークスペース レベルの REST API 要求の例

この例では、curl を Bearer 認証と共に使用して、指定されたワークスペースで使用可能なすべてのクラスターを一覧表示します。

  • <oauth-access-token> を、アカウント レベルまたはワークスペース レベルの OAuth アクセス トークンで置き換えます。
  • <databricks-instance> は、Azure Databricks のワークスペース インスタンスの名前 (例: adb-1234567890123456.7.azuredatabricks.net) に置き換えます。
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
"https://<databricks-instance>/api/2.0/clusters/list"

OAuth U2M 承認フロー中に、アプリケーションによって要求されたスコープの承認を求める同意画面がブラウザーに表示される場合があります。 既に付与されている同意を表示または取り消すことができます。

同意を表示または取り消すには、アプリケーションの統合 ID が必要です。 アプリケーションが Databricks アプリの場合は、Get an app REST API を呼び出して oauth2_app_client_id フィールドから ID を 取得 します。 Databricks Apps のスコープを構成するには、「 アプリにスコープを追加する」を参照してください。 その他のアプリケーションについては、アカウント管理者にお問い合わせください。

アプリケーションに対して承認されたスコープを表示するには:

curl --request GET \
  --header "Authorization: Bearer $OAUTH_TOKEN" \
  "https://<databricks-instance>/api/2.0/oauth-app-integrations/<app-integration-id>/user-consent/me"

アプリケーションに付与した同意を取り消すには:

curl --request DELETE \
  --header "Authorization: Bearer $OAUTH_TOKEN" \
  "https://<databricks-instance>/api/2.0/oauth-app-integrations/<app-integration-id>/user-consent/me"

注

同意を取り消しても、既存のトークンは無効になりません。 アプリケーションでは、既存の更新トークンを使用して、それらのトークンの有効期限が切れるまで新しいアクセス トークンを取得できます。 有効期限が切れた後、アプリケーションは新しいトークンを取得するための新しい承認フローを開始できません。

次の部分を置き換えます。

  • <databricks-instance>: Azure Databricks のワークスペースのインスタンス名としての <databricks-instance> (例: adb-1234567890123456.7.azuredatabricks.net)
  • <app-integration-id>: アプリケーション統合 ID