パーソナルアクセストークン(PAT)は、パスワードでログインせずにAzure DatabricksやAzure DevOpsなどのサービスにアクセスする便利な方法です。現在、多くの顧客がDatabricks Gitフォルダ(旧Repos)のリモートリポジトリのGit認証情報としてAzure DevOps PATトークンを使用しています。残念ながら、PATトークンの使用にはいくつかのデメリットがあります。Azure DevOpsでは、PATトークンはサービスプリンシパルやマネージドアイデンティティに発行することができず、顧客はサービスアカウントやユーザーのアイデンティティに頼ることになります。また、PATトークンの最大寿命はしばしば数日、数週間、あるいは数ヶ月であり、そのローテーション(古いトークンが使用できなくなるようにトークンを更新するプロセス)は管理されることがありますが、これは長寿命の漏洩したトークンが大きなリスクをもたらす可能性があることを意味します。より安全な代替手段は、Microsoft Entra ID(旧Azure Active Directory)アクセストークンを使用してAzure DevOpsリソースにアクセスすることです。
Microsoft Docsから:
PATは単なるベアラートークン、つまりユーザーのユーザー名とパスワードを表すトークン文字列であるため、誤った人の手に簡単に渡ってしまう可能性があり、非常に リスキーです。Microsoft Entraのトークンは毎時間期限切れになります[…],これにより、漏洩した場合のリスク全体が制限されます。[1] Databricks GitフォルダにリンクされたAzure DevOps Gitリポジトリへのアクセスを考えると、もはやPATに頼る必要はありません。現在、トークンのローテーションと有効期限に対するより厳格な制御を持つMicrosoft Entra IDアクセストークンを使用できます。
このブログでは、Azure DevOpsにホスティングされたリポジトリをプルする際に、DatabricksのGitフォルダーでEntra IDのアクセストークンをGitの認証情報として使用し、セキュリティを強化する方法を学びます。
前提条件 | サービスプリンシパルの作成
まず、マネージドアイデンティティまたはサービスプリンシパルが必要です。まだ持っていない場合は、このドキュメントに従ってください:Microsoft Entraアプリを登録し、サービスプリンシパルを作成する。これにより、使用できるサービスプリンシ パルが得られます。このシナリオではリダイレクトURIは必要ないので、そのフォーム要素は空白のままにしておいてください。シークレットを作成し、サービスプリンシパルIDとともにメモしておいてください。(次の手順では、認証のメカニズムとしてサービスプリンシパルを使用する方法を示しますが、マネージドアイデンティティにも同じ手順が適用されます。)
このプロセスは、Databricks GitフォルダーにリンクしたいGitリポジトリを設定したAzure DevOpsプロジェクトがあることを前提としています。
ステップ1 | プロジェクト内でサービスプリンシパルにリーダー権限を付与します
Azure DevOpsのプロジェクト設定 > 権限 > 読者にあなたのサービスプリンシパルを追加します。
必要な操作を行うためのアクセスレベルが十分であることを確認してください 組織設定 > ユーザー
ステップ2 | Databricksでサービスプリンシパルに必要な権限を付与する
Unity Catalogを使用している場合は、別のブラウザタブを開き、Databricksアカウントのコンソールに移動し、サービスプリンシパルをアカウントに追加します。
さて、OAuthシークレットを生成しますDatabricks APIに対して認証するために(CLIを使用して)そして、それを安全な場所にコピーしておきます。
最後に、サービスプリンシパルユーザーにワークスペースの権限を付与します。
ステップ3 | CLIを使用してEntra IDトークンを作成し、それをDatabricks Gitの資格情報に保存します
このステップでは、AzureとDatabricksのCLIを使用します。Databricksに対して認証するためには、設定プロファイル (.databrickscfg) が必要で、これには先ほど作成したOAuthトークン、ワークスペースのURL、およびサービスプリンシパルIDを設定します。更新後の .databrickscfgは次のようになります:
サービスプリンシパルをAzureCLIにログインさせるために、先ほど作成したシークレットを使用します。スクリプトは、UUID 499b84ac-1321-427f-aa17-267ca6975798で示されるAzure DevOpsにスコープを持つEntra IDアクセストークンを要求し、その後Databricks CLIでGitの資格情報を設定し、新しいGitフォルダの設定を行います:
まとめ | 次に何をすべきか?
これで、Azure DevOpsにスコープを持つMicrosoft Entra IDアクセストークンを生成し、それをDevOps PATトークンの代わりにDatabricks Gitの資格情報として保存する方法を学びました。MS Entra IDアクセストークンは短期間有効なので、パイプラインはDatabricks git-credentials updateを使用してGitの資格情報を更新し、その後Databricks repos updateを呼び出してプルをトリガーする必要があります。このプロセスは資格情報の設定を示すだけなので、通常は本番環境では追加のセキュリティ対策が必要です。例えば、サービスプリンシパルのクライアントシークレットやDatabricksのOAuthトークンを、Azure Key Vaultのような安全なシークレットストアに保存するなどです。
詳細は、Azure PipelinesでAzure Key Vaultのシークレットを使用するとシークレットスコープをご覧ください。