サービスプリンシパルを使用してDatabricksで認証する

この記事では、 Databricksサービスプリンシパルを作成し、それを使用してターゲット エンティティに対して認証する方法について説明します。

注:

サービスプリンシパルの OAuth 資格情報を管理するには、アカウント管理者である必要があります。

ステップ 1: サービスプリンシパルを作成する

サービスプリンシパルは、アカウント内またはワークスペースから直接作成できます。 ワークスペースで作成されたサービスプリンシパルは自動的にアカウントに追加されます。 ワークスペースでID フェデレーションが有効になっている場合、 Databricks 、アカウントに サービスプリンシパル を作成し、それをワークスペースに割り当てることをお勧めします。 ID フェデレーションが有効になっていない場合に、ワークスペース レベルで サービスプリンシパル を使用する場合は、ワークスペースから サービスプリンシパル を作成する必要があります。

アカウントコンソールを使用してサービスプリンシパルをアカウントに追加するには:

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. アカウントコンソールのユーザー管理アイコン [ユーザー管理]をクリックします。

  3. [サービスプリンシパル] タブで、[サービスプリンシパルの追加] をクリックします。

  4. サービスプリンシパルの名前を入力します。

  5. 追加」をクリックします。

  6. 必要に応じて、 [ロール]タブでアカウント管理者をオンにして、 Databricksアカウント レベルのAPIsを呼び出します。

サービスプリンシパルを ID フェデレーション ワークスペースに割り当てることができるようになりました。

  1. アカウント コンソールのサイドバーで、 [ワークスペース]をクリックします。

  2. ワークスペース名をクリックします。

  3. [権限] タブで、[権限を追加] をクリックします。

  4. サービスプリンシパルを検索して選択し、権限レベル(ワークスペースユーザーまたは管理者)を割り当て、[保存] をクリックします。

  1. ワークスペース管理者として、Databrickワークスペースにログインします。

  2. Databricks ワークスペースの上部バーにあるユーザー名をクリックし、 [設定]を選択します。

  3. [ID とアクセス]タブをクリックします。

  4. 「サービスプリンシパル」の横にある「管理」をクリックします。

  5. 「サービスプリンシパルの追加」をクリックします。

  6. 検索ボックスのドロップダウン矢印をクリックし、[ 新規追加] をクリックします。

  7. サービスプリンシパルの名前を入力します。

  8. 追加」をクリックします。

サービスプリンシパルがワークスペースと Databricks アカウントの両方に追加されます。

ステップ 2: Databricks サービスプリンシパルにワークスペースレベルの権限を割り当てる

  1. ワークスペースの管理コンソールがまだ開いていない場合は、上部のバーにあるユーザー名をクリックし、 「設定」をクリックします。

  2. [ID とアクセス]タブをクリックします。

  3. 「サービスプリンシパル」の横にある「管理」をクリックします。

  4. Databricks サービスプリンパルシの名前をクリックして、その設定ページを開きます。

  5. [構成]タブで、このワークスペースに対して Databricks サービスプリンシパルに付与する各資格の横にあるボックスをオンにし、 [更新]をクリックします。

  6. [アクセス許可]タブで、このDatabricksプリンシパル を管理および使用するDatabricksユーザー、サービスプリンシパル、およびグループにアクセス権を付与します。 「サービス プリンシパルでロールを管理する」を参照してください。

ステップ 3: サービスプリンシパルの OAuth シークレットを作成する

