Databricks作业无法通过托管身份访问外部存储的技术求助
Databricks作业集群托管身份访问Azure存储排查方案
核对托管身份权限
作业集群默认使用专属的作业托管身份(而非通用集群的身份),需要确认该身份已被授予存储账户的Blob 数据参与者或Blob 数据读取者权限:- 登录Azure门户,找到目标存储账户
- 进入「IAM」→「角色分配」,搜索作业托管身份名称(格式通常为
databricks-job-[作业ID],可在Databricks作业配置页查看) - 确认对应权限已存在,若无则添加角色分配
修正Spark配置参数
存储账户名必须为小写,且需在作业集群的Spark配置中完整设置参数(笔记本内临时spark.conf.set可能无法覆盖集群启动时的配置):fs.azure.account.auth.type.your-storage-acct.blob.core.windows.net=ManagedIdentity # 若使用用户分配的托管身份,需额外添加: fs.azure.account.managed.identity.client.id.your-storage-acct.blob.core.windows.net=你的用户分配身份ID注意替换
your-storage-acct为实际小写存储账户名,避免大小写不一致导致的匹配失败验证身份令牌获取能力
在作业执行的笔记本开头添加以下代码,确认托管身份能正常获取存储服务令牌:from azure.identity import DefaultAzureCredential credential = DefaultAzureCredential() try: token = credential.get_token("https://storage.azure.com/.default") print("令牌获取成功,前10位:", token.token[:10]) except Exception as e: print("令牌获取失败:", str(e))若报错,说明身份未正确关联或无权限获取令牌,需检查身份配置
检查无服务器作业集群特殊配置
若使用无服务器作业集群,需在作业配置的「高级选项」中启用托管身份,并确保存储账户权限授予了无服务器作业对应的身份(格式通常为databricks-serverless-job-[xxx])排除存储账户网络限制
若存储账户开启了防火墙,需:- 将Databricks工作区的出站IP段添加至存储账户的允许列表
- 或在存储账户防火墙设置中开启「允许受信任的Microsoft服务访问此存储账户」选项
内容的提问来源于stack exchange,提问作者jp_allard
相关产品推荐
相关产品推荐

