サービス プリンシパルの Microsoft Entra ID (旧称 Azure AD) トークンを取得します
重要
このセクションでは、サービス プリンシパルの Microsoft Entra ID (旧称 Azure Active Directory) トークンを手動で取得する方法について説明します。
Databricks では、Microsoft Entra ID サービス プリンシパル用の Microsoft Entra ID トークンを手動で作成することはお勧めしません。 これは、各 Microsoft Entra ID トークンは有効期間が短く、通常は 1 時間以内に期限切れになるためです。 この時間が経過したら、代わりの Microsoft Entra ID トークンを手動で生成する必要があります。 代わりに、Databricks クライアント統合認証標準を実装している関係ツールまたは SDK のいずれかを使用してください。 これらのツールと SDK は、次の Databricks 認証の種類を利用して、期限切れの Microsoft Entra ID トークンを自動的に生成して置き換えます。
サービス プリンシパルがない場合、次のいずれかの手順に従ってプロビジョニングできます。
この記事では、Microsoft Entra ID (旧称 Azure Active Directory) で定義されているサービス プリンシパルが、いかにして Azure Databricks で認証ポリシーと承認ポリシーを適用できるプリンシパルとしても機能できるかについて説明します。 Azure Databricks ワークスペースのサービス プリンシパルは、通常のユーザー (ユーザー プリンシパル) とは異なるきめ細かなアクセス制御を持つことができます。
サービス プリンシパルはクライアント ロールの働きをし、OAuth 2.0 クライアント資格情報フローを使用して Azure Databricks リソースへのアクセスを承認します。
サービス プリンシパルは Databricks で管理することも、Azure portal から次の手順で管理することもできます。
また、Microsoft Authentication Library (MSAL) を使用して、サービス プリンシパルの代わりに、プログラムによってユーザーの Microsoft Entra ID アクセス トークンを取得することもできます。 「MSAL を使用してユーザーの Microsoft Entra ID (旧称 Azure Active Directory) トークンを取得する」を参照してください。
Azure portal でサービス プリンシパルをプロビジョニングする
Azure portal にサインインします。
Note
使用するポータルは、Microsoft Entra ID (旧称 Azure Active Directory)> アプリケーションが Azure パブリック クラウド、各国のクラウドまたはソブリン クラウドのいずれで実行されるかによって異なります。 詳細については、各国のクラウドに関する記事をご覧ください。
複数のテナント、サブスクリプション、またはディレクトリにアクセスできる場合は、上部のメニューの [ディレクトリ + サブスクリプション] (フィルター付きのディレクトリ) アイコンをクリックして、サービス プリンシパルをプロビジョニングするディレクトリに切り替えます。
Microsoft Entra ID を検索して選択します。
[+ 追加] をクリックし、[アプリの登録] を選びます。
[名前] にアプリケーションの名前を入力します。
[サポートされているアカウントの種類] セクションで、[この組織ディレクトリのみに含まれるアカウント (シングル テナント)] を選択します。
[登録] をクリックします。
[管理] で、[証明書とシークレット] をクリックします。
[クライアント シークレット] タブで、[新しいクライアント シークレット] をクリックします。
[クライアントシークレットの追加] ウィンドウの [説明] に、クライアント シークレットの説明を入力します。
[有効期限] で、クライアント シークレットの有効期限の期間を選択して、[追加] をクリックします。
クライアント シークレットの 値 をコピーし、安全な場所に保存します。このクライアント シークレットはアプリケーションのパスワードです。
アプリケーション ページの [概要] ページの [要点] セクションで、次の値をコピーします。
- アプリケーション (クライアント) ID
- ディレクトリ (テナント) ID
Azure CLI でサービス プリンシパルをプロビジョニングする
「Azure CLI で Azure サービス プリンシパルを作成する」を参照してください。
Microsoft ID プラットフォーム REST API を使用して Microsoft Entra ID アクセス トークンを取得する
重要
このセクションでは、Microsoft ID プラットフォーム REST API を使用し、サービス プリンシパルの Microsoft Entra ID トークンを手動で取得する方法について説明します。
Databricks では、Microsoft Entra ID サービス プリンシパル用の Microsoft Entra ID トークンを手動で作成することはお勧めしません。 これは、各 Microsoft Entra ID トークンは有効期間が短く、通常は 1 時間以内に期限切れになるためです。 この時間が経過したら、代わりの Microsoft Entra ID トークンを手動で生成する必要があります。 代わりに、Databricks クライアント統合認証標準を実装している関係ツールまたは SDK のいずれかを使用してください。 これらのツールと SDK は、次の Databricks 認証の種類を利用して、期限切れの Microsoft Entra ID トークンを自動的に生成して置き換えます。
Databricks REST API にサービス プリンシパルでアクセスするには、Microsoft Entra ID アクセス トークンを取得してサービス プリンシパルに対して 使用します。 詳細については、「最初のケース: 共有シークレットを使ったアクセス トークン要求」を参照してください。
ヒント
Microsoft Entra ID アクセス トークンは、Azure CLI を使用しても取得できます。 「Azure CLI を使用して Microsoft Entra ID アクセス トークンを取得する」を参照してください。
次の情報を集めます。
パラメーター 説明 Tenant ID
Microsoft Entra ID に登録された関連するアプリケーションの Directory (tenant) ID
。Client ID
Microsoft Entra ID に登録された関連するアプリケーションの Application (client) ID
。Client secret
Microsoft Entra ID に登録された関連するアプリケーションのクライアント シークレットの Value
。前の情報を curl と共に使用して、Microsoft Entra ID アクセス トークンを取得します。
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token \ -d 'client_id=<client-id>' \ -d 'grant_type=client_credentials' \ -d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \ -d 'client_secret=<client-secret>'
置換前のコード:
<tenant-id>
を登録済みのアプリケーションのテナント ID で。<client-id>
を登録済みのアプリケーションのクライアント ID で。<client-secret>
を登録済みのアプリケーションのクライアント シークレットの値で。
scope
パラメーターの値は変更しないでください。 これは、Azure Databricks (2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
) のプログラム ID を、既定のスコープ (/.default
、%2f.default
として URL エンコード) と共に表します。次に例を示します。
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ https://login.microsoftonline.com/a1bc2d34-5e67-8f89-01ab-c2345d6c78de/oauth2/v2.0/token \ -d 'client_id=12a34b56-789c-0d12-e3fa-b456789c0123' \ -d 'grant_type=client_credentials' \ -d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \ -d 'client_secret=abc1D~Ef...2ghIJKlM3'
Microsoft Entra ID アクセス トークンは、呼び出しの出力内の
access_token
値の中にあります。
Azure CLI を使用して Microsoft Entra ID アクセス トークンを取得する
重要
このセクションでは、Azure CLI を使用し、サービス プリンシパルの Microsoft Entra ID トークンを手動で取得する方法について説明します。
Databricks では、Microsoft Entra ID サービス プリンシパル用の Microsoft Entra ID トークンを手動で作成することはお勧めしません。 これは、各 Microsoft Entra ID トークンは有効期間が短く、通常は 1 時間以内に期限切れになるためです。 この時間が経過したら、代わりの Microsoft Entra ID トークンを手動で生成する必要があります。 代わりに、Databricks クライアント統合認証標準を実装している関係ツールまたは SDK のいずれかを使用してください。 これらのツールと SDK は、次の Databricks 認証の種類を利用して、期限切れの Microsoft Entra ID トークンを自動的に生成して置き換えます。
Databricks REST API にサービス プリンシパルでアクセスするには、Microsoft Entra ID アクセス トークンを取得してサービス プリンシパルに対して 使用します。
次の情報を集めます。
パラメーター 説明 Tenant ID
Microsoft Entra ID に登録された関連するアプリケーションの Directory (tenant) ID
。Client ID
Microsoft Entra ID に登録された関連するアプリケーションの Application (client) ID
。Client secret
Microsoft Entra ID に登録された関連するアプリケーションのクライアント シークレットの Value
。Azure CLI を使用して Azure にサインインし、az login コマンドを実行します。
--service-principal
オプションを使用し、Microsoft Entra ID に登録されている関連アプリケーションのTenant ID
(Directory (tenant) ID
)、Client ID
(Application (client) ID
)、Client secret
(Value
) のパラメータの値を指定します。--output
オプションを使用すると、コマンドの出力をさまざまな形式で表示できます。この例では可読性を高めるために JSON ではなく表形式を使用しています。az login \ --service-principal \ --tenant <Tenant-ID> \ --username <Client-ID> \ --password <Client-secret> \ --output table
Microsoft Entra ID アクセス トークンは、サインインしている Microsoft Entra ID サービス プリンシパル用に作成することになるので、その対象となる正しいサブスクリプションにサインインしていることを確認します。 そのためには、
az login
コマンドの出力から、IsDefault
がTrue
に設定されているテーブル行を探します。 サブスクリプションのName
が現在のサブスクリプションを表します。正しいサブスクリプションがわからない場合は、「Azure portal でサブスクリプションとテナントの ID を取得する」を参照してください。 あるいは、この手順の後半で
az databricks workspace list
コマンドを実行してみてください。別のサブスクリプションに切り替える必要がある場合は、
--name
または--subscription
オプションを使用して正しいサブスクリプション名または ID を指定して、az account set コマンドを実行します。az account set --name "<subscription-name>" # Or ... az account set --subscription <subscription-id>
Azure Databricks ワークスペースのサブスクリプション ID を取得するには、ワークスペースのナビゲーション バーでユーザー名 >Azure portal の順にクリックします。 Azure Databricks ワークスペース リソース ページが表示されたら、サイドバーの [概要] をクリックします。 次に、サブスクリプション ID が含まれる [サブスクリプション ID] フィールドを探します。
Azure portal にアクセスできない場合は、az databricks workspace list コマンドを実行し、
--query
オプションと--output
オプションを使って結果を絞り込むと、Azure Databricks ワークスペースのサブスクリプション ID を取得できます。adb-0000000000000000.0.azuredatabricks.net
をご自分のワークスペース インスタンスの名前に置き換えます。https://
は含めません。 この例では、出力の/subscriptions/
の後の00000000-0000-0000-0000-000000000000
がサブスクリプション ID です。az databricks workspace list --query "[?workspaceUrl==\`adb-0000000000000000.0.azuredatabricks.net\`].{id:id}" --output tsv # /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-rg/providers/Microsoft.Databricks/workspaces/my-ws
"
The subscription of '<subscription-id>' doesn't exist in cloud 'AzureCloud'.
" というメッセージが表示された場合、間違ったテナントにサインインしています。正しいテナントにサインインするためには、az login
コマンドをもう一度実行する必要があります。--tenant
オプションを使用して正しいテナント ID を指定してください。Azure Databricks ワークスペースのテナント ID は、
curl -v <per-workspace-URL>/aad/auth
コマンドを実行して、出力< location: https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000
を確認するとわかります。00000000-0000-0000-0000-000000000000
がテナント ID です。 「Azure portal でサブスクリプションとテナントの ID を取得する」も参照してください。az login --tenant <tenant-id> --output table
az account get-access-token コマンドを実行して、サインインしている Microsoft Entra ID サービス プリンシパルの Microsoft Entra ID アクセス トークンを生成します。
--resource
オプションを使用して、Azure Databricks サービスの一意のリソース ID (2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
) を指定します。 コマンドの出力に Microsoft Entra ID トークンの値だけを表示するには、--query
と--output
オプションを使用します。az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ --output tsv
サービス プリンシパルの Microsoft Entra ID アクセス トークンを使用して、Databricks REST API にアクセスする
重要
このセクションでは、curl
とサービス プリンシパルの Microsoft Entra ID アクセス トークンを使用して Databricks REST API にアクセスする方法について説明します。
curl
の代わりに、Databricks クライアント統合認証標準を実装している関係ツールまたは SDK のいずれかを使用できます。 これらのツールと SDK は、次の Databricks 認証の種類を利用して、期限切れの Microsoft Entra ID トークンを自動的に生成して置き換えます。
Databricks ユーザーであるサービス プリンシパルは、Microsoft Entra ID トークンを使用して Databricks REST API に対して認証できます。
サービス プリンシパルは、Azure でターゲット ワークスペース リソースに対する共同作成者ロールまたは所有者ロールを持っている場合、ワークスペース管理者としてワークスペースに自身を追加することもできます。 サービス プリンシパルが、ターゲット ワークスペースの共同作成者または所有者であり、Microsoft Entra ID トークンを使用してワークスペースに追加したい場合は、Azure Databricks ユーザーではないサービス プリンシパルのワークスペース レベルの API アクセスに移動します。
それ以外の場合は、「Azure Databricks ワークスペースのユーザーと管理者であるサービス プリンシパルの API アクセス」に進んでください。
Azure Databricks のユーザーと管理者であるサービス プリンシパルの API アクセス
この手順を完了するには、最初にサービス プリンシパルを Azure Databricks アカウントまたはワークスペースに追加する必要があります。 SCIM (アカウント) API を使用すると、ワークスペースへのアクセスを許可することなく、サービス プリンシパルをアカウントに直接追加できます。
サービス プリンシパル API エンドポイントを使用して、ワークスペースにサービス プリンシパルを追加できます。 これにより、サービス プリンシパルも Azure Databricks アカウントに追加されます。 次に例を示します。
Databricks CLI バージョン 0.205 以降を使用する (推奨):
サービス プリンシパルを追加する:
databricks service-principals create --application-id 12a34b56-789c-0d12-e3fa-b456789c0123 --display-name "My Service Principal" -p <profile-name-that-references-calling-users-access-token>
サービス プリンシパルのワークスペース エンタイトルメントを更新する:
databricks service-principals patch 1234567890123456 --json @update-service-principal.json -p <profile-name-that-references-access-token>
update-service-principal.json
:
{
"Operations": [
{
"op": "add",
"path": "entitlements",
"value": {
"value": "workspace-acccess",
"value": "allow-cluster-create",
"value": "databricks-sql-access"
}
}
],
"schema": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
]
}
Databricks CLI の認証に関する記事を参照してください。
curl
を使用する:
curl -X POST \
-H 'Authorization: Bearer <access-token>' \
https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/preview/scim/v2/ServicePrincipals \
-H 'Content-type: application/scim+json' \
-d @create-service-principal.json
create-service-principal.json
:
{
"displayName": "My Service Principal",
"applicationId": "12a34b56-789c-0d12-e3fa-b456789c0123",
"entitlements": [
{
"value": "allow-cluster-create"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
],
"active": true
}
次のいずれかに該当する場合は、「Azure Databricks ユーザーではないサービス プリンシパルのワークスペースレベルの API アクセス」に進んでください。
- 呼び出したい Azure Databricks REST API にはワークスペースの管理者アクセス権が必要であり、サービス プリンシパルは、ワークスペースのメンバーになっている。しかし、現在、ワークスペースへの管理者アクセス権がない。
- サービス プリンシパルがターゲットの Azure Databricks ワークスペースにまだ追加されていない。
次の情報を集めます。
パラメーター 説明 Microsoft Entra ID アクセス トークン 「Microsoft ID プラットフォーム REST API を使用して Microsoft Entra ID アクセス トークンを取得する」または「Azure CLI を使用して Microsoft Entra ID アクセス トークンを取得する」の要求から返された Microsoft Entra ID アクセス トークン。 Microsoft Entra ID アクセス トークンを
curl
と共に使用して、Databricks REST API を呼び出します。 次に例を示します。Databricks CLI バージョン 0.205 以降を使用する (推奨):
databricks clusters list -p <profile-name-that-references-azure-ad-access-token>
Databricks CLI の認証に関する記事を参照してください。
curl
を使用する:curl -X GET \ -H 'Authorization: Bearer <access-token>' \ https://<databricks-instance>/api/2.0/clusters/list
置換前のコード:
<access-token>
と Microsoft Entra ID アクセス トークン。<databricks-instance>
を Azure Databricks デプロイのワークスペース単位の URL で。GET
と/api/2.0/clusters/list
を、適切な HTTP 操作と、ターゲットの Databricks REST API のエンドポイントで。
次に例を示します。
curl -X GET \ -H 'Authorization: Bearer <access-token>' \ https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/clusters/list
Azure Databricks ユーザーではないサービス プリンシパルのワークスペースレベルの API アクセス
次のいずれかに該当する場合は、この手順に従います。
- 呼び出したい Azure Databricks REST API にはワークスペースの管理者アクセス権が必要であり、サービス プリンシパルは、ワークスペースのメンバーになっている。しかし、現在、ワークスペースへの管理者アクセス権がない。
- サービス プリンシパルがターゲットの Azure Databricks ワークスペースにまだ追加されていない。
要件:
- サービス プリンシパルには、Azure のターゲット ワークスペース リソースに対する共同作成者ロールまたは所有者ロールが必要です。
次の情報を集めます。
パラメーター 説明 テナント ID 「Azure portal でサービス プリンシパルをプロビジョニングする」で Microsoft Entra ID に登録済みの関連アプリケーションのディレクトリ (テナント) ID。 Client ID Microsoft Entra ID に登録された関連するアプリケーションのアプリケーション (クライアント) ID。 クライアント シークレット 「Azure portal でサービス プリンシパルをプロビジョニングする」で作成した、Microsoft Entra ID に登録済みの関連アプリケーションのクライアント シークレットの値。 Microsoft Entra ID アクセス トークン 「Microsoft ID プラットフォーム REST API を使用して Microsoft Entra ID アクセス トークンを取得する」または「Azure CLI を使用して Microsoft Entra ID アクセス トークンを取得する」の要求から返された Microsoft Entra ID アクセス トークン。 サブスクリプション ID ターゲットの Azure Databricks ワークスペースに関連付けられている Azure サブスクリプションの ID (名前ではない)。 この情報と次の情報については、「リソースを開く」を参照してください。 ターゲット リソースを開くために、Azure Databricks サービスの種類と、ターゲット Azure Databricks ワークスペースについて把握している Azure 内のその他の情報を検索できます。 リソース グループ名 ターゲットの Azure Databricks ワークスペースに関連付けられている Azure リソース グループの名前。 ワークスペース名 ターゲットの Azure Databricks ワークスペースの Azure における名前。 上記の情報の一部を
curl
と共に使用して、Microsoft Entra ID 管理エンドポイント アクセス トークンを取得します。curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ https://login.microsoftonline.com/<tenant-id>/oauth2/token \ -d 'client_id=<client-id>' \ -d 'grant_type=client_credentials' \ -d 'resource=https%3A%2F%2Fmanagement.core.windows.net%2F' \ -d 'client_secret=<client-secret>'
置換前のコード:
<tenant-id>
を登録済みのアプリケーションのテナント ID で。<client-id>
を登録済みのアプリケーションのクライアント ID で。<client-secret>
を登録済みのアプリケーションのクライアント シークレットの値で。
resource
パラメーターの値は変更しないでください。 これは、Microsoft Entra ID 管理エンドポイント (https://management.core.windows.net/
、URL でエンコードされたhttps%3A%2F%2Fmanagement.core.windows.net%2F
) を表します。次に例を示します。
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ https://login.microsoftonline.com/a1bc2d34-5e67-8f89-01ab-c2345d6c78de/oauth2/token \ -d 'client_id=12a34b56-789c-0d12-e3fa-b456789c0123' \ -d 'grant_type=client_credentials' \ -d 'resource=https%3A%2F%2Fmanagement.core.windows.net%2F' \ -d 'client_secret=abc1D~Ef...2ghIJKlM3'
Microsoft Entra ID 管理エンドポイント アクセス トークンは、呼び出しの出力内の
access_token
値の中にあります。Microsoft Entra ID 管理エンドポイント アクセス トークンを他の上記情報と
curl
と共に使用して、Databricks REST API を呼び出します。次に例を示します。curl -X GET \ -H 'Authorization: Bearer <access-token>' \ -H 'X-Databricks-Azure-SP-Management-Token: <management-access-token>' \ -H 'X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/workspaces/<workspace-name>' \ https://<databricks-instance>/api/2.0/clusters/list
置換前のコード:
<access-token>
と Microsoft Entra ID アクセス トークン。<management-access-token>
を Microsoft Entra ID 管理エンドポイント アクセス トークンで。<subscription-id>
をターゲットの Azure Databricks ワークスペースに関連付けられているサブスクリプションの ID で。<resource-group-name>
をターゲットの Azure Databricks ワークスペースに関連付けられているリソース グループの名前で。<workspace-name>
をターゲットの Azure Databricks ワークスペースの名前で。<databricks-instance>
を Azure Databricks デプロイのワークスペース単位の URL で。GET
と/api/2.0/clusters/list
を、適切な HTTP 操作と、ターゲットの Databricks REST API のエンドポイントで。
次に例を示します。
curl -X GET \ -H 'Authorization:Bearer <access-token>' \ -H 'X-Databricks-Azure-SP-Management-Token: abC1dE...ghIj23kl' \ -H 'X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/12a345...bcd6789e/resourceGroups/my-resource-group/providers/Microsoft.Databricks/workspaces/my-workspace' \ https://adb-1234567890123456.7.azuredatabricks.net/api/2.0/clusters/list
ワークスペースに対して認証されると、サービス プリンシパルは Azure Databricks ワークスペース管理者になり、ワークスペースにアクセスするために共同作成者ロールまたは所有者ロールは不要になります。