OAuthを使用してDatabricksを認証する前に、まずOAuthアクセストークンを生成するために使用できるOAuthシークレットを作成する必要があります。 サービスプリンシパルには最大 5 つのOAuthシークレットを設定できます。 アカウント管理者とワークスペース管理者は、サービスプリンシパルのOAuthシークレットを作成できます。

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. アカウントコンソールのユーザー管理アイコン [ユーザー管理]をクリックします。

  3. 「サービスプリンシパル」タブで、サービスプリンシパルを選択します。

  4. [OAuth シークレット]で、 [シークレットの生成]をクリックします。

  5. 表示された シークレットクライアントIDをコピーし、「 完了」をクリックします。

    シークレットは作成中に一度だけ明らかにされます。 クライアント ID は、サービスプリンシパルのアプリケーション ID と同じです。

  1. ワークスペースの管理コンソールがまだ開いていない場合は、上部のバーにあるユーザー名をクリックし、 「設定」をクリックします。

  2. [IDとアクセス]タブをクリックします。

  3. 「サービスプリンシパル」の横にある「管理」をクリックします。

  4. Databricks サービスプリンパルシの名前をクリックして、その設定ページを開きます。

  5. 「シークレット」タブをクリックします。

  6. [OAuth シークレット]で、 [シークレットの生成]をクリックします。

  7. 表示された シークレットクライアントIDをコピーし、「 完了」をクリックします。

シークレットは作成中に一度だけ明らかにされます。 クライアント ID は、サービスプリンシパルのアプリケーション ID と同じです。

注:

サービスプリンシパルがクラスターまたは SQL ウェアハウスを使用できるようにするには、サービスプリンシパルにそれらへのアクセス権を付与する必要があります。 「コンピュート権限」または「SQL ウェアハウスの管理」を参照してください。

OAuth M2M 認証の構成を完了する

OAuth M2M認証の構成を完了するには、以下に挙げられた関連する環境変数、.databrickscfg フィールド、Terraformフィールド、または Config フィールドを設定する必要があります。

  • アカウント操作の場合は https://accounts.cloud.databricks.com として指定される Databricks ホスト、またはワークスペース操作の場合はターゲット ワークスペース URL (ワークスペース操作の場合は https://dbc-a1b2345c-d6e7.cloud.databricks.com など) として指定されます。

  • Databricksアカウント操作用のDatabricksアカウントID。

  • サービスプリンシパルのクライアントID。

  • サービスプリンシパルのシークレット。

OAuth M2M認証を実行するには、参加しているツールまたはSDKに基づいて、コード内に以下を統合します。

