次の方法で共有


サービス プリンシパルの Microsoft Entra ID トークンを取得する

重要

このセクションでは、サービス プリンシパルの Microsoft Entra ID トークンを手動で取得する方法について説明します。

Azure Databricks マネージド サービス プリンシパルは、Azure Databricks 内で直接管理されます。 Microsoft Entra ID マネージド サービス プリンシパルは、追加のアクセス許可が必要とされる Microsoft Entra ID 内で管理されます。 Databricks では、ほとんどのユース ケースで Azure Databricks マネージド サービス プリンシパルを使用することを推奨しています。 ただし、Databricks では、Azure Databricks とその他の Azure リソースで同時に認証する必要がある場合には、Microsoft Entra ID マネージド サービス プリンシパルを使用することを推奨しています。

Microsoft Entra ID マネージド サービス プリンシパルの代わりに Azure Databricks マネージド サービス プリンシパルを作成するには、「 サービス プリンシパル」を参照してください。

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 Databricks で認証ポリシーと承認ポリシーを適用できるプリンシパルとしても機能できるかについて説明します。 Azure Databricks ワークスペースのサービス プリンシパルは、通常のユーザー (ユーザー プリンシパル) とは異なるきめ細かなアクセス制御を持つことができます。

サービス プリンシパルクライアント ロールとして機能し、OAuth 2.0 クライアント資格情報フローを使用して Azure Databricks リソースへのアクセスを承認します。

サービス プリンシパルは Databricks で管理することも、Azure portal から次の手順で管理することもできます。

また、Microsoft Authentication Library (MSAL) を使用して、サービス プリンシパルの代わりに、プログラムによってユーザーの Microsoft Entra ID アクセス トークンを取得することもできます。 MSAL を使用してユーザーの Microsoft Entra ID トークンを取得するを参照してください。

Azure portal でサービス プリンシパルをプロビジョニングする

  1. Azure portal にサインインします。

    使用するポータルは、Microsoft Entra ID アプリケーションが Azure パブリック クラウド、各国のクラウドまたはソブリン クラウドのいずれで実行されるかによって異なります。 詳細については、「 各国のクラウド」を参照してください。

  2. 複数のテナント、サブスクリプション、またはディレクトリにアクセスできる場合は、上部のメニューの [ディレクトリ + サブスクリプション] (フィルター付きのディレクトリ) アイコンをクリックして、サービス プリンシパルをプロビジョニングするディレクトリに切り替えます。

  3. [ リソース、サービス、ドキュメントの検索] で、 Microsoft Entra ID を検索して選択します。

  4. [ + 追加] をクリックし、[ アプリの登録] を選択します。

  5. [名前] にアプリケーションの名前を入力します。

  6. [サポートされているアカウントの種類] セクションで、[この組織ディレクトリのみに含まれるアカウント (シングル テナント)] を選択します。

  7. [登録] をクリックします。

  8. アプリケーション ページの [概要 ] ページの [ 要点 ] セクションで、次の値をコピーします。

    • アプリケーション (クライアント) ID
    • ディレクトリ (テナント) ID
  9. クライアント シークレットを生成するには、[ 管理] で [ 証明書とシークレット] をクリックします。

    このクライアント シークレットを使って、Azure Databricks で Microsoft Entra ID サービス プリンシパルを認証するための Microsoft Entra ID トークンを生成します。 Azure Databricks ツールまたは SDK で Microsoft Entra ID トークンを使用できるかどうかを判断するには、ツールまたは SDK のドキュメントを参照してください。

  10. [クライアント シークレット] タブで、[新しいクライアント シークレット] をクリックします。

    新しいクライアント シークレット

  11. [クライアントシークレットの追加] ウィンドウの [説明] に、クライアント シークレットの説明を入力します。

  12. [有効期限] で、クライアント シークレットの有効期限の期間を選択して、[追加] をクリックします。

  13. このクライアント シークレットはアプリケーションのパスワードであるため、クライアント シークレットの をコピーして安全な場所に格納します。

Azure CLI でサービス プリンシパルをプロビジョニングする

Azure CLI を使用した Microsoft Entra ID (旧称 Azure Active Directory) サービス プリンシパルの作成に関するページを参照してください。

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 アクセス トークンを取得してサービス プリンシパルに対して 使用します。 詳細については、「最初の ケース: 共有シークレットを使用したアクセス トークン要求」を参照してください。

ヒント

