OAuth を使用して Databricks へのユーザー アクセスを承認する
この記事では、Databricks CLIまたはDatabricks REST APIsを使用するときに、Databricksリソースへのユーザーアクセスを承認する方法について説明します。
Databricks では、UI の外部でのユーザー承認と認証の優先プロトコルとして OAuth 2.0 が使用されます。統合クライアント認証により、トークンの生成と更新が自動化されます。ユーザーがサインインして同意を与えると、OAuthは、CLI、SDK、またはその他のツールがユーザーに代わって使用するアクセストークンを発行します。各アクセストークンは1時間有効で、その後、新しいトークンが自動的に要求されます。
この記事では、 承認 とは OAuth を使用して Databricks リソースへのアクセスを許可することを指し、 認証 とはアクセス トークンを使用して資格情報を検証することを指します。
詳細については、「 Databricks リソースへのアクセスの承認」を参照してください。
Databricks リソースへのアクセスを承認する方法
Databricks では、OAuth を使用してユーザー アカウントを承認する 2 つの方法がサポートされています。
-
自動 (推奨): サポートされているツールや SDK (Databricks Terraform SDK など) を使用している場合は、 統合クライアント認証 を使用します。このアプローチでは、トークンの生成と更新が自動的に処理されます。
-
手動: コード検証ツールとチャレンジを生成し、それらを OAuth トークンと交換します。ツールが統合クライアント認証をサポートしていない場合は、この方法を使用します。詳細については、「 OAuth U2M アクセストークンの手動生成」を参照してください。
統合クライアント認証による自動認証
承認を設定する前に、実行する予定のワークスペース操作のタイプの ACL アクセス許可を確認し、アカウントに必要なアクセスレベルがあることを確認します。詳細については、「 アクセス制御リスト」を参照してください。
Databricks SDK と、統合クライアント認証をサポートするツールを使用して OAuth 承認を実行するには、コード内に次のものを統合します。
- Environment
- Profile
- CLI
- VS Code
- Connect
- Terraform
- Python
- Java
- Go
ツールまたは SDK で特定の Databricks 認証の種類の環境変数を使用するには、「 Databricks リソースへのアクセスの承認 」またはツールまたは SDK のドキュメントを参照してください。統合クライアント認証の環境変数とフィールド、およびクライアント統合認証のデフォルト方式も参照してください。
アカウントレベルの操作では、以下の環境変数を設定します。
DATABRICKS_HOST
:DatabricksアカウントのコンソールURLhttps://accounts.cloud.databricks.com
の値に設定します。DATABRICKS_ACCOUNT_ID
ワークスペースレベルの操作では、以下の環境変数を設定します。
DATABRICKS_HOST
で、Databricks ワークスペース URL の値 (https://dbc-a1b2345c-d6e7.cloud.databricks.com
など) に設定します。
Databricks 構成プロファイル を作成または識別し、 .databrickscfg
ファイルに次のフィールドを含めます。プロファイルを作成する場合は、プレースホルダを適切な値に置き換えます。ツールまたは SDK でプロファイルを使用するには、「 Databricks リソースへのアクセスの承認 」またはツールまたは SDK のドキュメントを参照してください。統合クライアント認証の環境変数とフィールド、およびクライアント統合認証のデフォルト方式も参照してください。
アカウントレベルのオペレーションの場合は、.databrickscfg
ファイルに次の値を設定します。この場合、Databricks アカウント コンソールの URL は https://accounts.cloud.databricks.com
です。
[<some-unique-configuration-profile-name>]
host = <account-console-url>
account_id = <account-id>
ワークスペース レベルの操作の場合は、.databrickscfg
ファイルに次の値を設定します。この場合、ホストは Databricks ワークスペースの URL です (例: https://dbc-a1b2345c-d6e7.cloud.databricks.com
[<some-unique-configuration-profile-name>]
host = <workspace-url>
Databricks CLI の場合は、次のオプションを指定して databricks auth login
コマンドを実行します。
- アカウントレベルの操作の場合は、
--host https://accounts.cloud.databricks.com --account-id <account-id>
. - ワークスペースレベルの操作の場合は、
--host <workspace-url>
.
次に、Web ブラウザーの指示に従って、Databricks アカウントまたはワークスペースにログインします。
詳細については、「 Databricks CLI を使用した OAuth 認証」を参照してください。
Visual Studio Code の Databricks 拡張機能については、「 Visual Studio Code の Databricks 拡張機能の承認を設定する」の手順に従います。
OAuth U2M 認証は、Databricks Runtime 13.1 以降の Python 用 Databricks Connect と、Databricks Runtime 13.3 LTS 以降の Scala でサポートされています。
Databricks Connect では、次のいずれかを行うことができます。
- 構成プロファイルを使用します。 [ プロファイル] タブの説明に従って、
.databrickscfg
ファイルでワークスペース レベルの値を設定します。また、cluster_id
をワークスペースインスタンスのURLに設定します。 - 環境変数を使用します。 [ 環境] タブに表示されているのと同じ値を設定します。また、
DATABRICKS_CLUSTER_ID
をワークスペースインスタンスのURLに設定します。
.databrickscfg
の値は、環境変数よりも優先されます。
これらの設定でDatabricks Connectを初期化するには、コンピュート構成 for Databricks Connectを参照してください。
Terraform構成を適用する前に、構成でワークスペース操作とアカウント操作のどちらを使用しているかに応じて、「 CLI 」タブで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などの他の構成ストアから値を取得します。「Vault プロバイダ」も参照してください。この例では、Databricks アカウント コンソールの URL に account_id
を設定できます。
ワークスペースレベルの操作
デフォルト認証の場合:
provider "databricks" {
alias = "workspace"
}
直接構成の場合:
provider "databricks" {
alias = "workspace"
host = <retrieve-workspace-url>
}
コードを実行する前に、 ワークスペース またはアカウント操作オプションを使用して CLI タブで 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
プレースホルダーを独自の実装に置き換えて、コンソールまたは Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。
ワークスペースレベルの操作
デフォルト認証の場合:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# ...
直接構成の場合:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(host = retrieveWorkspaceUrl())
# ...
を使用し、Databricks PythonDatabricksクライアント統合認証 を実装する ツールと SDK を使用した認証の詳細については 以下を参照してください。
コードを実行する前に、 ワークスペース またはアカウント操作オプションを使用して CLI タブで 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
プレースホルダーを独自の実装に置き換えて、コンソールまたは Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。
ワークスペースレベルの操作
デフォルト認証の場合:
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);
// ...
を使用し、Databricks JavaDatabricksクライアント統合認証 を実装する ツールと SDK を使用した承認と認証の詳細については 以下を参照してください。
- Scala 用の Databricks Connect クライアントを設定する (認証に Databricks SDK for Java を使用)
- Databricksアカウントまたはワークスペースを使用してDatabricks SDK for Javaを認証する
コードを実行する前に、 ワークスペース またはアカウント操作オプションを使用して CLI タブで 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
プレースホルダーを独自の実装に置き換えて、コンソールまたは Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。
ワークスペースレベルの操作
デフォルト認証の場合:
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 ツールと SDKDatabricksを使用した認証の詳細については、「アカウントまたはワークスペースで Go の を認証DatabricksSDKDatabricks する」を参照してください。
OAuth U2M アクセストークンを手動で生成する
このセクションは、 Databricks 統合クライアント認証 標準をサポートしていないサードパーティのツールまたはサービスを使用するユーザーを対象としています。OAuth U2M 認証に Databricks OAuth トークンを手動で生成、更新、または使用する必要がある場合は、このセクションの手順に従います。
ステップ 1: コード検証ツールとチャレンジを生成する
OAuth U2M アクセス トークンを手動で生成するには、 まずコード検証ツール と一致する コード チャレンジ を作成します。手順 2 のチャレンジを使用して認証コードを取得し、手順 3 の検証ツールを使用してそのコードをアクセス トークンと交換します。
OAuth PKCE 標準に従います。
- コード検証ツールは、 、
a–z
、0–9
、-._~``A–Z
文字を使用する暗号的にランダムな文字列 (43 から 128 文字) です。 - コードチャレンジは、検証者の Base64 URL でエンコードされた SHA256 ハッシュです。
詳細については、 「認可リクエスト」を参照してください。
次の Python スクリプトは、検証ツールとチャレンジを生成します。複数回使用できますが、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: 認証コードを生成する
Databricks OAuth アクセス トークンを取得するには、まず OAuth 承認コードを生成する必要があります。このコードは使用後すぐに期限切れになります。コードは、アカウント レベルまたはワークスペース レベルで生成できます。
- アカウント level: ユーザーがアクセスできるすべてのワークスペースでアカウントレベルとワークスペースレベルの両方の REST APIs を呼び出すために使用します。
- ワークスペースレベル: 1 つのワークスペース内で REST APIs を呼び出すために使用します。
これらの例では、クライアント ID として databricks-cli
を使用します。CLI や SDK などの組み込みの Databricks ツールを使用していない場合は、カスタム OAuth アプリケーションを有効にし、その client_id
を要求で使用する必要があります。パートナー OAuth アプリケーションを有効または無効にするを参照してください。
アカウントレベルの認証コードを生成する
-
アカウントIDを見つけます。
-
ブラウザーで、次の置換を含む URL に移動します。
<account-id>
: Databricks アカウント ID<redirect-url>
: ローカル リダイレクト URI (例:http://localhost:8020
)<state>
: 応答を検証するためのプレーンテキスト文字列<code-challenge>
: ステップ 1 のコード チャレンジ
https://accounts.cloud.databricks.com/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 -
Databricks アカウントにアクセスするように求められたら、ログインします。
-
ブラウザのアドレスバーから認証コードをコピーします。これは、リダイレクトURLの
code=
後と&
前の値です。http://localhost:8020/?code=dcod...7fe6&state=<state>
state
値が最初に指定した値と一致していることを確認します。そうでない場合は、コードを破棄します。 -
アカウント レベルのアクセストークンの生成に進みます。
ワークスペース レベルの認証コードを生成する
-
ブラウザーで、次の置換を含む URL に移動します。
<databricks-instance>
: Databricks ワークスペース インスタンス名を含む<databricks-instance>
(例:dbc-a1b2345c-d6e7.cloud.databricks.com
<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 -
Databricks アカウントにアクセスするように求められたら、ログインします。
-
ブラウザのアドレスバーから認証コードをコピーします。これは、リダイレクトURLの
code=
後と&
前の値です。http://localhost:8020/?code=dcod...7fe6&state=<state>
state
値が最初に指定した値と一致していることを確認します。そうでない場合は、コードを破棄します。 -
「 ワークスペースレベルのアクセストークンの生成」に進みます。
手順 3: 認証コードをアクセス トークンと交換する
Databricks OAuth アクセス トークンの承認コードを交換するには、適切なレベルを選択します。
- アカウント level: ユーザーがアクセスできるすべてのワークスペースでアカウントレベルとワークスペースレベルの両方の REST APIs を呼び出すために使用します。
- ワークスペースレベル: 1 つのワークスペース内で REST APIs を呼び出すために使用します。
アカウントレベルのアクセストークンを生成する
-
curl
を使用して、アカウントレベルの認証コードを OAuth アクセストークンと交換します。要求内の次の内容を置き換えます。
<account-id>
: Databricks アカウント ID<redirect-url>
: 前の手順のリダイレクト URL<code-verifier>
: 前に生成した検証ツール<authorization-code>
: 前のステップの認証コード
Bashcurl --request POST \
https://accounts.cloud.databricks.com/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>" -
応答から
access_token
値をコピーします。例えば:JSON{
"access_token": "eyJr...Dkag",
"refresh_token": "doau...f26e",
"scope": "all-apis offline_access",
"token_type": "Bearer",
"expires_in": 3600
}トークンは 1 時間有効です。
-
「 手順 4: Databricks REST API を呼び出す」に進みます。
ワークスペース レベルのアクセス トークンを生成する
-
curl
を使用して、ワークスペースレベルの認証コードを OAuth アクセストークンと交換します。要求内の次の内容を置き換えます。
<databricks-instance>
: Databricks ワークスペース インスタンス名を含む<databricks-instance>
(例:dbc-a1b2345c-d6e7.cloud.databricks.com
<redirect-url>
: 前の手順のリダイレクト URL<code-verifier>
: 前に生成した検証ツール<authorization-code>
: ワークスペースレベルの認証コード
Bashcurl --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>" -
応答から
access_token
値をコピーします。例えば:JSON{
"access_token": "eyJr...Dkag",
"refresh_token": "doau...f26e",
"scope": "all-apis offline_access",
"token_type": "Bearer",
"expires_in": 3600
}トークンは 1 時間有効です。
手順 4: Databricks REST API を呼び出す
アクセストークンを使用して、スコープに応じてアカウントレベルまたはワークスペースレベルの REST APIsを呼び出します。 アカウントレベルの APIsを呼び出すには、 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.cloud.databricks.com/api/2.0/accounts/<account-id>/workspaces"
ワークスペース レベルの REST API 要求の例
この例では、 curl
と Bearer
認証を使用して、指定したワークスペースで使用可能なすべてのクラスターを一覧表示します。
<oauth-access-token>
をアカウントレベルまたはワークスペースレベルの OAuth アクセストークンに置き換えます。<databricks-instance>
を Databricks ワークスペース インスタンス名 (例:dbc-a1b2345c-d6e7.cloud.databricks.com
) に置き換えます。
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
"https://<databricks-instance>/api/2.0/clusters/list"