次の方法で共有


OAuth(OAuth M2M)を使用してサービスプリンシパルで Azure Databricks へのアクセスを認証する

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

手順 1:サービス プリンシパルの作成

アカウント管理者とワークスペース管理者は、サービス プリンシパルを作成できます。 この手順では、ワークスペースでのサービス プリンシパルの作成について説明します。 アカウント コンソールを使用するには、アカウントの Manage サービス プリンシパルに関するを参照してください。

Microsoft Entra ID マネージド サービス プリンシパルを作成し、Azure Databricks に追加することもできます。 詳細については、「 Databricks と Microsoft Entra ID サービス プリンシパルを参照してください。

  1. ワークスペース管理者として、Azure Databricks ワークスペースにログインします。
  2. Azure Databricks ワークスペースの上部バーでユーザー名を選択し、[設定] を選択します。
  3. [ID およびアクセス管理] タブをクリックします。
  4. [サービス プリンシパル] の横にある [管理] をクリックします。
  5. [サービス プリンシパルの追加] をクリックします。
  6. 検索ボックスのドロップダウン矢印をクリックし、[新規追加] クリック
  7. [ 管理で、 Databricks managed を選択します。
  8. サービス プリンシパルの名前を入力します。
  9. 追加をクリックします。

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

手順 2: サービス プリンシパルにアクセス許可を割り当てる

  1. サービス プリンシパルの名前をクリックして、その詳細ページを開きます。
  2. [構成] タブで、このワークスペースに対してサービス プリンシパルに付与する各エンタイトルメントの横にあるボックスを有効にし、[更新] をクリックします。
  3. [アクセス許可] タブで、このサービス プリンシパルを管理して使用する Azure Databricks ユーザー、サービス プリンシパル、グループにアクセス権を付与します。 「サービス プリンシパルのロールを管理する」を参照してください。

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

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

  1. サービス プリンシパルの詳細ページで、 Secrets タブをクリックします。

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

    ワークスペースから OAuth シークレットを生成する

  3. 表示された SecretClient IDをコピーし、 Done をクリックします。

シークレットは作成時に 1 回表示されるだけです。 クライアント ID は、サービス プリンシパルの アプリケーション ID と同じです。

アカウント管理者は、アカウント コンソールのサービス プリンシパルの詳細ページから OAuth シークレットを生成することもできます。

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

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

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

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

    ワークスペースから OAuth シークレットを生成する

  5. 表示された SecretClient IDをコピーし、 Done をクリックします。

Note

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

手順 4: OAuth M2M 認証を使用する

OAuth M2M 認証を使用するには、関連する次の環境変数、 .databrickscfg フィールド、Terraform フィールド、または Config フィールドを設定する必要があります。

  • Azure Databricks ホスト。アカウント操作の場合は https://accounts.azuredatabricks.net として指定し、ワークスペース操作の場合は、ターゲット ワークスペースごとの URL として指定します (例: https://adb-1234567890123456.7.azuredatabricks.net)。
  • Azure Databricks アカウント ID (Azure Databricks アカウント操作の場合)。
  • サービス プリンシパルのクライアント ID。
  • サービス プリンシパル シークレット。

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

環境

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

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

  • DATABRICKS_HOST (Azure Databricks アカウント コンソールの URL https://accounts.azuredatabricks.net に設定されます)。
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

ワークスペースレベルの操作の場合は、次の環境変数を設定します。

  • DATABRICKS_HOST。対象の Azure Databricks のワークスペースごとの URL に設定されます (例: https://adb-1234567890123456.7.azuredatabricks.net)。
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

プロファイル

.databrickscfg ファイルで次のフィールドを使用して、Azure Databricks 構成プロファイルを作成または識別します 。 プロファイルを作成する場合は、プレースホルダーを適切な値に置き換えます。 ツールまたは SDK でプロファイルを使用するには、「Azure Databricks リソースへのアクセスの認証」またはツールまたは SDK のドキュメントを参照してください。 「クライアント統合認証の環境変数とフィールド」、および「クライアント統合認証のデフォルトの方法」も参照してください。

アカウントレベルの操作の場合、.databrickscfg ファイルで次の値を設定します。 この場合、Azure Databricks アカウント コンソール の URL は https://accounts.azuredatabricks.net です。

[<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 ファイルに次の値を設定します。 この場合、ホストは Azure Databricks のワークスペースごとの URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。

[<some-unique-configuration-profile-name>]
host          = <workspace-url>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

CLI

Databricks CLI の場合は、次のいずれかを行います。

  • この記事の「環境」セクションで指定されているように環境変数を設定します。
  • この記事の「プロファイル」セクションで指定されているように .databrickscfg ファイルの値を設定します。

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

OAuth マシン間 (M2M) 認証」も参照してください。

のインスタンスに接続するときには、

Note

OAuth M2M 認証は、次の Databricks Connect バージョンでサポートされています。

  • Python の場合、Databricks Connect for Databricks Runtime 14.0 以降。
  • Scala の場合、Databricks Connect for Databricks Runtime 13.3 LTS 以降。 Databricks Connect for Databricks Runtime 13.3 LTS 以降に含まれる Databricks SDK for Java は、Databricks SDK for Java 0.17.0 以降にアップグレードする必要があります。

Databricks Connect の場合は、次のいずれかの操作を行うことができます。

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

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

VS Code

Visual Studio Code 用 Databricks 拡張機能の場合は、次を実行します。

  1. この記事の「プロファイル」セクションで指定されているように、Azure Databricks ワークスペースレベルの操作.databrickscfg ファイル内の値を設定します。
  2. Visual Studio Code 用の Databricks 拡張機能の [構成] ペインで、[Databricks の構成] をクリックします。
  3. コマンド パレットDatabricks Host に、ワークスペースごとの URL (例: https://adb-1234567890123456.7.azuredatabricks.net) を入力し、Enter キーを押します。
  4. コマンド パレットで、URL の一覧からターゲット プロファイルの名前を選択します。

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

Terraform

アカウントレベルの操作の場合 (既定の認証の場合):

provider "databricks" {
  alias = "accounts"
}

直接構成の場合 (retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは HashiCorp Vault などの他の構成ストアから値を取得します。Vault Provider もご覧ください)。 この場合、Azure Databricks アカウント コンソール の URL は https://accounts.azuredatabricks.net です。

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 Provider もご覧ください)。 この場合、ホストは Azure Databricks のワークスペースごとの URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。

provider "databricks" {
  alias         = "workspace"
  host          = <retrieve-workspace-url>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

Databricks Terraform プロバイダーを使用した認証の詳細については、「認証」を参照してください。

Python

アカウントレベルの操作では、既定の認証に次を使用します。

from databricks.sdk import AccountClient

a = AccountClient()
# ...

直接構成の場合は、次を使用して、retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは Azure KeyVault のような他の構成ストアから値を取得します。 この場合、Azure Databricks アカウント コンソール の URL は https://accounts.azuredatabricks.net です。

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 プレースホルダーを独自の実装に置き換えて、コンソールまたは Azure KeyVault のような他の構成ストアから値を取得します。 この場合、ホストは Azure Databricks のワークスペースごとの URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。

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

Note

Visual Studio Code 用 Databricks 拡張機能は Python を使いますが、OAuth M2M 認証はまだ実装されていません。

Java

ワークスペースレベルの操作の場合 (既定の認証の場合):

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

直接構成の場合は、retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは Azure KeyVault のような他の構成ストアから値を取得します。 この場合、ホストは Azure Databricks のワークスペースごとの URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。

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

Go

アカウントレベルの操作の場合 (既定の認証の場合):

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

直接構成の場合は、retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは Azure KeyVault のような他の構成ストアから値を取得します。 この場合、Azure Databricks アカウント コンソール の URL は https://accounts.azuredatabricks.net です。

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 プレースホルダーを独自の実装に置き換えて、コンソールまたは Azure KeyVault のような他の構成ストアから値を取得します。 この場合、ホストは Azure Databricks のワークスペースごとの URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:         retrieveWorkspaceUrl(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

Go を使用し、Databricks クライアント統合認証を実装する Databricks ツールおよび SDK を使用した認証の詳細については、「Azure Databricks アカウントまたはワークスペースで Databricks SDK for Go を認証する」を参照してください。

OAuth M2M 認証用のアクセス トークンを手動で生成して使用する

Databricks クライアント統合認証標準を実装する Azure Databricks ツールと SDK は、OAuth M2M 認証に必要な場合に、ユーザーに代わって Azure Databricks OAuth アクセス トークンを自動的に生成、更新、使用します。

Databricks ではクライアント統合認証を使用することをお勧めしますが、Azure Databricks OAuth アクセス トークンを手動で生成、更新、または使用する必要がある場合は、このセクションの手順に従ってください。

サービス プリンシパルのクライアント ID と OAuth シークレットを使用して、アカウント レベルの REST API とワークスペース レベルの REST API の両方に対して認証する OAuth アクセス トークンを要求します。 アクセス トークンは 1 時間以内に期限切れになります。 有効期限後に新しい OAuth アクセス トークンを要求する必要があります。 OAuth アクセス トークンのスコープは、そのトークンの作成元のレベルによって異なります。 トークンは、次のように、アカウント レベルまたはワークスペース レベルのいずれかで作成できます。

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

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

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

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

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

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

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

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

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

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

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

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

Databricks REST API を呼び出す

これで、OAuth アクセス トークンを使用して、Azure Databricks account レベル REST API と workspace レベル REST API に対する認証を行うことができます。 サービス プリンシパルは、アカウント レベルの REST API を呼び出すアカウント管理者である必要があります。

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.azuredatabricks.net/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'

その他のリソース