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

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 承認を実行するには、コード内に次のものを統合します。

ツールまたは SDK で特定の Databricks 認証の種類の環境変数を使用するには、「 Databricks リソースへのアクセスの承認 」またはツールまたは SDK のドキュメントを参照してください。統合クライアント認証の環境変数とフィールドおよびクライアント統合認証のデフォルト方式も参照してください。

アカウントレベルの操作では、以下の環境変数を設定します。

  • DATABRICKS_HOST:DatabricksアカウントのコンソールURL https://accounts.cloud.databricks.com の値に設定します。
  • DATABRICKS_ACCOUNT_ID

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

  • DATABRICKS_HOSTで、Databricks ワークスペース URL の値 ( https://dbc-a1b2345c-d6e7.cloud.databricks.comなど) に設定します。

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

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

ステップ 1: コード検証ツールとチャレンジを生成する

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

注記

OAuth PKCE 標準に従います。

  • コード検証ツールは、 、 a–z0–9-._~``A–Z文字を使用する暗号的にランダムな文字列 (43 から 128 文字) です。
  • コードチャレンジは、検証者の Base64 URL でエンコードされた SHA256 ハッシュです。

詳細については、 「認可リクエスト」を参照してください。

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

Python
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 アプリケーションを有効または無効にするを参照してください

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

  1. アカウントIDを見つけます

  2. ブラウザーで、次の置換を含む 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
  3. Databricks アカウントにアクセスするように求められたら、ログインします。

  4. ブラウザのアドレスバーから認証コードをコピーします。これは、リダイレクトURLの code= 後と & 前の値です。

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

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

  5. アカウント レベルのアクセストークンの生成に進みます。

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

  1. ブラウザーで、次の置換を含む 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
  2. Databricks アカウントにアクセスするように求められたら、ログインします。

  3. ブラウザのアドレスバーから認証コードをコピーします。これは、リダイレクトURLの code= 後と & 前の値です。

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

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

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

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

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

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

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

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

    要求内の次の内容を置き換えます。

    • <account-id>: Databricks アカウント ID
    • <redirect-url>: 前の手順のリダイレクト URL
    • <code-verifier>: 前に生成した検証ツール
    • <authorization-code>: 前のステップの認証コード
    Bash
    curl --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>"
  2. 応答から access_token 値をコピーします。例えば:

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

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

  3. 手順 4: Databricks REST API を呼び出す」に進みます。

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

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

    要求内の次の内容を置き換えます。

    • <databricks-instance>: Databricks ワークスペース インスタンス名を含む<databricks-instance> (例: dbc-a1b2345c-d6e7.cloud.databricks.com
    • <redirect-url>: 前の手順のリダイレクト URL
    • <code-verifier>: 前に生成した検証ツール
    • <authorization-code>: ワークスペースレベルの認証コード
    Bash
    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 値をコピーします。例えば:

    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 リクエストの例

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

  • <oauth-access-token> をアカウントレベルの OAuth アクセストークンに置き換えます。
  • <account-id>をアカウントIDに置き換えます。
Bash
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 要求の例

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

  • <oauth-access-token> をアカウントレベルまたはワークスペースレベルの OAuth アクセストークンに置き換えます。
  • <databricks-instance> を Databricks ワークスペース インスタンス名 (例: dbc-a1b2345c-d6e7.cloud.databricks.com) に置き換えます。
Bash
export OAUTH_TOKEN=<oauth-access-token>

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