OAuthマシン間(M2M)認証

OAuth マシン間 (M2M) 認証では、自動化されたエンティティ (この場合は Databricks サービスプリンシパル) の資格情報を使用してターゲットエンティティを認証します。Databricks が OAuth M2M 認証リクエストを通じて対象のサービスプリンシパルの認証に成功すると、参加するツールや SDK に OAuth トークンが付与され、その時点からサービスプリンシパルに代わってトークンベースの認証が実行されます。OAuth トークンの有効期間は 1 時間で、その後、関連するツールまたは SDK が自動的にバックグラウンドで、同様に 1 時間有効な新しいトークンの取得を試みます。

OAuth M2M 認証の構成を開始するには、次の手順を実行します。

注:

サービスプリンシパルの 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 と同じです。

注:

サービスプリンシパルがクラスターまたは 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 パラメーター ストアなど) から値を取得します。 この場合、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 ストアなど) から値を取得します。 この場合、ホストは 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();
// ...

直接構成の場合(retrieve プレースホルダーを独自の実装に置き換えて、コンソールや AWS Systems Managerパラメーターストアなどの他の構成ストアから値を取得します)。この場合、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();
// ...

直接設定の場合 ( retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは他の設定ストア ( AWS Systems Manager パラメーターストアなど) から値を取得します)。 この場合、ホストは 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())
// ...

直接構成の場合(retrieve プレースホルダーを独自の実装に置き換えて、コンソールや AWS Systems Managerパラメーターストアなどの他の構成ストアから値を取得します)。この場合、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())
// ...

直接設定の場合 ( retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは他の設定ストア ( AWS Systems Manager パラメーターストアなど) から値を取得します)。 この場合、ホストは 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 を自動的に生成、更新、および使用します。

何らかの理由で、OAuth M2M 認証に Databricks 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-apis スコープは、サービスプリンシパルにアクセスが許可されているすべての Databricks REST APIsへのアクセスに使用できる OAuth アクセス人権を要求します。

    • <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 をコピーします。

    アクセス許可は 1 時間で期限切れになります。 有効期限が切れた後は、新しい OAuth アクセス許可を手動で生成する必要があります。

  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-apis スコープは、トークンの要求元のワークスペース内でサービスプリンシパルにアクセスが許可されているすべての Databricks REST APIsへのアクセスに使用できる OAuth アクセスアセトンを要求します。

    • <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 をコピーします。

    アクセス許可は 1 時間で期限切れになります。 有効期限が切れた後は、新しい OAuth アクセス許可を手動で生成する必要があります。

ステップ 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'