Azure Databricks API,无法使用服务主体和 API 调用添加存储库

Azure Databricks API, cannot add repos using service principal and API calls

我需要使用位于 this link 的数据块 API 将 Azure DevOps 存储库添加到 azure databricks 存储库。我为此使用服务主体凭据。服务主体已作为管理员用户添加到数据块。通过我的服务负责人,我可以获得回购列表,甚至可以删除它们。但是当我想将 repo 添加到文件夹时,它会引发以下错误:

{
    "error_code": "PERMISSION_DENIED",
    "message": "Missing Git provider credentials. Go to User Settings > Git Integration to add your personal access token."
}

我没有使用自己的凭据来使用 PAT 令牌,而是通过向 https://login.microsoftonline.com/directory-id/oauth2/token 发送请求并使用它进行身份验证来获取不记名令牌。这适用于获取回购、删除回购和获取 repos/repo-id。只是为了创建一个回购协议(通过使用 post 方法向 /repos 添加回购协议)它失败了。

如果我仍然使用 PAT 而不是不记名令牌,我会收到以下错误:

{
    "error_code": "PERMISSION_DENIED",
    "message": "Azure Active Directory credentials missing. Ensure you are either logged in with your Azure 
    Active Directory account or have setup an Azure DevOps personal access token (PAT) in User Settings > Git Integration. 
    If you are not using a PAT and are using Azure DevOps with the Repos API, you must use an AAD access token. See https://docs.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/app-aad-token for steps to acquire an AAD access token."
}

我正在使用 postman 来构建请求。要生成我得到的错误,我正在使用以下内容:

方法:post

url-endpoint: https://adb-databricksid.azuredatabricks.net/api/2.0/repos

body:

url: azure-devops-repo
provider: azureDevOpsServices
path: /Repos/folder-name/testrepo

header:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbG... (Construct it by appending bearer token to key wor "Bearer")
X-Databricks-Azure-SP-Management-Token: management token (get it like bearer token by using resource https://management.core.windows.net/)
X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/azure-subscription-id/resourceGroups/resourcegroup-name/providers/Microsoft.Databricks/workspaces/workspace-name

这里是 post 人的屏幕截图:

请注意,我使用了完全相同的身份验证方法来创建集群和作业以及删除存储库。只是为了添加和更新回购它失败了。 我想知道如何解决上述错误 PERMISSION_DENIED。

在通过 API 创建存储库之前,您是否使用此端点设置了 git 凭据?

https://docs.databricks.com/dev-tools/api/latest/gitcredentials.html#section/Authentication

如果您不先设置它,您可能会在尝试创建存储库时遇到错误。

列出和删除存储库仅需要对 Databricks(不记名令牌或 PAT)进行有效身份验证,不需要有效的 git 凭据。 尝试创建存储库时,您需要在 Azure Devops 上的目标存储库上获得授权。

因此您需要调用 git-credentials 端点(AWS 和 Azure 上的语法相同)来创建它。

一旦您的 git 凭据 up-to-date,存储库的创建应该会按预期进行。

要使服务主体与 Databricks Repos 一起工作,您需要执行以下操作:

  • 为其创建 Azure DevOps 个人访问令牌 (PAT) - Azure DevOps Git 存储库不支持通过 AAD 令牌进行服务主体身份验证(请参阅 documentation)。 (您配置的 SP 服务连接用于连接到其他 Azure 服务,而不是连接到 DevOps 本身)。

  • PAT 也需要使用 Git Credentials API - it should be done when configuring first time or when token is expired. When using this API you need to use AAD token of the service principal. (btw, it could be done via Terraform 放入 Databricks 工作区)

  • 完成后可以使用Databricks Repos APIs or databricks-cli to perform operations with Repos - create/update/delete them. (see )