サービスプリンシパルへのアクセスを承認する Databricks with OAuth
この記事では、自動化された CLI コマンドやスクリプトやアプリケーションから行われた REST API 呼び出しなど、無人プロセスから Databricks リソースへのアクセスを承認する方法について説明します。
Databricks は、UI の外部でのサービスプリンシパルの認証と認証の優先プロトコルとして OAuth 2.0 を使用します。統合クライアント認証により、トークンの生成と更新が自動化されます。サービスプリンシパルがサインインして同意を得ると、 OAuth は、 CLI、 SDK、またはその他のツールが代わりに使用するアクセストークンを発行します。 各アクセストークンは1時間有効で、その後、新しいトークンが自動的に要求されます。
この記事では、 認証 とは、 OAuth を使用してサービスプリンシパル Databricks リソースへのアクセス権を付与することを指し、 認証 とは、アクセストークンを通じて資格情報を検証することを指します。
詳細については、「 Databricks リソースへのアクセスの承認」を参照してください。
サービスプリンシパルを承認する方法
Databricks では、サービスプリンシパルを承認する 2 つの方法がサポートされています。
-
自動 (推奨): サポートされているツールや SDK (Databricks Terraform SDK など) で 統合認証 を使用します。このアプローチは、トークンの生成と更新を自動的に処理し、自動化やその他の無人ワークロードに最適です。
-
手動: コード検証ツールとチャレンジを生成し、それらを OAuth トークンと交換します。ツールまたは API が統合認証をサポートしていない場合は、この方法を使用します。アプリケーション用に独自のトークン更新メカニズムを構築する必要がある場合があります。詳細については、「 OAuth M2M アクセストークンを手動で生成する」を参照してください。
前提 条件
OAuth を設定する前に、次の手順を実行します。
- Databricksサービスプリンシパルを作成します。Add サービスプリンシパルをアカウントに追加するを参照してください。
- サービスプリンシパルの [構成 ] タブに移動し、このワークスペースに必要なエンタイトルメントを選択します。
- [ 権限] タブに移動し、このサービスプリンシパルを管理および使用する Databricks ユーザー、サービスプリンシパル、およびグループにアクセス権を付与します。 「 サービスプリンシパルを管理および使用できるユーザー」を参照してください。
ステップ 1: OAuth シークレットを作成する
OAuth を使用して Databricks リソースへのアクセスを承認するには、OAuth シークレットを作成する必要があります。シークレットは、認証用の OAuth アクセストークンを生成するために使用されます。サービスプリンシパルには最大 5 つの OAuth シークレットを含めることができ、各シークレットは最大 2 年間有効です。
アカウント管理者とワークスペース管理者は、サービスプリンシパルのOAuthシークレットを作成できます。
- サービスプリンシパルの詳細ページで、[ シークレット] タブを開きます。
- [ OAuthシークレット ] で、[ シークレットを生成 ] をクリックします。
- シークレットの有効期間を日数 (最大 730 日) で設定します。
- 表示されたシークレットとクライアント ID をコピーし、[ 完了] をクリックします。シークレットは一度だけ表示されます。クライアント ID は、サービスプリンシパルのアプリケーション ID と同じです。
アカウント管理者は、アカウントコンソールから OAuth シークレットを作成することもできます。 [ ユーザー管理 ] タブからサービスプリンシパルを選択し、[ 資格情報とシークレット] タブに移動します。
サービスプリンシパルがクラスターまたは SQLウェアハウスを使用できるようにするには、サービスプリンシパルにそれらへのアクセス権を付与する必要があります。 コンピュートの権限またはSQLウェアハウスの管理を参照してください。
ステップ 2: OAuth 認証を使用する
統合認証ツールでOAuth認可を使用するには、次の関連環境変数、 .databrickscfg
フィールド、Terraformフィールドまたは Config
フィールドを設定する必要があります。
- アカウント操作の
https://accounts.cloud.databricks.com
またはターゲット ワークスペース URL (ワークスペース操作のhttps://dbc-a1b2345c-d6e7.cloud.databricks.com
など) として指定される Databricks ホスト。 - Databricksアカウント操作用のDatabricksアカウントID。
- サービスプリンシパルのクライアントID。
- サービスプリンシパルのシークレット。
OAuth サービスプリンシパル認証を実行するには、参加するツールまたはSDKに基づいて、コード内に以下を統合します。
- Environment
- Profile
- CLI
- Connect
- VS Code
- Terraform
- Python
- Java
- Go
ツールまたは SDK で特定の Databricks 認証の種類に環境変数を使用するには、「 Databricks リソースへのアクセスを承認する」 またはツールまたは SDK のドキュメントを参照してください。統合認証の環境変数とフィールド、および認証方法の優先度も参照してください。
アカウントレベルの操作では、以下の環境変数を設定します。
DATABRICKS_HOST
:DatabricksアカウントのコンソールURLhttps://accounts.cloud.databricks.com
の値に設定します。DATABRICKS_ACCOUNT_ID
DATABRICKS_CLIENT_ID
DATABRICKS_CLIENT_SECRET
ワークスペースレベルの操作では、以下の環境変数を設定します。
DATABRICKS_HOST
を Databricks ワークスペース URL の値 (例:https://dbc-a1b2345c-d6e7.cloud.databricks.com
) に設定します。DATABRICKS_CLIENT_ID
DATABRICKS_CLIENT_SECRET
.databrickscfg
ファイル内の次のフィールドを使用して、Databricks 構成プロファイルを作成または識別します。プロファイルを作成する場合は、プレースホルダを適切な値に置き換えます。ツールまたは SDK でプロファイルを使用するには、「 Databricks リソースへのアクセスを承認する」 またはツールまたは SDK のドキュメントを参照してください。統合認証の環境変数とフィールド、および認証方法の優先度も参照してください。
アカウントレベルのオペレーションの場合は、.databrickscfg
ファイルに次の値を設定します。この場合、Databricks アカウント コンソールの URL は https://accounts.cloud.databricks.com
です。
[<some-unique-configuration-profile-name>]
host = <account-console-url>
account_id = <account-id>
client_id = <service-principal-client-id>
client_secret = <service-principal-secret>
ワークスペース レベルの操作の場合は、.databrickscfg
ファイルに次の値を設定します。この場合、ホストは Databricks ワークスペースの URL です (例: https://dbc-a1b2345c-d6e7.cloud.databricks.com
[<some-unique-configuration-profile-name>]
host = <workspace-url>
client_id = <service-principal-client-id>
client_secret = <service-principal-secret>
Databricks CLIの場合は、次のいずれかを実行します。
- 環境変数は、[ 環境] タブで指定されているように設定します。
.databrickscfg
ファイル内の値を [ プロファイル] タブで指定したように設定します。
環境変数は常に.databrickscfg
ファイルの値よりも優先されます。
OAuth マシン間 (M2M) 認証も参照してください。
OAuth サービスプリンシパル の認証 は、次の Databricks Connect バージョンでサポートされています。
- Pythonの場合、Databricks Connect for Databricks Runtime 13.1以降。
- Scalaの場合、Databricks Connect for Databricks Runtime 13.3 LTS以降。
Databricks Connect では、次のいずれかを行うことができます。
- 構成プロファイルを使用します。 [ プロファイル] タブの説明に従って、
.databrickscfg
ファイルでワークスペース レベルの値を設定します。また、cluster_id
をワークスペースインスタンスのURLに設定します。 - 環境変数を使用します。 [ 環境] タブに表示されているのと同じ値を設定します。また、
DATABRICKS_CLUSTER_ID
をワークスペースインスタンスのURLに設定します。
.databrickscfg
の値は、環境変数よりも優先されます。
これらの設定でDatabricks Connectを初期化するには、コンピュート構成 for Databricks Connectを参照してください。
DatabricksのVisual Studio Code拡張機能の場合は、次のようにします。
- [
.databrickscfg
プロファイル] タブで指定されているように、Databricks ワークスペースレベルの操作 の ファイル内の値を設定します。 - DatabricksのVisual Studio Code拡張機能の [ 構成 ] ウィンドウで、[ Databricksを構成する ] をクリックします。
- コマンド パレット の Databricks Host で、ワークスペースの URL (
https://dbc-a1b2345c-d6e7.cloud.databricks.com
など) を入力し、Enter
キーを押します。 - コマンドパレット で、URLのリストでターゲットプロファイルの名前を選択します。
詳細については、「 Visual Studio Code の Databricks 拡張機能の承認を設定する」を参照してください。
アカウントレベルの操作
デフォルト認証の場合:
provider "databricks" {
alias = "accounts"
}
直接構成の場合:
provider "databricks" {
alias = "accounts"
host = <retrieve-account-console-url>
account_id = <retrieve-account-id>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
retrieve
プレースホルダーを独自の実装に置き換えて、コンソールまたはHashiCorp Vaultなどの他の構成ストアから値を取得します。「Vault プロバイダ」も参照してください。この場合、Databricks アカウント コンソールの URL は https://accounts.cloud.databricks.com
です。
ワークスペースレベルの操作
デフォルト設定の場合:
provider "databricks" {
alias = "workspace"
}
直接構成の場合:
provider "databricks" {
alias = "workspace"
host = <retrieve-workspace-url>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
retrieve
プレースホルダーを独自の実装に置き換えて、コンソールまたはHashiCorp Vaultなどの他の構成ストアから値を取得します。「Vault プロバイダ」も参照してください。この場合、ホストは Databricks ワークスペースの URL です (例: https://dbc-a1b2345c-d6e7.cloud.databricks.com
)。
Databricks Terraformプロバイダーによる認証の詳細については、「認証」を参照してください。
アカウントレベルの操作
デフォルト設定の場合:
from databricks.sdk import AccountClient
a = AccountClient()
# ...
直接構成の場合:
from databricks.sdk import AccountClient
a = AccountClient(
host = retrieve_account_console_url(),
account_id = retrieve_account_id(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
retrieve
プレースホルダーを独自の実装に置き換えて、コンソールまたは Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。この場合、Databricks アカウント コンソールの URL は https://accounts.cloud.databricks.com
です。
ワークスペースレベルの操作
デフォルト設定の場合:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# ...
直接構成の場合:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(
host = retrieve_workspace_url(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
retrieve
プレースホルダーを独自の実装に置き換えて、コンソール、または Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。この場合、ホストは Databricks ワークスペースの URL です (例: https://dbc-a1b2345c-d6e7.cloud.databricks.com
)。
詳細については 情報 Pythonを使用して統合認証を実装するDatabricksツールとSDKでの認証については、以下を参照してください。
アカウントレベルの操作
デフォルト設定の場合:
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())
.setClientId(retrieveClientId())
.setClientSecret(retrieveClientSecret());
AccountClient a = new AccountClient(cfg);
// ...
retrieve
プレースホルダーを独自の実装に置き換えて、コンソール、または Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。この場合、Databricks アカウント コンソールの URL は https://accounts.cloud.databricks.com
です。
ワークスペースレベルの操作
デフォルト設定の場合:
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())
.setClientId(retrieveClientId())
.setClientSecret(retrieveClientSecret());
WorkspaceClient w = new WorkspaceClient(cfg);
// ...
retrieve
プレースホルダーを独自の実装に置き換えて、コンソール、または Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。この場合、ホストは Databricks ワークスペースの URL です (例: https://dbc-a1b2345c-d6e7.cloud.databricks.com
)。
詳細については 情報 Javaを使用して統合認証を実装するDatabricksツールとSDKでの認証については、以下を参照してください。
- Scala 用の Databricks Connect クライアントを設定します (Scala 用の Databricks Connect クライアントは、認証に付属の Databricks SDK for Java を使用します)
- Databricksアカウントまたはワークスペースを使用してDatabricks SDK for Javaを認証する
アカウントレベルの操作
デフォルト設定:
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
a := databricks.Must(databricks.NewAccountClient())
直接構成の場合:
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
Host: retrieveWorkspaceUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
retrieve
プレースホルダーを独自の実装に置き換えて、コンソール、または Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。この場合、Databricks アカウント コンソールの URL は https://accounts.cloud.databricks.com
です。
ワークスペースレベルの操作
デフォルト設定の場合:
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
w := databricks.Must(databricks.NewWorkspaceClient())
直接構成の場合:
import "github.com/databricks/databricks-sdk-go"
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
Host: retrieveAccountConsoleUrl(),
AccountId: retrieveAccountId(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
retrieve
プレースホルダーを独自の実装に置き換えて、コンソール、または Systems Manager パラメーターストアなどの他の設定ストアから値を取得AWSします。この場合、ホストは Databricks ワークスペースの URL です (例: https://dbc-a1b2345c-d6e7.cloud.databricks.com
)。
Go を使用してクライアント統合認証 を実装し、Databricksクライアント統合認証を実装したDatabricksツールとSDKによる認証の詳細については、アカウントまたはワークスペースで Go向けDatabricks SDKを認証するを参照してください。
OAuth M2M アクセストークンを手動で生成する
このセクションは、 Databricks 統合認証をサポートしていないツールまたはサービス用です。手動で生成、更新、または Databricks OAuth 使用する必要がある場合は、 トークン M2M認証には、次の手順に従ってください。
OAuth M2M アクセストークンを生成するには、サービスプリンシパルのクライアント ID とシークレットOAuth使用します。各アクセストークンは 1 時間有効です。有効期限が切れたら、新しいトークンを要求します。トークンは、アカウントレベルまたはワークスペースレベルのいずれかで生成できます。
- アカウント level: サービスプリンシパルがアクセスできるアカウントとワークスペースのアカウントレベルとワークスペースレベルの両方の REST APIs を呼び出すために使用します。 アカウント レベルのアクセストークンの生成を参照してください。
- ワークスペースレベル: 1 つのワークスペース内で REST APIs を呼び出すために使用します。 「 ワークスペースレベルのアクセストークンを生成する」を参照してください。
アカウントレベルのアクセストークンを生成する
アカウントレベルのトークンを使用して、アカウントとサービスプリンシパルがアクセスできる任意のワークスペースの REST APIs を呼び出します。
-
アカウントIDを見つけます。
-
次の URL の
<account-id>
をアカウント ID に置き換えて、トークンエンドポイント URL を構築します。https://accounts.cloud.databricks.com/oidc/accounts/<my-account-id>/v1/token
-
curl
を使用して OAuth アクセストークンをリクエストします。取り替える:<token-endpoint-URL>
上記のURLに置き換えます。<client-id>
をサービスプリンシパルのクライアント ID (アプリケーション ID) に置き換えます。<client-secret>
サービスプリンシパルの OAuth の秘密で。
Bashexport CLIENT_ID=<client-id>
export CLIENT_SECRET=<client-secret>
curl --request POST \
--url <token-endpoint-URL> \
--user "$CLIENT_ID:$CLIENT_SECRET" \
--data 'grant_type=client_credentials&scope=all-apis'これにより、次のようなレスポンスが生成されます。
JSON{
"access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
"token_type": "Bearer",
"expires_in": 3600
}all-apis
スコープは、サービスプリンシパルがアクセス許可を持つ任意のDatabricks REST APIを呼び出すことを許可するOAuthアクセストークンを要求します。 -
応答から
access_token
値をコピーします。
ワークスペース レベルのアクセス トークンを生成する
ワークスペースレベルのトークンは、そのワークスペースの REST APIs でのみ使用します。
-
トークン エンドポイント URL を構築するには、
<databricks-instance>
を Databricks ワークスペース インスタンス名の<databricks-instance>
に置き換えます (例:dbc-a1b2345c-d6e7.cloud.databricks.com
:https://<databricks-instance>/oidc/v1/token
-
curl
を使用して OAuth アクセストークンをリクエストします。取り替える:<token-endpoint-URL>
上記のURLに置き換えます。<client-id>
をサービスプリンシパルのクライアント ID (アプリケーション ID) に置き換えます。<client-secret>
サービスプリンシパルの OAuth の秘密で。
Bashexport CLIENT_ID=<client-id>
export CLIENT_SECRET=<client-secret>
curl --request POST \
--url <token-endpoint-URL> \
--user "$CLIENT_ID:$CLIENT_SECRET" \
--data 'grant_type=client_credentials&scope=all-apis'これにより、次のようなレスポンスが生成されます。
JSON{
"access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
"token_type": "Bearer",
"expires_in": 3600
} -
応答から
access_token
値をコピーします。
配信エンドポイントのトークンを生成するには、リクエストにエンドポイント ID とアクションを含めます。「OAuthトークンを手動で取得する」を参照してください。
Databricks REST API を呼び出す
OAuth アクセス トークンを使用して、アカウント レベルまたはワークスペース レベルの REST APIsを呼び出します。アカウントレベルの APIsを呼び出すには、サービスプリンシパルはアカウント管理者である必要があります。
認証 Bearer
認証で認証ヘッダーにトークンを含めます。
アカウントレベルの REST API リクエストの例
この例では、アカウントのすべてのワークスペースを一覧表示します。取り替える:
<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 要求の例
この例では、ワークスペースで使用可能なすべてのクラスタリングを一覧表示します。 取り替える:
<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://<workspace-URL>/api/2.0/clusters/list'
OAuth M2M 認証のトラブルシューティング
サービスプリンシパルの Databricks OAuth M2M 認証に関する最も一般的な問題を解決するには、次の手順を使用します。
クイックチェック
まず、OAuth M2M 認証の失敗を引き起こす次の一般的な構成の問題を確認します。
- 資格情報:
DATABRICKS_CLIENT_ID
はサービスプリンシパルのアプリケーション ID (クライアント ID) に設定され、DATABRICKS_CLIENT_SECRET
は OAuth シークレット値に設定され、どちらも余分なスペースはありません。 - ホスト:
DATABRICKS_HOST
は、アカウント操作の場合はhttps://accounts.cloud.databricks.com
、またはワークスペース操作の場合はhttps://dbc-a1b2345c-d6e7.cloud.databricks.com
など、ターゲットワークスペース URL を指します。/api
は含めないでください。 - 割り当て: サービスプリンシパルは、ターゲットワークスペースに割り当てられます。
- 権限: サービスプリンシパルには、ターゲットリソースに対する必要な権限があります。
- 競合:
DATABRICKS_TOKEN
、DATABRICKS_USERNAME
などの競合する変数は設定されていません。競合env | grep DATABRICKS
実行と設定解除の競合。 - ツール: 統合認証と現在の CLI または SDK バージョンを使用します。
401 未承認
考えられる原因と修正:
- 不正なクライアント ID またはシークレット:
DATABRICKS_CLIENT_ID
とDATABRICKS_CLIENT_SECRET
を再コピーします。不明な場合はシークレットを再生成します。 - 期限切れのシークレット: 現在のシークレットの有効期限が切れている場合は、新しいシークレットを作成します。
- 間違ったトークン発行者: M2M の場合は、IdP またはクラウド トークン エンドポイントではなく、Databricks OAuth トークン エンドポイントを使用します。
- ホストの不一致: ワークスペース APIsの認証を行う場合は、呼び出すワークスペース URL
DATABRICKS_HOST
必要があります。
403 禁断
考えられる原因と修正:
- リソースの 権限がありません: サービスプリンシパルにクラスターまたはSQLウェアハウスの
CAN USE
またはCAN MANAGE
、およびノートブック、ジョブ、またはデータオブジェクトに必要なオブジェクトレベルのアクセス権を付与します。 - ワークスペース の割り当てなし: アカウントコンソールで、サービスプリンシパルをワークスペースに割り当てます。
- 管理者 API アクセス: 管理者専用 APIsの場合は、 サービスプリンシパル をワークスペース admin グループに割り当てるか、アカウント admin 権限を付与します。
構成の問題
症状には、タイムアウト、「ホストが見つかりません」、「アカウントが見つかりません」、「ワークスペースが見つかりません」などがあります。
修正:
- ホストルール: アカウントコンソールのURLを使用してアカウント APIs。 ワークスペース APIsのワークスペース URL を使用します。
/api
サフィックスは含めないでください。 - アカウント ID: アカウントレベルの操作にのみ
DATABRICKS_ACCOUNT_ID
を指定します。 アカウントコンソールからUUIDを使用します。 - プロファイルの選択: 複数のプロファイルを使用する場合は、
--profile <name>
渡すか、DATABRICKS_CONFIG_PROFILE
を設定します。
接続
ネットワークの問題が原因で OAuth M2M 認証が失敗した場合は、次のテストを使用して、環境が Databricks エンドポイントに到達できることを確認します。
- DNS:
nslookup <your-host>
(ホスト名の IP アドレスを返す必要があります) - TLS と到達可能性:
curl -I https://<your-host>
(HTTP ステータス 200、401、または 403 を返す必要があります) - 企業ネットワーク: プロキシまたはファイアウォール規則で Databricks エンドポイントへの HTTPS が許可されていることを確認します
追加のリソース
- サービスプリンシパル
- Databricks ID モデルの概要
- 認証とアクセス制御に関する追加情報