Microsoft Entra サービス プリンシパルを使用して Azure Databricks Git フォルダーへのアクセスを認証する

Microsoft Entra サービス プリンシパルを使用して、Azure DevOps (Azure Repos) がホストする Azure Databricks Git フォルダーに対して認証済みアクセスを構成する方法について説明します。

Azure Repos Git リポジトリがサポートする Databricks Git フォルダーが Databricks プロジェクト内にあり、それらをオートメーションで管理する場合は、この記事の情報を参考にし、Microsoft Entra サービス プリンシパルと Azure DevOps を使用して認証を構成できます。 このタスクを完了すると、オートメーションで使用できる認証済み Databricks Git 資格情報が得られます。

PAT ではなく Microsoft Entra を使用するのはなぜですか?

以前は、リソースへの特定のアクセスとアクセス許可を必要とする API を呼び出す場合、認証方法として個人用アクセス トークン (PAT) が推奨されていました。 これらの "ベアラー トークン" はユーザー名とパスワードを表しており、それらが引き起こすセキュリティ リスクを最小限に抑えるために定期的なローテーションが必要でした。 Microsoft Entra ID のアクセス トークンは、このようなトークンのローテーションを 1 時間ごとに自動的に管理することでこの問題に対処しており、Databricks では Azure リソースを使用するときのベスト プラクティスとして推奨しています。 Microsoft Entra サービス プリンシパルを作成すると、Microsoft Azure ユーザー アカウントを使用せずに、これらのリソースへのアクセスに付与されるアクセス許可を管理できます。

要件

以下が必要です。

  • Databricks Git フォルダーに接続された Azure Repos Git リポジトリを使用して、Azure DevOps プロジェクトにアクセスします。
  • MS Entra サービス プリンシパルを作成するための Azure アカウントのアクセス許可。
  • Azure CLI がインストールされていること。
  • Databricks CLI がインストールされています。

手順 1: Microsoft Entra サービス プリンシパルを作成する

Microsoft Entra サービス プリンシパルが既に構成されている場合は、この手順をスキップできます。

Microsoft Entra サービス プリンシパルを作成するには、Microsoft Azure ドキュメントの手順に従ってください: 「Microsoft Entra アプリを登録し、サービス プリンシパルを作成する」。 この記事の「認証の設定」セクションでは、最初の 2 つのオプションを無視し、「オプション 3: 新しいクライアント シークレットを作成する」の手順に従います。

設定が完了すると、以下を入手できます。

  • "クライアント シークレット"。 これは、ランダムに出現する文字の長い文字列として表示されます。
    • "サービス プリンシパル ID"。 これは、MS Entra サービス プリンシパルに割り当てた一意の名前です。 ベスト プラクティスとして、名前には、いつ、どのように使用するかを示す情報も含めることをお勧めします (たとえば、Databricks_CICD_SP)。

(MS Entra 構成ダイアログの省略可能なリダイレクト UI は、この構成では使用されないため、無視できます。)

今後の手順で使用するので、これらをどこかにコピーしておきます。 このドキュメントのプロセスを完了したら、この情報をセキュリティで保護するか削除します。

手順 2: MS Entra サービス プリンシパルの Azure DevOps アクセス許可を構成する

まず、Azure DevOps リソースにアクセスするためのアクセス許可を MS Entra サービス プリンシパルに付与する必要があります。 これを行うには、Azure DevOps ポータルを使用する必要があります。

  1. Azure DevOps アカウントにログインし、自分のプロジェクトに移動します。

  2. [プロジェクトの設定]>[アクセス許可] で、[閲覧者] をクリックします。

    Azure DevOps の [プロジェクトの設定] の [アクセス許可] にある [メンバー] パネルの内容

  3. [メンバー] タブをクリックし、[追加] をクリックして、作成した MS Entra サービス プリンシパルの名前を追加します。

  4. コンソールで、Azure DevOps 組織の組織レベルに戻り、左ペインの下部にある [組織の設定] をクリックします。

  5. [ユーザー]>[ユーザーの追加] をクリックし、次のようにサービス プリンシパルのアクセスを構成します。

    • 先ほど作成した ID を使用して MS Entra サービス プリンシパルを追加します。
    • サービス プリンシパルのアクセスを、Azure Repos で操作を実行するために必要な最小限のレベルに構成します。 通常は、[基本] レベルのアクセス許可で十分です。 どのレベルを使用すればよいかわからない場合は、Azure DevOps 組織の管理者に問い合わせてください。
    • サービス プリンシパルを Azure DevOps プロジェクトに追加します。
    • サービス プリンシパルを [プロジェクトの共同作成者] グループに割り当てます。

    Azure DevOps の [組織の設定] にある [ユーザー] パネルの内容

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

