サービスプリンシパルへのアクセスを承認する Databricks with OAuth
この記事では、自動化された CLI コマンドやスクリプトやアプリケーションから行われた REST API 呼び出しなど、無人プロセスから Databricks リソースへのアクセスを承認する方法について説明します。
Databricks は、UI の外部でのサービスプリンシパルの認証と認証の優先プロトコルとして OAuth 2.0 を使用します。統合クライアント認証により、トークンの生成と更新が自動化されます。サービスプリンシパルがサインインして同意を得ると、 OAuth は、 CLI、 SDK、またはその他のツールが代わりに使用するアクセストークンを発行します。 各アクセストークンは1時間有効で、その後、新しいトークンが自動的に要求されます。
この記事では、 認証 とは、 OAuth を使用してサービスプリンシパル Databricks リソースへのアクセス権を付与することを指し、 認証 とは、アクセストークンを通じて資格情報を検証することを指します。
詳細については、「 Databricks リソースへのアクセスの承認」を参照してください。
サービスプリンシパルを承認する方法
Databricks では、サービスプリンシパルを承認する 2 つの方法がサポートされています。
-
自動 (推奨): Databricks Terraform SDK などのサポートされているツールや 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.gcp.databricks.com
またはターゲット ワークスペース URL (ワークスペース操作のhttps://1234567890123456.7.gcp.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.gcp.databricks.com
の値に設定します。DATABRICKS_ACCOUNT_ID
DATABRICKS_CLIENT_ID
DATABRICKS_CLIENT_SECRET
ワークスペースレベルの操作では、以下の環境変数を設定します。
DATABRICKS_HOST
を Databricks ワークスペース URL の値 (例:https://1234567890123456.7.gcp.databricks.com
) に設定します。DATABRICKS_CLIENT_ID
DATABRICKS_CLIENT_SECRET
Databricks 構成プロファイル を作成または識別し、 .databrickscfg
ファイルに次のフィールドを含めます。プロファイルを作成する場合は、プレースホルダを適切な値に置き換えます。ツールまたは SDK でプロファイルを使用するには、「 Databricks リソースへのアクセスの承認 」またはツールまたは SDK のドキュメントを参照してください。統合クライアント認証の環境変数とフィールド、およびクライアント統合認証のデフォルト方式も参照してください。
アカウントレベルのオペレーションの場合は、.databrickscfg
ファイルに次の値を設定します。この場合、Databricks アカウント コンソールの URL は https://accounts.gcp.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://1234567890123456.7.gcp.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 Runtime13.3LTS 以降のPython、Scala向けDatabricks Connectでサポートされています。
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://1234567890123456.7.gcp.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.gcp.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://1234567890123456.7.gcp.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
プレースホルダを独自の実装に置き換えて、コンソールまたは Google Cloud Secret Manager などの他の構成ストアから値を取得します。この場合、Databricks アカウント コンソールの URL は https://accounts.gcp.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
プレースホルダを独自の実装に置き換えて、コンソールまたはGoogle Cloud Secret Managerなどの他の構成ストアから値を取得します。この場合、ホストは Databricks ワークスペースの URL です (例: https://1234567890123456.7.gcp.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
プレースホルダを独自の実装に置き換えて、コンソールまたはGoogle Cloud Secret Managerなどの他の構成ストアから値を取得します。この場合、Databricks アカウント コンソールの URL は https://accounts.gcp.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
プレースホルダを独自の実装に置き換えて、コンソールまたはGoogle Cloud Secret Managerなどの他の構成ストアから値を取得します。この場合、ホストは Databricks ワークスペースの URL です (例: https://1234567890123456.7.gcp.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"
)
// ...
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
プレースホルダを独自の実装に置き換えて、コンソールまたはGoogle Cloud Secret Managerなどの他の構成ストアから値を取得します。この場合、Databricks アカウント コンソールの URL は https://accounts.gcp.databricks.com
です。
ワークスペースレベルの操作
デフォルト設定の場合:
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: retrieveWorkspaceUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
retrieve
プレースホルダを独自の実装に置き換えて、コンソールまたはGoogle Cloud Secret Managerなどの他の構成ストアから値を取得します。この場合、ホストは Databricks ワークスペースの URL です (例: https://1234567890123456.7.gcp.databricks.com
)。
Go を使用してクライアント統合認証 を実装し、Databricksクライアント統合認証を実装したDatabricksツールとSDKによる認証の詳細については、アカウントまたはワークスペースで Go向けDatabricks SDKを認証するを参照してください。
OAuth M2M アクセストークンを手動で生成する
このセクションは、 Databricks 統合クライアント認証をサポートしていないツールまたはサービスを対象としています。M2M 認証に Databricks OAuth トークンを手動で生成、更新、または使用する必要がある場合は、次の手順に従います。
OAuth M2M アクセストークンを生成するには、サービスプリンシパルのクライアント ID とシークレットOAuth使用します。各アクセストークンは 1 時間有効です。有効期限が切れたら、新しいトークンを要求します。トークンは、アカウントレベルまたはワークスペースレベルのいずれかで生成できます。
- アカウント level: サービスプリンシパルがアクセスできるアカウントとワークスペースのアカウントレベルとワークスペースレベルの両方の REST APIs を呼び出すために使用します。 アカウント レベルのアクセストークンの生成を参照してください。
- ワークスペースレベル: 1 つのワークスペース内で REST APIs を呼び出すために使用します。 「 ワークスペースレベルのアクセストークンを生成する」を参照してください。
アカウントレベルのアクセストークンを生成する
アカウントレベルのトークンを使用して、アカウントとサービスプリンシパルがアクセスできる任意のワークスペースの REST APIs を呼び出します。
-
アカウントIDを見つけます。
-
次の URL の
<account-id>
をアカウント ID に置き換えて、トークンエンドポイント URL を構築します。https://accounts.gcp.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>
に置き換えます (例:1234567890123456.7.gcp.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.gcp.databricks.com/api/2.0/accounts/<account-id>/workspaces'
ワークスペース レベルの REST API 要求の例
この例では、ワークスペースで使用可能なすべてのクラスタリングを一覧表示します。 取り替える:
<oauth-access-token>
サービスプリンシパルの OAuth アクセストークン。<databricks-instance>
を Databricks ワークスペース インスタンス名 (例:1234567890123456.7.gcp.databricks.com
) に置き換えます。
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'
追加のリソース
- サービスプリンシパル
- Databricks ID モデルの概要
- 認証とアクセス制御に関する追加情報