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. Databrickワークスペースの上部のバーにあるユーザー名をクリックし、[管理者設定]を選択します。

  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.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 クライアントを初期化するには、次のいずれかを参照してください。

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

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

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

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

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

詳細については、「 Visual Studio 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 Cloud 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 Cloud 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 Cloud 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 Cloud 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 での認証の詳細については、以下を参照してください。

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

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

直接構成の場合 (コンソールまたは他の構成ストア ( Google Cloud 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 Cloud 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 を自動的に生成、更新、および使用します。

何らかの理由で、OAuth M2M 認証に Databricks OAuth アクセス ノートを手動で生成、更新、または使用する必要がある場合は、このセクションの手順に従ってください。

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

Databricks サービスプリンシパルとそれに対応する OAuth シークレットをまだ持っていない場合は、この記事の冒頭のステップ 1 ~ 3 に従って作成します。

ステップ 2: アクセス許可を手動で生成する

Databricks サービスプリンシパルのクライアント ID と OAuth シークレットを使用して、アカウント レベルの REST APIsとワークスペース レベルの REST APIs両方に対する認証を行うための OAuth アクセス セキュリティをリクエストできます。 アクセス許可は 1 時間で期限切れになります。 有効期限が切れたら、新しい OAuth アクセスをリクエストする必要があります。 OAuth アクセスの範囲は、トークンを作成するレベルによって異なります。 次のように、アカウント レベルまたはワークスペース レベルでトークンを作成できます。

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

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

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

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

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

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

    https://accounts.gcp.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.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'