OAuth(OAuth M2M)を使用してサービスプリンシパルで Azure Databricks へのアクセスを認証する
この記事では、Azure Databricks サービス プリンシパルを作成し、それを使用して OAuth を使用してターゲット エンティティに対して認証する方法について説明します。
手順 1:サービス プリンシパルの作成
アカウント管理者とワークスペース管理者は、サービス プリンシパルを作成できます。 この手順では、ワークスペースでのサービス プリンシパルの作成について説明します。 アカウント コンソールを使用するには、アカウントの Manage サービス プリンシパルに関するを参照してください。
Microsoft Entra ID マネージド サービス プリンシパルを作成し、Azure Databricks に追加することもできます。 詳細については、「 Databricks と Microsoft Entra ID サービス プリンシパルを参照してください。
- ワークスペース管理者として、Azure Databricks ワークスペースにログインします。
- Azure Databricks ワークスペースの上部バーでユーザー名を選択し、[設定] を選択します。
- [ID およびアクセス管理] タブをクリックします。
- [サービス プリンシパル] の横にある [管理] をクリックします。
- [サービス プリンシパルの追加] をクリックします。
- 検索ボックスのドロップダウン矢印をクリックし、[新規追加] クリック。
- [ 管理で、 Databricks managed を選択します。
- サービス プリンシパルの名前を入力します。
- 追加をクリックします。
サービス プリンシパルは、ワークスペースと Azure Databricks アカウントの両方に追加されます。
手順 2: サービス プリンシパルにアクセス許可を割り当てる
- サービス プリンシパルの名前をクリックして、その詳細ページを開きます。
- [構成] タブで、このワークスペースに対してサービス プリンシパルに付与する各エンタイトルメントの横にあるボックスを有効にし、[更新] をクリックします。
- [アクセス許可] タブで、このサービス プリンシパルを管理して使用する Azure Databricks ユーザー、サービス プリンシパル、グループにアクセス権を付与します。 「サービス プリンシパルのロールを管理する」を参照してください。
手順 3: サービス プリンシパルの OAuth シークレットを作成する
OAuth を使用して Azure Databricks への認証を行う前に、まず OAuth アクセス トークンの生成に使用することができる OAuth シークレットを作成する必要があります。 サービス プリンシパルには、最大 5 つの OAuth シークレットを含めることができます。 アカウント管理者とワークスペース管理者は、サービス プリンシパルの OAuth シークレットを作成できます。
サービス プリンシパルの詳細ページで、 Secrets タブをクリックします。
[OAuth シークレット] で、[シークレットの生成] をクリックします。
表示された Secret と Client IDをコピーし、 Done をクリックします。
シークレットは作成時に 1 回表示されるだけです。 クライアント ID は、サービス プリンシパルの アプリケーション ID と同じです。
アカウント管理者は、アカウント コンソールのサービス プリンシパルの詳細ページから OAuth シークレットを生成することもできます。
アカウント管理者として、アカウント コンソールにログインします。
[ユーザー管理] をクリックします。
サービス プリンシパル タブで、サービス プリンシパルを選択します。
[OAuth シークレット] で、[シークレットの生成] をクリックします。
表示された Secret と Client 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 アカウント コンソールの URLhttps://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 の場合は、次のいずれかの操作を行うことができます。
- この記事の「プロファイル」セクションで指定されているように、Azure Databricks ワークスペースレベルの操作の
.databrickscfg
ファイル内の値を設定します。 また、プロファイル内のcluster_id
環境変数をワークスペースごとの URL に設定します (例:https://adb-1234567890123456.7.azuredatabricks.net
)。 - この記事の「環境」セクションで指定されているように、Azure Databricks ワークスペース レベルの操作の環境変数を設定します。 また、
DATABRICKS_CLUSTER_ID
環境変数をワークスペースごとの URL に設定します (例:https://adb-1234567890123456.7.azuredatabricks.net
)。
.databrickscfg
ファイル内の値は、環境変数よりも常に優先されます。
これらの環境変数または .databrickscfg
ファイル内の値を使用して Databricks Connect クライアントを初期化するには、次のいずれかを参照してください。
- Python の場合は、Python の接続プロパティの構成に関する記事を参照してください。
- Scala の場合は、Scala の接続プロパティの構成に関する記事を参照してください。
VS Code
Visual Studio Code 用 Databricks 拡張機能の場合は、次を実行します。
- この記事の「プロファイル」セクションで指定されているように、Azure Databricks ワークスペースレベルの操作の
.databrickscfg
ファイル内の値を設定します。 - Visual Studio Code 用の Databricks 拡張機能の [構成] ペインで、[Databricks の構成] をクリックします。
- コマンド パレットの Databricks Host に、ワークスペースごとの URL (例:
https://adb-1234567890123456.7.azuredatabricks.net
) を入力し、Enter
キーを押します。 - コマンド パレットで、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 での認証の詳細については、以下を参照してください。
- Python 用に Databricks Connect クライアントを設定する
- Azure Databricks アカウントまたはワークスペースで Databricks SDK for Python を認証する
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 での認証の詳細については、以下を参照してください。
- Scala 用に Databricks Connect クライアントを設定する (Scala 用 Databricks Connect クライアントは、同梱の Java 用 Databricks SDK を認証に使用します)
- Azure Databricks アカウントまたはワークスペースで Databricks SDK for Java を認証する
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 アクセス トークンのスコープは、そのトークンの作成元のレベルによって異なります。 トークンは、次のように、アカウント レベルまたはワークスペース レベルのいずれかで作成できます。
- サービス プリンシパルがアクセスできるアカウントとワークスペース内のアカウント レベルおよびワークスペース レベルの REST API を呼び出すには、 アカウント レベルでアクセス トークンを手動で生成します。
- サービス プリンシパルがアクセスできるワークスペースの 1 つ内でのみ REST API を呼び出すには、 ワークスペース レベルでアクセス トークンを手動で生成します そのワークスペースに対してのみ行います。
アカウント レベルのアクセス トークンを手動で生成する
アカウント レベルから作成された OAuth アクセス トークンは、アカウント内の Databricks REST API と、サービス プリンシパルがアクセスできる任意のワークスペースで使用できます。
アカウント管理者として、アカウント コンソールにログインします。
右上隅のユーザー名の横にある下矢印をクリックします。
お使いのアカウント ID をコピーします。
次の URL の
<my-account-id>
をコピーしたアカウント ID に置き換えて、トークン エンドポイントの URL を作成します。https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
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 にのみアクセスできます。
https://<databricks-instance>
を Azure Databricks のデプロイのワークスペース URL に置き換えて、トークン エンドポイント URL を作成します。https://<databricks-instance>/oidc/v1/token
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'
その他のリソース
- サービス プリンシパル
- Databricks ID モデルの概要
- 認証とアクセスの制御に関するその他の情報