また、Azure Databricks 内のアクセス許可を Microsoft Entra サービス プリンシパルに割り当てる必要があります。

  1. 自分のアカウントの Azure Databricks アカウント管理コンソールにログインします。
  2. [ユーザーとグループ] をクリックします。
  3. [サービス プリンシパル] タブをクリックし、[サービス プリンシパルの追加] をクリックします。 Databricks アカウント管理コンソールの [ユーザーとグループ] の下にある [サービス プリンシパル] タブ
  4. [サービス プリンシパルの追加] ページで、[Microsoft Entra ID マネージド] をクリックし、Microsoft Entra アプリケーション ID と「手順 1: Microsoft Entra サービス プリンシパルを作成する」のサービス プリンシパル名を追加します。 完了したら、[追加] をクリックします。 Databricks アカウント管理コンソールの [サービス プリンシパルの追加] ダイアログ
  5. 追加された Microsoft Entra サービス プリンシパルをクリックすると、[プリンシパル情報] タブが表示されます。
  6. ページの左下にある [シークレットの生成] をクリックして OAuth シークレットを生成します。 このシークレットにより、Databricks CLI を使用して Azure Databricks API 呼び出しを認証できるようになります。
  7. シークレット文字列とクライアント ID をコピーし、[完了] をクリックします。 次の手順で両方を使用します。 完了 を選択します。 Databricks アカウント管理コンソールの [シークレットの生成] ダイアログ
  8. 左側のサイドバーにある [ワークスペース] をクリックし、ワークスペースを選択して、[アクセス許可] タブをクリックします。
  9. サービス プリンシパルに "ユーザー" アクセス許可を付与し、[アクセス許可の追加] をクリックします。

重要

[アクセス許可] タブが淡色表示されている場合、Azure Databricks ワークスペースは Unity Catalog メタストアに割り当てられていません。 Databricks 管理者にお問い合わせください。

次に、Azure Databricks Git 資格情報を作成します。

手順 4: Microsoft Entra ID アクセス トークンを作成し、Azure Databricks Git 資格情報として保存します。

Note

この手順では、Azure と Databricks CLI の両方を使用する必要があります。

Azure Databricks の認証を受けるには、前の手順で作成した OAuth シークレットを使用して構成プロファイル (.databrickscfg) を構成しておく必要があります。 この構成を設定するには、エディターで .databrickscfg ファイルを開き、次の内容をファイルに追加します。

[DEFAULT]
host = https://<workspace-url>.azuredatabricks.net/
client_id = <service principal ID>
client_secret = <Databricks OAuth token value>

この host は Databricks ワークスペースの URL、client_id は Microsoft Entra サービス プリンシパル ID、client_secret は「手順 3: Azure Databricks のサービス プリンシパルにアクセス許可を割り当てる」で作成した OAuth クライアント シークレットです。

このプロセスでは、CLI 呼び出しに次の値を指定する必要があります。

  • 手順 1 または 3 のサービス プリンシパル クライアント ID。これらは同じである必要があります。 (次の CLI の例では sp_id。)
  • 手順 1 のサービス プリンシパル名。 (sp_name)
  • 手順 1 のサービス プリンシパルのクライアント シークレット文字列。 (sp_secret)
  • Azure DevOps 組織名。 (devops_org)
  • Azure DevOps プロジェクト名。 (devops_project)
  • Azure Repos リポジトリ名。 (devops_repo)

さらに、Azure サブスクリプションの Azure テナント ID (次の例では tenant_id) が必要です。 こちらの手順に従って Azure portal から入手してください

これで、Azure CLI から Git 資格情報を作成できるようになります。

  1. Azure および Databricks CLI にアクセスできるコマンド ライン ウィンドウを開きます。
  2. 次の Azure CLI コマンドを実行して、Microsoft Entra サービス プリンシパルとしてログインします: az login --allow-no-subscriptions --service-principal -u $sp_id -p $sp_secret --tenant $tenant_id
  3. Microsoft Entra サービス プリンシパルとして、Microsoft Entra ID アクセス トークンを要求し、それを変数に割り当てます: ENTRA_ID_TOKEN=$(az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" --query "accessToken" --output tsv)
  4. アクセス トークンを使用し、構成したアクセス許可レベルを使用して Azure Databricks アクセス用の Git 資格情報を作成します: databricks git-credentials create azureDevOpsServices --personal-access-token $ENTRA_ID_TOKEN --git-username $sp_name
  5. 最後に、Microsoft Entra サービス プリンシパルを使用して新しい Git フォルダーを作成します: databricks repos create \https://$sp_name@dev.azure.com/$devops_org/$devops_project/_git/$devops_repo

この Azure DevOps リポジトリに対応する Git フォルダーが Azure Databricks ワークスペースで使用できるようになりました。 Git 資格情報を指定すると、Databricks Repos REST API または Databricks CLI を使用してコードから資格情報を管理できます。

Azure DevOps を対象とした Microsoft Entra ID アクセス トークンを生成し、Databricks Git 資格情報として保存する方法の説明はこれで完了です。

ベスト プラクティス

Entra ID アクセス トークンの有効期間は短いため、パイプラインで git-credentials update を使用して Databricks Git 資格情報を更新する必要があります。 次に databricks repos update を使用してそこから pull request をトリガーできます。

重要

運用環境では追加のセキュリティ対策が必要です。 運用環境では、サービス プリンシパルのクライアント シークレットと Databricks OAuth トークンを Azure Key Vault などのセキュリティで保護されたシークレット ストアに保存する必要があります。

関連項目