使用服务主体通过REST API运行Azure Databricks笔记本遇权限拒绝错误
问题排查:Azure Databricks REST API作业权限及笔记本访问问题
报错信息汇总
- Postman调用
jobs/run-now时的权限错误:
{ "error_code": "PERMISSION_DENIED", "message": "User 'my-spn' does not have Manage Run or Owner or Admin permissions on job 246372968680205" }
- Python脚本运行作业时的笔记本访问错误:
"error":"run failed with error message\n Unable to access the notebook \"/Repos/test\". Either it does not exist, or the identity used to run this job, Databricks-POC, lacks the required permissions."
针对作业权限错误的排查步骤
- 确认作业所有者身份:调用
jobs/getAPI查看作业的owner_user_name字段,确认是否为你的服务主体(SPN)(格式通常为application-<client-id>@<tenant-id>.onmicrosoft.com)。默认创建作业的用户即为所有者,但如果Workspace有RBAC限制,需验证该身份是否保留所有者权限。 - 检查作业权限配置:调用
jobs/get-permissionsAPI获取作业的权限列表,确认SPN是否被授予CAN_MANAGE_RUN、OWNER或ADMIN权限。若权限缺失,使用jobs/update-permissionsAPI添加对应权限,示例Payload:
{ "access_control_list": [ { "user_name": "your-spn-identity", "permission_level": "CAN_MANAGE_RUN" } ] }
- 验证RBAC角色分配:若Workspace启用了RBAC,确保SPN被分配
Job Manager或Admin角色,这类角色包含作业运行管理的核心权限。
针对笔记本访问错误的排查步骤
- 确认笔记本路径准确性:在Databricks UI中打开目标笔记本,复制其完整路径(注意个人Repos路径通常为
/Repos/<spn-identity>/test,而非/Workspace/Repos/test),核对API请求中的notebook_path是否完全匹配。 - 检查笔记本权限设置:调用
workspace/get-permissionsAPI查看目标路径的权限配置,确保SPN拥有至少CAN_RUN权限。若使用UI操作,可直接在笔记本的“权限”设置中添加SPN并分配对应权限。 - 确认作业运行身份:检查作业配置中是否设置了
run_as_user字段。若设置了该字段,需验证指定身份(报错中的Databricks-POC)是否拥有笔记本访问权限;若未设置,作业默认以创建者(SPN)身份运行,需确保SPN的权限配置正确。
通用排查点
- SPN令牌权限验证:确认生成Bearer令牌时使用的scope包含
https://databricks.azure.com/.default,确保令牌拥有Jobs、Workspace相关的读写权限。 - 集群权限检查:验证SPN对指定的
existing_cluster_id拥有CAN_ATTACH_TO权限,作业需该权限才能在集群上启动任务。
内容的提问来源于stack exchange,提问作者Abhishek Singh
相关产品推荐
相关产品推荐

