使用Service主体从DevOps Pipeline调用Databricks API



我希望能够从DevOps管道调用Databricks API。我可以为我的帐户使用个人访问令牌,但是我想使API调用独立于用户,所以我想使用服务主体(应用程序注册)。我按照本教程https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token为服务主体创建访问令牌,但是我有两个问题:

  1. 这样生成的令牌在1小时内到期-是否有任何优雅的方法来自动刷新它?
  2. 即使在使用此令牌调用ADB API时,我也得到403未经授权-还有什么我应该做的吗?应用注册具有ADB服务的Contributor角色。

编辑:在应用程序注册中添加AzureDatabricks的API权限并授予管理员同意,但仍然没有运气

最后我找到了3种可能的解决方案。

  1. 为服务主体生成访问令牌,为服务主体生成管理服务令牌,并使用这两个令牌访问Databricks API -参考
  2. 使用访问令牌和管理令牌为使用Databricks令牌API的服务主体生成Databricks个人访问令牌,然后您可以将其用于Databricks CLI -参考
  3. 使用AAD令牌通过CLI认证到Databricks(参考和Databricks CLI帮助):
    1. az login --service-principal -u <app-id> -p <app-password> --tenant <tenant-id>
    2. token_response=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d)
    3. export DATABRICKS_AAD_TOKEN=$(jq .accessToken -r <<< "$token_response")
    4. databricks configure --host https://<adb-url> --aad-token
  1. 这样生成的令牌在1小时内到期-是否有任何优雅的方法自动刷新?

不,客户端凭证流不支持刷新令牌。您可以尝试获取新的令牌,请参考此问题。

  1. 甚至在使用此令牌调用ADB API时,我得到403未经授权-还有其他我应该做的吗?这个应用程序注册具有ADB服务的User角色

确保您的服务主体分配了一个Contributor角色。

有两种资源在不同的情况下。

  1. Azure Databricks工作空间用户和管理员服务主体的API访问

    resource=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d

  2. 非工作空间用户的服务主体的API访问

    resource=https://management.core.windows.net/

最新更新