oauth2.0 错误403尝试通过Active Directory访问Azure Databricks API时未授权用户

dtcbnfnu  于 2023-05-21  发布在  其他
关注(0)|答案(2)|浏览(171)

我一直在关注这份文件:https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token
创建服务主体并使用它访问Databricks。我已经配置了一个databricks工作区,并使用它创建了一个集群。然后,我按照文档中提到的过程,创建了一个服务主体并获得了两个令牌:AD访问令牌和管理访问令牌。但是,我无法使用API。
配置后的最后一个调用cURL命令:

curl -X GET \
-H 'Authorization: Bearer <access-token>' \
-H 'X-Databricks-Azure-SP-Management-Token: <management-access-token>' \
-H 'X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/workspaces/<workspace-name>' \
https://<databricks-instance>/api/2.0/clusters/list

使用令牌和其他信息替换提供以下结果:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 403 User not authorized.</title>
</head>
<body><h2>HTTP ERROR 403</h2>
<p>Problem accessing /api/2.0/clusters/list. Reason:
<pre>    User not authorized.</pre></p>
</body>
</html>

我尝试了一些方法来解决这个问题,即更改原始访问令牌请求以使用交互流,使用authorization_code授权类型等,但这只会导致Invalid access token错误。
上述配置是否有问题?我是否缺少某些权限?
更新:来到访问控制(IAM)页面,该应用程序似乎不包括在那里。

j0pj023g

j0pj023g1#

必须为服务主体授予角色。
这是我的测试结果,我没有向服务主体授予角色。错误与您的相同:

接下来,根据以下流程向服务主体授予角色:

Azure Portal>Azure Databricks>Azure Databricks Service>Access control(IAM)>Add a role assignment>Select the role you want to grant and find your service principal>保存

最后,使用服务主体获取令牌。(不要忘记向服务主体授予权限并授予管理员同意)

获取Azure Active Directory访问令牌:x1c4d 1x获取Azure管理资源终结点令牌:

使用管理端点访问令牌访问Databricks REST API:

8wigbo56

8wigbo562#

如果您希望仅使用访问令牌访问Databricks端点,例如在CI/CD工作流中使用DBX触发Databricks管道,则需要将服务主体作为用户添加到Databricks工作区中。因此,只需要访问令牌。
请参阅此处的文档-将服务主体添加为Databricks用户

相关问题