サービスプリンシパルを使用してDatabricksで認証する
この記事では、 Databricksサービスプリンシパルを作成し、それを使用してターゲット エンティティに対して認証する方法について説明します。
注:
サービスプリンシパルの OAuth 資格情報を管理するには、アカウント管理者である必要があります。
ステップ 1: サービスプリンシパルを作成する
サービスプリンシパルは、アカウント内またはワークスペースから直接作成できます。 ワークスペースで作成されたサービスプリンシパルは自動的にアカウントに追加されます。 ワークスペースでID フェデレーションが有効になっている場合、 Databricks 、アカウントに サービスプリンシパル を作成し、それをワークスペースに割り当てることをお勧めします。 ID フェデレーションが有効になっていない場合に、ワークスペース レベルで サービスプリンシパル を使用する場合は、ワークスペースから サービスプリンシパル を作成する必要があります。
アカウントコンソールを使用してサービスプリンシパルをアカウントに追加するには:
アカウント管理者として、アカウントコンソールにログインします。
[ユーザー管理]をクリックします。
[サービスプリンシパル] タブで、[サービスプリンシパルの追加] をクリックします。
サービスプリンシパルの名前を入力します。
「追加」をクリックします。
必要に応じて、 [ロール]タブでアカウント管理者をオンにして、 Databricksアカウント レベルのAPIsを呼び出します。
サービスプリンシパルを ID フェデレーション ワークスペースに割り当てることができるようになりました。
アカウント コンソールのサイドバーで、 [ワークスペース]をクリックします。
ワークスペース名をクリックします。
[権限] タブで、[権限を追加] をクリックします。
サービスプリンシパルを検索して選択し、権限レベル(ワークスペースユーザーまたは管理者)を割り当て、[保存] をクリックします。
ワークスペース管理者として、Databrickワークスペースにログインします。
Databricks ワークスペースの上部バーにあるユーザー名をクリックし、 [設定]を選択します。
[ID とアクセス]タブをクリックします。
「サービスプリンシパル」の横にある「管理」をクリックします。
「サービスプリンシパルの追加」をクリックします。
検索ボックスのドロップダウン矢印をクリックし、[ 新規追加] をクリックします。
サービスプリンシパルの名前を入力します。
「追加」をクリックします。
サービスプリンシパルがワークスペースと Databricks アカウントの両方に追加されます。
ステップ 2: Databricks サービスプリンシパルにワークスペースレベルの権限を割り当てる
ワークスペースの管理コンソールがまだ開いていない場合は、上部のバーにあるユーザー名をクリックし、 「設定」をクリックします。
[ID とアクセス]タブをクリックします。
「サービスプリンシパル」の横にある「管理」をクリックします。
Databricks サービスプリンパルシの名前をクリックして、その設定ページを開きます。
[構成]タブで、このワークスペースに対して Databricks サービスプリンシパルに付与する各資格の横にあるボックスをオンにし、 [更新]をクリックします。
[アクセス許可]タブで、このDatabricksプリンシパル を管理および使用するDatabricksユーザー、サービスプリンシパル、およびグループにアクセス権を付与します。 「サービス プリンシパルでロールを管理する」を参照してください。
ステップ 3: サービスプリンシパルの OAuth シークレットを作成する
OAuthを使用してDatabricksを認証する前に、まずOAuthアクセストークンを生成するために使用できるOAuthシークレットを作成する必要があります。 サービスプリンシパルには最大 5 つのOAuthシークレットを設定できます。 アカウント管理者とワークスペース管理者は、サービスプリンシパルのOAuthシークレットを作成できます。
アカウント管理者として、アカウントコンソールにログインします。
[ユーザー管理]をクリックします。
「サービスプリンシパル」タブで、サービスプリンシパルを選択します。
[OAuth シークレット]で、 [シークレットの生成]をクリックします。
表示された シークレット と クライアントIDをコピーし、「 完了」をクリックします。
シークレットは作成中に一度だけ明らかにされます。 クライアント ID は、サービスプリンシパルのアプリケーション ID と同じです。
ワークスペースの管理コンソールがまだ開いていない場合は、上部のバーにあるユーザー名をクリックし、 「設定」をクリックします。
[IDとアクセス]タブをクリックします。
「サービスプリンシパル」の横にある「管理」をクリックします。
Databricks サービスプリンパルシの名前をクリックして、その設定ページを開きます。
「シークレット」タブをクリックします。
[OAuth シークレット]で、 [シークレットの生成]をクリックします。
表示された シークレット と クライアントIDをコピーし、「 完了」をクリックします。
シークレットは作成中に一度だけ明らかにされます。 クライアント ID は、サービスプリンシパルのアプリケーション ID と同じです。
注:
サービスプリンシパルがクラスターまたは SQL ウェアハウスを使用できるようにするには、サービスプリンシパルにそれらへのアクセス権を付与する必要があります。 「コンピュート権限」または「SQL ウェアハウスの管理」を参照してください。
OAuth M2M 認証の構成を完了する
OAuth M2M認証の構成を完了するには、以下に挙げられた関連する環境変数、.databrickscfg
フィールド、Terraformフィールド、または Config
フィールドを設定する必要があります。
アカウント操作の場合は
https://accounts.gcp.databricks.com
として指定される Databricks ホスト、またはワークスペース操作の場合はターゲット ワークスペース URL (ワークスペース操作の場合はhttps://1234567890123456.7.gcp.databricks.com
など) として指定されます。Databricksアカウント操作用のDatabricksアカウントID。
サービスプリンシパルのクライアントID。
サービスプリンシパルのシークレット。
OAuth M2M認証を実行するには、参加しているツールまたはSDKに基づいて、コード内に以下を統合します。
ツールまたは SDK で特定の Databricks 認証の種類の環境変数を使用するには、「 Databricks ツールまたは SDK でサポートされている認証の種類」、またはツールまたは SDK のドキュメントを参照してください。 「クライアント 統合認証の環境変数とフィールド 」および 「クライアント統合認証方法と資格情報の評価のデフォルト順序」も参照してください。
アカウント レベルの操作の場合は、次の環境変数を設定します。
DATABRICKS_HOST
:DatabricksアカウントのコンソールURL(https://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
.databrickscfg
ファイルで次のフィールドを使用して Databricks 構成プロファイルを作成または識別します。プロファイルを作成する場合は、プレースホルダーを適切な値に置き換えます。 ツールまたは SDK でプロファイルを使用するには、「 Databricks ツールまたは SDK でサポートされている認証の種類」、またはツールまたは 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 M2M 認証は、Databricks Connect for Python および Scala for Databricks Runtime 13.3 LTS 以降でサポートされています。
Databricks Connect では、次のいずれかを実行できます。
この記事の「プロファイル」セクションで指定されているように、Databricksワークスペース レベルの操作の値を
.databrickscfg
ファイルに設定します。 また、プロファイル内のcluster_id
環境変数をワークスペース インスタンス URL (例:https://1234567890123456.7.gcp.databricks.com
) に設定します。この記事の「環境」セクションで指定されているように、Databricksワークスペース レベルの操作の環境変数を設定します。 また、
DATABRICKS_CLUSTER_ID
環境変数をワークスペース インスタンス URL (例:https://1234567890123456.7.gcp.databricks.com
) に設定します。
.databrickscfg
ファイル内の値は、常に環境変数よりも優先されます。
.databrickscfg
ファイル内のこれらの環境変数または値を使用して Databricks Connect クライアントを初期化するには、次のいずれかを参照してください。
Python の場合は、「 Python の接続プロパティの構成」を参照してください。
Scala については、「 Scala の接続プロパティの構成」を参照してください。
Visual Studio Code の Databricks 拡張機能の場合は、次の操作を行います。
この記事の「プロファイル」セクションで指定されているように、Databricksワークスペース レベルの操作の値を
.databrickscfg
ファイルに設定します。Visual Studio Code の Databricks 拡張機能の [ 構成 ] ウィンドウで、 [ Databricks の構成] をクリックします。
コマンド パレットの [Databricks Host] に、ワークスペースの URL (例:
https://1234567890123456.7.gcp.databricks.com
) を入力し、Enter
を押します。コマンド パレットで、URL の一覧からターゲット プロファイルの名前を選択します。
詳細については、 「VS Code の Databricks 拡張機能の認証設定」を参照してください。
アカウントレベルの操作の場合、デフォルトの認証の場合:
provider "databricks" {
alias = "accounts"
}
直接構成の場合(retrieve
プレースホルダーを独自の実装に置き換えて、コンソールやHashiCorp Vaultなどの他の構成ストアから値を取得します。「Vaultのプロバイダー」も参照してください。)この場合、DatabricksアカウントのコンソールURLは https://accounts.gcp.databricks.com
です。
provider "databricks" {
alias = "accounts"
host = <retrieve-account-console-url>
account_id = <retrieve-account-id>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
ワークスペースレベルの操作の場合、デフォルトの認証は次のようになります。
provider "databricks" {
alias = "workspace"
}
直接構成の場合 ( retrieve
プレースホルダーを独自の実装に置き換えて、コンソールまたは他の構成ストア ( HashiCorp Vault など) から値を取得します。 「Vault プロバイダ」も参照してください)。この場合、ホストは Databricks ワークスペースの URL です (例: https://1234567890123456.7.gcp.databricks.com
)。
provider "databricks" {
alias = "workspace"
host = <retrieve-workspace-url>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
Databricks Terraform プロバイダーでの認証の詳細については、「 認証」を参照してください。
アカウント レベルの操作では、デフォルトの認証として以下を使用します。
from databricks.sdk import AccountClient
a = AccountClient()
# ...
直接構成の場合は、以下を使用して、 retrieve
プレースホルダーを独自の実装に置き換え、コンソールまたはGoogle クラウド Secret Managerなどの他の構成ストアから値を取得します。 この場合、Databricks アカウント コンソールの URL はhttps://accounts.gcp.databricks.com
です。
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()
)
# ...
ワークスペースレベルの操作、具体的にはデフォルトの認証の場合:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# ...
直接構成の場合は、 retrieve
プレースホルダーを独自の実装に置き換えて、コンソールまたはGoogle クラウド Secret Managerなどの他の構成ストアから値を取得します。 この場合、ホストは Databricks ワークスペース URLです (例: https://1234567890123456.7.gcp.databricks.com
)。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(
host = retrieve_workspace_url(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
Python を使用し、Databricks クライアント統合認証を実装する Databricks ツールと SDK での認証の詳細については、以下を参照してください。
アカウントレベルの操作の場合、デフォルトの認証の場合:
import com.databricks.sdk.AccountClient;
// ...
AccountClient a = new AccountClient();
// ...
直接構成の場合(コンソールまたはGoogle クラウド Secret Managerなどの他の構成ストアから値を取得するには、 retrieve
プレースホルダーを独自の実装に置き換えます)。 この場合、Databricks アカウント コンソールの URL はhttps://accounts.gcp.databricks.com
です。
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);
// ...
ワークスペースレベルの操作の場合、デフォルトの認証は次のようになります。
import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...
直接構成の場合(コンソールまたはGoogle クラウド Secret Managerなどの他の構成ストアから値を取得するには、 retrieve
プレースホルダーを独自の実装に置き換えます)。 この場合、ホストは Databricks ワークスペース URLです (例: https://1234567890123456.7.gcp.databricks.com
)。
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);
// ...
Java を使用し、Databricks クライアント統合認証を実装する Databricks ツールと SDK での認証の詳細については、以下を参照してください。
Scala 用 Databricks Connect クライアントを設定します (Scala 用 Databricks Connect クライアントでは、認証に付属の Databricks SDK for Java が使用されます)
アカウントレベルの操作の場合、デフォルトの認証の場合:
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...
直接構成の場合(コンソールまたはGoogle クラウド Secret Managerなどの他の構成ストアから値を取得するには、 retrieve
プレースホルダーを独自の実装に置き換えます)。 この場合、Databricks アカウント コンソールの URL はhttps://accounts.gcp.databricks.com
です。
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
Host: retrieveAccountConsoleUrl(),
AccountId: retrieveAccountId(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
ワークスペースレベルの操作の場合、デフォルトの認証は次のようになります。
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...
直接構成の場合(コンソールまたはGoogle クラウド Secret Managerなどの他の構成ストアから値を取得するには、 retrieve
プレースホルダーを独自の実装に置き換えます)。 この場合、ホストは Databricks ワークスペース URLです (例: https://1234567890123456.7.gcp.databricks.com
)。
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
Host: retrieveWorkspaceUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
Go を使用し、Databricks クライアント統合認証を実装する Databricks ツールと SDK での認証の詳細については、「Databricks アカウントまたはワークスペースで Databricks SDK for Go を認証する」を参照してください。
OAuth M2M認証のアクセストークンを手動で生成して使用する
Databricksクライアントの統合認証標準を実装する Databricks ツールと SDK は、OAuth M2M 認証の必要に応じて、ユーザーに代わって Databricks OAuth アクセス VPN を自動的に生成、更新、および使用します。
M2M 認証のために DatabricksOAuthアクセス トークンを手動で生成、更新、または使用する必要がある場合は、このセクションの手順に従ってください。OAuth
ステップ 1: Databricks サービスプリンシパルと OAuth シークレットを作成する
Databricks サービスプリンシパルとそれに対応する OAuth シークレットをまだ持っていない場合は、この記事の冒頭のステップ 1 ~ 3 に従って作成します。
ステップ 2: アクセス許可を手動で生成する
Databricksサービスプリンシパルのクライアント ID とOAuthシークレットを使用して、 OAuthアクセス トークンを要求し、アカウント レベルのREST APIsとワークスペース レベルのREST APIsの両方に対して認証します。 アクセストークンは1時間後に期限切れになります。 有効期限が切れた後は、新しいOAuthアクセストークンをリクエストする必要があります。 OAuthアクセストークンのスコープは、トークンを作成するレベルによって異なります。 次のように、アカウント レベルまたはワークスペース レベルのいずれかでトークンを作成できます。
サービスプリンシパルがアクセスできるアカウントおよびワークスペース内でアカウント レベルおよびワークスペース レベルの REST APIsを呼び出すには、アカウント レベルでアクセス VPN を手動で生成します。
サービス プリンシパルがアクセスできるワークスペースの 1 つのみでREST APIsを呼び出すには、そのワークスペースのみのワークスペース レベルでアクセストークンを手動で生成します。
アカウントレベルのアクセストークンを手動で生成する
アカウント レベルから作成されたOAuthアクセス トークンは、アカウント内、およびサービス プリンシパルがアクセスできる任意のワークスペース内のDatabricks REST APIsに対して使用できます。
アカウント管理者として、アカウントコンソールにログインします。
右上隅にあるユーザー名の横にある下向き矢印をクリックします。
アカウント IDをコピーします。
次の URL の
<my-account-id>
をコピーしたアカウント ID に置き換えて、トークン エンドポイント URL を構築します。https://accounts.gcp.databricks.com/oidc/accounts/<my-account-id>/v1/token
curl
などのクライアントを使用して、トークン エンドポイント URL、サービスプリンシパルのクライアント ID (アプリケーション ID とも呼ばれます)、および作成したサービスプリンシパルのOAuthシークレットを使用してOAuthアクセストークンを要求します。 スコープは、サービスプリンシパルにアクセスが許可されているすべてのall-apis
OAuthにアクセスするために使用できる アクセストークンを要求します。DatabricksRESTAPIs<token-endpoint-URL>
前述のトークン エンドポイント URL に置き換えます。<client-id>
サービスプリンシパルのクライアント ID (アプリケーション ID とも呼ばれます) に置き換えます。<client-secret>
作成したサービスプリンシパルの OAuth シークレットに置き換えます。
export 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'
これにより、次のような応答が生成されます。
{ "access_token": "eyJraWQiOiJkYTA4ZTVjZ…", "token_type": "Bearer", "expires_in": 3600 }
応答から
access_token
をコピーします。「ステップ 3: Databricks REST API を呼び出す」に進んでください。
ワークスペースレベルのアクセストークンを手動で生成する
サービスプリンシパルがアカウント管理者であるか、他のワークスペースのメンバーである場合でも、ワークスペース レベルから作成された OAuth アクセスマラソンは、そのワークスペース内の REST APIsにのみアクセスできます。
https://<databricks-instance>
を Databricks デプロイのワークスペース URLに置き換えて、トークン エンドポイント URL を構築します。https://<databricks-instance>/oidc/v1/token
curl
などのクライアントを使用して、トークン エンドポイント URL、サービスプリンシパルのクライアント ID (アプリケーション ID とも呼ばれます)、および作成したサービスプリンシパルのOAuthシークレットを使用してOAuthアクセストークンを要求します。 スコープは、トークンを要求しているワークスペース内でサービスプリンシパルにアクセス権が付与されているすべてのall-apis
OAuthにアクセスするために使用できる アクセストークンを要求します。DatabricksRESTAPIs<token-endpoint-URL>
前述のトークン エンドポイント URL に置き換えます。<client-id>
サービスプリンシパルのクライアント ID (アプリケーション ID とも呼ばれます) に置き換えます。<client-secret>
作成したサービスプリンシパルの OAuth シークレットに置き換えます。
export 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'
これにより、次のような応答が生成されます。
{ "access_token": "eyJraWQiOiJkYTA4ZTVjZ…", "token_type": "Bearer", "expires_in": 3600 }
応答から
access_token
をコピーします。
ステップ 3: Databricks REST API を呼び出す
OAuthアクセストークンを使用して、 Databricksアカウント レベルのREST APIsとワークスペース レベルのREST APIsを認証できるようになりました。 アカウントレベルのREST APIsを呼び出すには、サービスプリンシパルはアカウント管理者である必要があります。
Bearer
認証を使用してヘッダーにトークンを含めることができます。 このアプローチは、 curl
または構築する任意のクライアントで使用できます。
アカウントレベルの REST API リクエストの例
この例では、 Bearer
認証を使用して、アカウントに関連付けられたすべてのワークスペースのリストを取得します。
<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 リクエストの例
この例では、 Bearer
認証を使用して、指定されたワークスペース内で使用可能なすべてのクラスターを一覧表示します。
<oauth-access-token>
を、前のステップでコピーしたサービスプリンシパルの OAuth アクセスアセトンに置き換えます。<workspace-URL>
、dbc-a1b2345c-d6e7.cloud.databricks.com
のような形式のベース ワークスペース URL に置き換えます。
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'
関連リソース
認証とアクセス制御に関する追加情報