このページでは、スクリプトやアプリケーションから行われる自動 CLI コマンドや REST API 呼び出しなど、無人プロセスから Azure Databricks リソースへのアクセスを承認する方法について説明します。
Azure Databricks では、UI の外部でサービス プリンシパルの承認と認証に推奨されるプロトコルとして OAuth 2.0 が使用されます。 統合クライアント認証により、トークンの生成と更新が自動化されます。 サービス プリンシパルがサインインし、同意が付与されると、OAuth は CLI、SDK、またはその代わりに使用する他のツールのアクセス トークンを発行します。 各アクセス トークンは 1 時間有効です。その後、新しいトークンが自動的に要求されます。
このページでは、 承認 とは OAuth を使用して Azure Databricks リソースへのアクセス権をサービス プリンシパルに付与することを指し、 認証 はアクセス トークンを使用した資格情報の検証を指します。
詳細については、「 Azure Databricks リソースへのアクセスを承認する」を参照してください。
サービス プリンシパルを承認する方法
Azure Databricks では、サービス プリンシパルを承認する 2 つの方法がサポートされています。
自動 (推奨): サポートされているツールと SDK (Azure Databricks Terraform SDK など) で 統合認証 を使用します。 この方法では、トークンの生成と更新が自動的に処理され、自動化やその他の無人ワークロードに最適です。
手動: コード検証ツールとチャレンジを生成し、OAuth トークンと交換します。 ツールまたは API が統合認証をサポートしていない場合は、この方法を使用します。 アプリケーション用に独自のトークン更新メカニズムを構築することが必要な場合があります。 詳細については、「 OAuth M2M アクセス トークンを手動で生成する」を参照してください。
[前提条件]
OAuth を構成する前に、次の手順を実行します。
- Azure Databricks サービス プリンシパルを作成します。 「アカウントにサービス プリンシパルを追加する」を参照してください。
- サービス プリンシパルの [構成 ] タブに移動し、このワークスペースに必要な権利を選択します。
- [ アクセス許可 ] タブに移動し、このサービス プリンシパルを管理して使用する Azure Databricks ユーザー、サービス プリンシパル、およびグループへのアクセス権を付与します。 「サービス プリンシパルを管理および使用できるユーザー」を参照してください。
手順 1: OAuth シークレットを作成する
OAuth を使用して Azure Databricks リソースへのアクセスを承認するには、OAuth シークレットを作成する必要があります。 シークレットは、認証用の OAuth アクセス トークンを生成するために使用されます。 サービス プリンシパルには最大 5 つの OAuth シークレットを含めることができます。各シークレットは最大 2 年間有効です。
アカウント管理者とワークスペース管理者は、サービス プリンシパルの OAuth シークレットを作成できます。
- サービス プリンシパルの詳細ページで、[シークレット] タブ を 開きます。
- [OAuth シークレット] で、[シークレットの生成] をクリックします。
- シークレットの有効期間を日数 (最大 730 日) に設定します。
- 表示されたシークレットとクライアント ID をコピーし、[ 完了] をクリックします。 シークレットは 1 回だけ表示されます。 クライアント ID は、サービス プリンシパルのアプリケーション ID と同じです。
アカウント管理者は、アカウント コンソールから OAuth シークレットを作成することもできます。 [ ユーザー管理 ] タブでサービス プリンシパルを選択し、[ 資格情報とシークレット ] タブに移動します。
メモ
サービス プリンシパルでクラスターまたは SQL ウェアハウスを使用できるようにするには、それらへのアクセス権をサービス プリンシパルに付与する必要があります。 「コンピューティングのアクセス許可」または「SQL ウェアハウスを管理する」を参照してください。
手順 2: OAuth 承認を使用する
統合認証ツールで OAuth 承認を使用するには、次の関連する環境変数、 .databrickscfg フィールド、Terraform フィールド、または Config フィールドを設定する必要があります。
- Azure Databricks ホスト。アカウント操作の場合は
https://accounts.azuredatabricks.netとして指定し、ワークスペース操作の場合は、ターゲット ワークスペースごとの URL として指定します (例:https://adb-1234567890123456.7.azuredatabricks.net)。 - Azure Databricks アカウント ID (Azure Databricks アカウント操作の場合)。
- サービス プリンシパルのクライアント ID。
- サービス プリンシパル シークレット。
OAuth サービス プリンシパル認証を実行するには、参加しているツールまたは SDK に基づいて、コード内に以下を統合します。
環境
ツールまたは SDK で特定の Azure Databricks 認証の種類に環境変数を使用するには、 Azure Databricks リソース またはツールまたは SDK のドキュメントへのアクセスの承認に関するページを参照してください。 統合認証と認証方法の優先順位については、「環境変数とフィールド」も参照してください。
アカウントレベルの操作の場合、次の環境変数を設定します。
-
DATABRICKS_HOSTをクリックし、Azure Databricks アカウントのコンソール URL の値に設定https://accounts.azuredatabricks.net。 DATABRICKS_ACCOUNT_IDDATABRICKS_CLIENT_IDDATABRICKS_CLIENT_SECRET
ワークスペースレベルの操作の場合は、次の環境変数を設定します。
-
DATABRICKS_HOSTは、 ワークスペースごとの Azure Databricks URL の値に設定されます (例:https://adb-1234567890123456.7.azuredatabricks.net)。 DATABRICKS_CLIENT_IDDATABRICKS_CLIENT_SECRET
プロファイル
Azure Databricks 構成プロファイルを、次のフィールドを含む.databrickscfgファイルで作成または特定します。 プロファイルを作成する場合は、プレースホルダーを適切な値に置き換えます。 ツールまたは 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>
Azure AD サービス プリンシパルを使用して承認する場合、構成キーは Azure Databricks で管理されるサービス プリンシパルとは異なります。
host = https://<workspace-url>
azure_client_id = <azure-service-principal-client-id>
azure_client_secret = <azure-service-principal-secret>
azure_tenant_id = <azure-tenant-id>
CLI
Databricks CLI の場合は、次のいずれかを行います。
- [ 環境 ] タブで指定した環境変数を設定します。
- [
.databrickscfg] タブで指定した ファイルの値を設定します。
環境変数は、.databrickscfg ファイル内の値よりも常に優先されます。
「OAuth マシン間 (M2M) 認証」も参照してください。
接続する
メモ
OAuth サービス プリンシパル認証は、次の Databricks Connect バージョンでサポートされています。
- Pythonを使用する場合、Databricks Runtime 14.0以降に対応したDatabricks Connectを利用します。
- 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] タブの説明に従って、 ファイルでワークスペース レベルの値を設定します。また、cluster_idをワークスペース インスタンスの URL に設定します。 -
環境変数を使用します。 [ 環境 ] タブに表示されるのと同じ値を設定します。また、
DATABRICKS_CLUSTER_IDをワークスペース インスタンスの URL に設定します。
.databrickscfgの値は環境変数よりも優先されます。
これらの設定で Databricks Connect を初期化するには、「 Databricks Connect のコンピューティング構成」を参照してください。
VS Code
Visual Studio Code 用 Databricks 拡張機能の場合は、次を実行します。
- [
.databrickscfg] タブで指定した Azure Databricks ワークスペース レベルの操作用に、 ファイルの値を設定します。 - 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"
}
直接構成の場合:
provider "databricks" {
alias = "accounts"
host = <retrieve-account-console-url>
account_id = <retrieve-account-id>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは他の構成ストア (HashiCorp Vault など) から値を取得します。
コンテナー プロバイダーも参照してください。 この場合、Azure Databricks アカウントコンソールの URL が https://accounts.azuredatabricks.net。
ワークスペース レベルの操作
既定の構成の場合:
provider "databricks" {
alias = "workspace"
}
直接構成の場合:
provider "databricks" {
alias = "workspace"
host = <retrieve-workspace-url>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは他の構成ストア (HashiCorp Vault など) から値を取得します。
コンテナー プロバイダーも参照してください。 この場合、ホストはワークスペースごとの Azure Databricks URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。
Databricks Terraform プロバイダーを使用した認証の詳細については、「認証」を参照してください。
Python
アカウント レベルの操作
既定の構成の場合:
from databricks.sdk import AccountClient
a = AccountClient()
# ...
直接構成の場合:
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()
)
# ...
retrieveプレースホルダーを独自の実装に置き換えて、コンソールまたは他の構成ストア (Azure KeyVault など) から値を取得します。 この場合、Azure Databricks アカウントコンソールの URL が https://accounts.azuredatabricks.net。
ワークスペース レベルの操作
既定の構成の場合:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# ...
直接構成の場合:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(
host = retrieve_workspace_url(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは他の構成ストア (Azure KeyVault など) から値を取得します。 この場合、ホストはワークスペースごとの Azure Databricks URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。
Python を使用し、統合認証を実装する Databricks ツールと SDK を使用した認証の詳細については、次を参照してください。
- Python 用に Databricks Connect クライアントを設定する
- Azure Databricks アカウントまたはワークスペースで Databricks SDK for Python を認証する
メモ
Visual Studio Code 用の Databricks 拡張機能では Python が使用されますが、OAuth サービス プリンシパル認証はまだ実装されていません。
Java
ワークスペース レベルの操作
既定の構成の場合:
import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...
直接構成の場合:
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);
// ...
retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは他の構成ストア (Azure KeyVault など) から値を取得します。 この場合、ホストはワークスペースごとの Azure Databricks URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。
Java を使用し、統合認証を実装する 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"
// Uses environment configuration automatically
a := databricks.Must(databricks.NewAccountClient())
直接構成の場合:
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
Host: retrieveWorkspaceUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは他の構成ストア (Azure KeyVault など) から値を取得します。 この場合、Azure Databricks アカウントコンソールの URL が https://accounts.azuredatabricks.net。
ワークスペース レベルの操作
既定の構成の場合:
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
w := databricks.Must(databricks.NewWorkspaceClient())
直接構成の場合:
import "github.com/databricks/databricks-sdk-go"
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
Host: retrieveAccountConsoleUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
retrieve プレースホルダーを独自の実装に置き換えて、コンソールまたは他の構成ストア (Azure KeyVault など) から値を取得します。 この場合、ホストはワークスペースごとの Azure Databricks URL です (例: https://adb-1234567890123456.7.azuredatabricks.net)。
Go を使用し、Databricks クライアント統合認証を実装する Databricks ツールおよび SDK を使用した認証の詳細については、「Azure Databricks アカウントまたはワークスペースで Databricks SDK for Go を認証する」を参照してください。
OAuth M2M アクセス トークンを手動で生成する
このセクションは、 Databricks 統合認証をサポートしていないツールまたはサービスを対象としています。 M2M 認証に Azure Databricks OAuth トークンを手動で生成、更新、または使用する必要がある場合は、次の手順に従います。
OAuth M2M アクセス トークンを生成するには、サービス プリンシパルのクライアント ID と OAuth シークレットを使用します。 各アクセス トークンは 1 時間有効です。 有効期限が切れた後、新しいトークンを要求します。 トークンは、アカウント レベルまたはワークスペース レベルで生成できます。
- アカウント レベル: サービス プリンシパルがアクセスできるアカウントとワークスペースのアカウント レベルの REST API とワークスペース レベルの REST API の両方を呼び出すために使用します。 アカウント レベルのアクセス トークンの生成を参照してください。
- ワークスペース レベル: 1 つのワークスペース内で REST API を呼び出すために使用します。 「ワークスペース レベルのアクセス トークンを生成する」を参照してください。
アカウント レベルのアクセス トークンを生成する
アカウント レベルのトークンを使用して、アカウントの REST API と、サービス プリンシパルがアクセスできるワークスペースを呼び出します。
次の URL の
<account-id>をアカウント ID に置き換えて、トークン エンドポイントの URL を構築します。https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/tokencurlを使用して OAuth アクセス トークンを要求します。 Replace:-
<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 }all-apisスコープは OAuth アクセス トークンを要求します。これにより、サービス プリンシパルは、アクセス許可を持つ Databricks REST API を呼び出すことができます。-
応答から
access_token値をコピーします。
ワークスペース レベルのアクセス トークンを生成する
ワークスペース レベルのトークンは、そのワークスペース内の REST API でのみ使用します。
<databricks-instance>を<databricks-instance>に Azure Databricks ワークスペース インスタンス名に置き換えて、トークン エンドポイントの URL を構築します (例:adb-1234567890123456.7.azuredatabricks.net)。https://<databricks-instance>/oidc/v1/tokencurlを使用して OAuth アクセス トークンを要求します。 Replace:-
<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値をコピーします。
メモ
サービス エンドポイントのトークンを生成するには、エンドポイント ID とアクションを要求に含めます。 OAuth トークンを手動でフェッチするを参照してください。
Azure Databricks REST API を呼び出す
OAuth アクセス トークンを使用して 、アカウント レベル または ワークスペース レベルの REST API を呼び出します。 アカウント レベルの API を呼び出すには、サービス プリンシパルがアカウント管理者である必要があります。
Bearer認証を使用して、承認ヘッダーにトークンを含めます。
アカウント レベルの REST API 要求の例
この例では、アカウントのすべてのワークスペースを一覧表示します。 Replace:
-
<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 要求の例
この例では、ワークスペース内で使用可能なすべてのクラスターを一覧表示します。 Replace:
-
<oauth-access-token>サービス プリンシパルの OAuth アクセス トークンを使用します。 -
<databricks-instance>を Azure Databricks ワークスペース インスタンス名で指定します (例:adb-1234567890123456.7.azuredatabricks.net)。
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'
OAuth M2M 認証のトラブルシューティング
サービス プリンシパルの Databricks OAuth M2M 認証に関する最も一般的な問題を解決するには、次の手順を使用します。
クイック チェック
まず、OAuth M2M 認証エラーの原因となる一般的な構成の問題を確認します。
-
Credentials:
DATABRICKS_CLIENT_IDはサービス プリンシパルのアプリケーション ID (クライアント ID) に設定され、DATABRICKS_CLIENT_SECRETは OAuth シークレット値に設定され、両方ともスペースが追加されません。 -
Host:
DATABRICKS_HOSTは、アカウント操作またはhttps://accounts.azuredatabricks.net(ワークスペース操作のなど) のhttps://adb-1234567890123456.7.azuredatabricks.netをポイントします。/apiは含めないでください。 - 割り当て: サービス プリンシパルがターゲット ワークスペースに割り当てられます。
- 権限: サービス プリンシパルには、ターゲット リソースに必要なアクセス許可があります。
-
競合:
DATABRICKS_TOKEN、DATABRICKS_USERNAMEなど、競合する変数セットはありません。env | grep DATABRICKSを実行し、競合の設定を解除します。 - ツール:統合認証と、現在の CLI または SDK バージョンを使用します。
401 認証されていない
考えられる原因と修正:
-
クライアント ID またはシークレットが正しくありません。
DATABRICKS_CLIENT_IDとDATABRICKS_CLIENT_SECRETを再コピーします。 不明な場合は、シークレットを再生成します。 - 期限切れのシークレット: 現在のシークレットの有効期限が切れている場合は、新しいシークレットを作成します。
- 間違ったトークン発行者: M2M の場合は、IdP またはクラウド トークン エンドポイントではなく、Databricks OAuth トークン エンドポイントを使用します。
-
ホストの不一致: ワークスペース API に対して認証する場合、
DATABRICKS_HOSTは呼び出すワークスペース URL である必要があります。
403 アクセス拒否
考えられる原因と修正:
-
リソースのアクセス許可がありません: サービス プリンシパルにクラスターまたはSQLウェアハウスへの
CAN USEまたはCAN MANAGEを付与し、ノートブック、ジョブ、またはデータオブジェクトに必要なオブジェクトレベルのアクセス許可を設定します。 - ワークスペースの割り当てなし: アカウント コンソールのワークスペースにサービス プリンシパルを割り当てます。
- 管理者 API アクセス: 管理者専用 API の場合は、ワークスペース管理者グループにサービス プリンシパルを割り当てるか、アカウント管理者のアクセス許可を付与します。
設定問題
症状には、タイムアウト、"ホストが見つかりません"、"アカウントが見つかりません"、"ワークスペースが見つかりません" などがあります。
Fixes:
-
ホスト規則: アカウント API のアカウント コンソール URL を使用します。 ワークスペース API のワークスペース URL を使用します。
/apiサフィックスは含めないでください。 -
アカウント ID: アカウント レベルの操作にのみ
DATABRICKS_ACCOUNT_IDを指定します。 アカウント コンソールから UUID を使用します。 -
プロファイルの選択: 複数のプロファイルを使用する場合は、
--profile <name>渡すか、DATABRICKS_CONFIG_PROFILEを設定します。
Connectivity
ネットワークの問題が原因で OAuth M2M 認証が失敗した場合は、次のテストを使用して、環境が Databricks エンドポイントに到達できることを確認します。
-
DNS:
nslookup <your-host>(ホスト名の IP アドレスを返す必要があります) -
TLS と到達可能性:
curl -I https://<your-host>(HTTP 状態 200、401、または 403 を返す必要があります) - 企業ネットワーク: プロキシまたはファイアウォール規則で Databricks エンドポイントへの HTTPS が許可されていることを確認する
その他のリソース
- サービス プリンシパル
- Databricks ID モデルの概要
- 認証とアクセスの制御に関するその他の情報