Azure CLI を使用して Microsoft Entra ID アクセス トークンを取得することもできます。 Azure CLI を使用した Microsoft Entra ID アクセス トークンの取得に関するページを参照してください。

  1. 次の情報を収集してください。

    パラメーター 説明
    Tenant ID Microsoft Entra ID に登録された、関連するアプリケーションの Directory (tenant) ID
    Client ID Microsoft Entra ID に登録された、関連するアプリケーションの Application (client) ID
    Client secret Microsoft Entra ID に登録された関連するアプリケーションのクライアント シークレットの Value
  2. 上記の情報と 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 アクセス トークンを取得してサービス プリンシパルに対して 使用します。

  1. 次の情報を収集してください。

    パラメーター 説明
    Tenant ID Microsoft Entra ID に登録された、関連するアプリケーションの Directory (tenant) ID
    Client ID Microsoft Entra ID に登録された、関連するアプリケーションの Application (client) ID
    Client secret Microsoft Entra ID に登録された関連するアプリケーションのクライアント シークレットの Value
  2. Microsoft Entra ID サービス プリンシパルの正しい Azure サブスクリプション ID がわからない場合、次のいずれかを実行してこの ID を取得します。

    • Azure Databricks ワークスペースの上部のナビゲーション バーで、ユーザー名をクリックし、[ Azure Portal] をクリックします。 Azure Databricks ワークスペース リソース ページが表示されたら、サイドバーの [概要] をクリックします。 次に、サブスクリプション ID が含まれる [サブスクリプション ID] フィールドを探します。

    • azure CLI を使用して az databricks workspace list コマンドを実行し、--queryオプションと-oオプションまたは--outputオプションを使用して結果を絞り込みます。 adb-0000000000000000.0.azuredatabricks.net をご自分のワークスペース インスタンスの名前に置き換えます。https:// は含めません。 この例では、出力の 00000000-0000-0000-0000-000000000000 の後の /subscriptions/ がサブスクリプション ID です。

      az databricks workspace list --query "[?workspaceUrl==\`adb-0000000000000000.0.azuredatabricks.net\`].{id:id}" -o 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 または -t オプションを使用して正しいテナント ID を指定して、--tenant コマンドをもう一度実行する必要があります。

      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 -t <tenant-id>
      
  3. Microsoft Entra ID サービス プリンシパルの正しい Azure テナント ID、クライアント ID、クライアント シークレット、サブスクリプション ID を取得したら、 Azure CLI を使用して Azure にサインインし、 az login コマンドを実行します。 --service-principal オプションを使用し、Microsoft Entra ID に登録されている関連アプリケーションの Tenant ID (Directory (tenant) ID)、Client ID (Application (client) ID)、Client secret (Value) のパラメーターの値を指定します。

    az login \
    --service-principal \
    -t <Tenant-ID> \
    -u <Client-ID> \
    -p <Client-secret>
    
  4. サインインしている Microsoft Entra ID サービス プリンシパルの正しいサブスクリプションにサインインしていることを確認します。 これを行うには、 または -s オプションを使用して、--subscription コマンドを実行して、正しいサブスクリプション ID を指定します。

    az account set -s <subscription-id>
    
  5. az account get-access-token コマンドを実行して、サインインしている Microsoft Entra ID サービス プリンシパルの Microsoft Entra ID アクセス トークンを生成します。 --resource オプションを使用して、Azure Databricks サービスの一意のリソース ID (2ff814a6-3304-4ab8-85cb-cd0e6f879c1d) を指定します。 --queryオプションと-oオプションまたは--outputオプションを使用して、コマンドの出力に Microsoft Entra ID トークンの値のみを表示できます。

    az account get-access-token \
    --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \
    --query "accessToken" \
    -o 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 ワークスペースにまだ追加されていない。
  1. 次の情報を集めます。

    パラメーター 説明
    Microsoft Entra ID アクセス トークン Microsoft ID プラットフォーム REST API を使用して Microsoft Entra ID アクセス トークンを取得する場合 または Azure CLI を使用して Microsoft Entra ID アクセス トークンを取得する場合、要求から返された Microsoft Entra ID アクセス トークン。
  2. 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 ワークスペースにまだ追加されていない。
  • サービス プリンシパルは、Unity カタログのストレージまたはサービス資格情報を作成または更新しています。

必要条件:

  • サービス プリンシパルには、Azure のターゲット ワークスペース リソースに対する共同作成者ロールまたは所有者ロールが必要です。
  1. 次の情報を収集してください。

    パラメーター 説明
    テナント ID Microsoft Entra ID に登録された関連アプリケーションのディレクトリ (テナント) ID は、Azure portal でサービス プリンシパルをプロビジョニングする際に必要です。
    クライアントID Microsoft Entra ID に登録されている関連アプリケーションのアプリケーション (クライアント) ID。
    クライアント シークレット Microsoft Entra ID に登録された関連アプリケーションに対するクライアント シークレットの は、Azure portal でサービス プリンシパルをプロビジョニングする時に作成したものです
    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 における名前。
  2. 上記の情報の一部を 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 値の中にあります。

  3. 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 ワークスペース管理者になり、ワークスペースにアクセスするために共同作成者ロールまたは所有者ロールは不要になります。