ツールまたは SDK で特定の Databricks 認証の種類の環境変数を使用するには、「 Databricks ツールまたは SDK でサポートされている認証の種類」、またはツールまたは SDK のドキュメントを参照してください。 「クライアント 統合認証の環境変数とフィールド 」および 「クライアント統合認証方法と資格情報の評価のデフォルト順序」も参照してください。

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

  • DATABRICKS_HOST:DatabricksアカウントのコンソールURL( https://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 でサポートされている認証の種類」、またはツールまたは 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 M2M 認証は、次の Databricks Connect バージョンでサポートされています。

  • Python の場合、Databricks Connect for Databricks Runtime 13.1 以降。

  • Scala の場合、Databricks Connect for Databricks Runtime 13.3 LTS 以降。

Databricks Connect では、次のいずれかを実行できます。

.databrickscfg ファイル内の値は、常に環境変数よりも優先されます。

.databrickscfg ファイル内のこれらの環境変数または値を使用して Databricks Connect クライアントを初期化するには、次のいずれかを参照してください。

Visual Studio Code の Databricks 拡張機能の場合は、次の操作を行います。

  1. この記事の「プロファイル」セクションで指定されているように、Databricksワークスペース レベルの操作の値を.databrickscfgファイルに設定します。

  2. Visual Studio Code の Databricks 拡張機能の [ 構成 ] ウィンドウで、 [ Databricks の構成] をクリックします。

  3. コマンド パレット[Databricks Host] に、ワークスペースの URL (例: https://dbc-a1b2345c-d6e7.cloud.databricks.com) を入力し、Enterを押します。

  4. コマンド パレットで、URL の一覧からターゲット プロファイルの名前を選択します。

詳細については、 「VS Code の Databricks 拡張機能の認証設定」を参照してください。

アカウントレベルの操作の場合、デフォルトの認証の場合:

provider "databricks" {
  alias = "accounts"
}

直接構成の場合(retrieve プレースホルダーを独自の実装に置き換えて、コンソールやHashiCorp Vaultなどの他の構成ストアから値を取得します。「Vaultのプロバイダー」も参照してください。)この場合、DatabricksアカウントのコンソールURLは https://accounts.cloud.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://dbc-a1b2345c-d6e7.cloud.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 プレースホルダーを独自の実装に置き換え、コンソールまたはAWS Systems Manager メンバ Storeなどの他の設定ストアから値を取得します。 この場合、Databricks アカウント コンソールの URL はhttps://accounts.cloud.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 プレースホルダーを独自の実装に置き換えて、コンソールまたはAWS Systems Manager メンバ Storeなどの他の設定ストアから値を取得します。 この場合、ホストは Databricks ワークスペース URLです (例: https://dbc-a1b2345c-d6e7.cloud.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();
// ...

直接設定の場合 (コンソールまたはAWS Systems Manager メンバ Storeなどの他の設定ストアから値を取得するには、retrieve プレースホルダーを独自の実装に置き換えます)。 この場合、Databricks アカウント コンソールの URL はhttps://accounts.cloud.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();
// ...

直接設定の場合 (コンソールまたはAWS Systems Manager メンバ Storeなどの他の設定ストアから値を取得するには、retrieve プレースホルダーを独自の実装に置き換えます)。 この場合、ホストは Databricks ワークスペース URLです (例: https://dbc-a1b2345c-d6e7.cloud.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 での認証の詳細については、以下を参照してください。

アカウントレベルの操作の場合、デフォルトの認証の場合:

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...

直接設定の場合 (コンソールまたはAWS Systems Manager メンバ Storeなどの他の設定ストアから値を取得するには、retrieve プレースホルダーを独自の実装に置き換えます)。 この場合、Databricks アカウント コンソールの URL はhttps://accounts.cloud.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())
// ...

直接設定の場合 (コンソールまたはAWS Systems Manager メンバ Storeなどの他の設定ストアから値を取得するには、retrieve プレースホルダーを独自の実装に置き換えます)。 この場合、ホストは Databricks ワークスペース URLです (例: https://dbc-a1b2345c-d6e7.cloud.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アクセストークンのスコープは、トークンを作成するレベルによって異なります。 次のように、アカウント レベルまたはワークスペース レベルのいずれかでトークンを作成できます。

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

アカウント レベルから作成されたOAuthアクセス トークンは、アカウント内、およびサービス プリンシパルがアクセスできる任意のワークスペース内のDatabricks REST APIsに対して使用できます。

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. 右上隅にあるユーザー名の横にある下向き矢印をクリックします。

  3. アカウント IDをコピーします。

  4. 次の URL の<my-account-id>をコピーしたアカウント ID に置き換えて、トークン エンドポイント URL を構築します。

    https://accounts.cloud.databricks.com/oidc/accounts/<my-account-id>/v1/token
    
  5. curl などのクライアントを使用して、トークン エンドポイント URL、サービスプリンシパルのクライアント ID (アプリケーション ID とも呼ばれます)、および作成したサービスプリンシパルのOAuthシークレットを使用してOAuthアクセストークンを要求します。 スコープは、サービスプリンシパルにアクセスが許可されているすべての all-apisOAuthにアクセスするために使用できる アクセストークンを要求します。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 をコピーします。

  6. 「ステップ 3: Databricks REST API を呼び出す」に進んでください。

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

サービスプリンシパルがアカウント管理者であるか、他のワークスペースのメンバーである場合でも、ワークスペース レベルから作成された OAuth アクセスマラソンは、そのワークスペース内の REST APIsにのみアクセスできます。

  1. https://<databricks-instance>を Databricks デプロイのワークスペース URLに置き換えて、トークン エンドポイント URL を構築します。

    https://<databricks-instance>/oidc/v1/token
    
  2. curl などのクライアントを使用して、トークン エンドポイント URL、サービスプリンシパルのクライアント ID (アプリケーション ID とも呼ばれます)、および作成したサービスプリンシパルのOAuthシークレットを使用してOAuthアクセストークンを要求します。 スコープは、トークンを要求しているワークスペース内でサービスプリンシパルにアクセス権が付与されているすべての all-apisOAuthにアクセスするために使用できる アクセストークンを要求します。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.cloud.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'