使用 Microsoft Entra 服务主体对 Azure Databricks Git 文件夹的访问权限进行身份验证
了解如何使用 Microsoft Entra 服务主体配置对 Azure DevOps (Azure Repos) 托管的 Azure Databricks Git 文件夹的经身份验证访问权限。
如果你的 Databricks 项目中有 Databricks Git 文件夹,这些文件夹由 Azure Repos Git 存储库提供支持,并且你需要在自动化流程中对其进行管理,可以利用本文中的信息,通过 Microsoft Entra 服务主体和 Azure DevOps 配置身份验证。 完成此任务后,你将获得可在自动化流程中使用的经过身份验证的 Databricks Git 凭据。
为什么使用 Microsoft Entra 而不是 PAT?
过去,在调用需要特定访问权限和资源权限的 API 时,个人访问令牌 (PAT) 是首选的身份验证方式。 这些持有者令牌代表用户名和密码,并需要定期轮换以尽量减少安全风险。 Microsoft Entra ID 访问令牌通过每小时自动管理这些令牌的轮换解决了这一问题,并且 Databricks 建议在使用 Azure 资源时将其作为最佳做法。 通过创建 Microsoft Entra 服务主体,可以在不使用 Microsoft Azure 用户帐户的情况下管理对这些资源授予的访问权限。
要求
您必须具有:
- 通过连接到 Databricks Git 文件夹的 Azure Repos Git 存储库访问 Azure DevOps 项目的权限。
- Azure 帐户上用于创建 MS Entra 服务主体的权限。
- 已安装 Azure CLI。
- 已安装 Databricks CLI。
步骤 1:创建 Microsoft Entra 服务主体
如果已拥有经过配置的 Microsoft Entra 服务主体,则可以跳过此步骤。
若要创建 Microsoft Entra 服务主体,请按照 Microsoft Azure 文档中的步骤操作:注册 Microsoft Entra 应用并创建服务主体。 在本文的“设置身份验证”部分中,忽略前两个选项,并按照“选项 3:创建新的客户端密码”中的步骤操作。
完成设置后,你将拥有:
- 一个客户端密码。 它将显示为一长串看似随机的字符。
-
- 一个服务主体 ID。 这是你为 MS Entra 服务主体指定的唯一名称。 最佳做法是,名称应包含指示其用途和使用时间的信息(例如,
Databricks_CICD_SP
)。
- 一个服务主体 ID。 这是你为 MS Entra 服务主体指定的唯一名称。 最佳做法是,名称应包含指示其用途和使用时间的信息(例如,
(可以忽略 MS Entra 配置对话框中的可选重定向 UI,因为此配置中不会使用它。)
将这些信息记录下来,以供后续步骤中使用。 成功完成本文档中的流程后,请妥善保留或删除这些信息。
步骤 2:为 MS Entra 服务主体配置 Azure DevOps 权限
首先,必须授予 MS Entra 服务主体访问 Azure DevOps 资源的权限。 为此,必须使用 Azure DevOps 门户。
登录到 Azure DevOps 帐户,并浏览到你的项目。
在“项目设置”>“权限”下,单击“读取者”。
单击“成员”选项卡,单击“添加”,然后添加已创建的 MS Entra 服务主体的名称。
在控制台中,返回到 Azure DevOps 组织的组织级别,然后单击左窗格底部的“组织设置”。
单击“用户”>“添加用户”,然后配置服务主体的访问权限,如下所示:
- 使用先前创建的 ID 添加 MS Entra 服务主体。
- 将服务主体的访问权限配置为在 Azure Repos 中执行操作所需的最低级别。 一般情况下,“基本”级别权限就已足够。 如果不确定要使用哪种级别,请联系 Azure DevOps 组织管理员。
- 将服务主体添加到 Azure DevOps 项目。
- 将服务主体分配给“项目参与者”组。
步骤 3:向 Azure Databricks 中的服务主体分配权限
在这一步,还必须将 Azure Databricks 中的权限分配给 Microsoft Entra 服务主体。
- 登录到 Azure Databricks 帐户的帐户管理控制台。
- 单击“用户和组”。
- 单击“服务主体”选项卡,然后单击“添加服务主体”。
- 在“添加服务主体”页上,单击“Microsoft Entra 托管 ID”,然后添加在“步骤 1:创建 Microsoft Entra 服务主体”中创建的 Microsoft Entra 应用程序 ID 和服务主体名称。 完成后,单击“添加”。
- 单击已添加的 Microsoft Entra 服务主体以查看“主体信息”选项卡。
- 单击页面左下角的“生成机密”以生成 OAuth 机密。 借助此机密,可以使用 Databricks CLI 对 Azure Databricks API 调用进行身份验证。
- 复制“机密字符串”和“客户端 ID”,然后单击“完成”。 下一个步骤中将会用到这两个信息。 选择“完成” 。
- 在左侧边栏中,单击“工作区”,选择你的工作区,然后单击“权限”选项卡。
- 向服务主体授予“用户”权限,然后单击“添加权限”。
重要
如果“权限”选项卡灰显,表明你的 Azure Databricks 工作区未分配到 Unity Catalog 元存储。 请联系你的 Databricks 管理员。
接下来要创建 Azure Databricks Git 凭据。
步骤 4:创建 Microsoft Entra ID 访问令牌并将其存储为 Azure Databricks Git 凭据。
注意
此步骤需要同时使用 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,应该是同一个 ID。 (以下 CLI 示例中的
sp_id
。) - 步骤 1 中的服务主体名称。 %>
- 步骤 1 中的服务主体客户端密码字符串。 %>
- Azure DevOps 组织名称。 %>
- Azure DevOps 项目名称。 %>
- Azure Repos 存储库名称。 %>
此外,还需要 Azure 订阅的 Azure 租户 ID(以下示例中的 tenant_id
)。 请按照这些说明从 Azure 门户中获取。
现在,可以从 Azure CLI 创建 Git 凭据。
- 打开有权访问 Azure 和 Databricks CLI 的命令行窗口。
- 运行以下 Azure CLI 命令,以 Microsoft Entra 服务主体的身份登录:
az login --allow-no-subscriptions --service-principal -u $sp_id -p $sp_secret --tenant $tenant_id
- 以 Microsoft Entra 服务主体的身份请求 Microsoft Entra ID 访问令牌,并将其分配给变量:
ENTRA_ID_TOKEN=$(az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" --query "accessToken" --output tsv)
- 根据为其配置的权限级别,使用访问令牌创建一个 Git 凭据用于 Azure Databricks 访问:
databricks git-credentials create azureDevOpsServices --personal-access-token $ENTRA_ID_TOKEN --git-username $sp_name
- 最后,使用 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
从中触发拉取请求。
重要
在生产环境中也需要设置额外的安全措施。 在生产环境中,应将服务主体客户端密码和 Databricks OAuth 令牌存储在安全的机密存储中,例如 Azure Key Vault。
另请参阅
使用服务主体和托管标识(Microsoft Azure DevOps 文档)