次の方法で共有


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

この記事では、Azure 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 アクセス許可を確認し、アカウントに必要なアクセス レベルがあることを確認します。 詳細については、 アクセス制御リストを参照してください。

統合クライアント認証をサポートする Azure 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

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

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

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

VS Code

Visual Studio Code 用の Databricks 拡張機能の場合は、「 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 = retrieveWorkspaceUrl())
# ...

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–Za–z0–9-._~を使用する暗号ランダム文字列 (43 ~ 128 文字) です。
  • コードチャレンジは、検証ツールの Base64 URL エンコード SHA256 ハッシュです。

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

次の 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. ブラウザーのアドレス バーから認証コードをコピーします。 これは、 code= した後、リダイレクト URL に & する前の値です。

    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. ブラウザーのアドレス バーから認証コードをコピーします。 これは、 code= した後、リダイレクト URL に & する前の値です。

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

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

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

手順 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 要求の例

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

  • <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 要求の例

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

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