You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks作业无法通过托管身份访问外部存储的技术求助

Databricks作业集群托管身份访问Azure存储排查方案
  • 核对托管身份权限
    作业集群默认使用专属的作业托管身份(而非通用集群的身份),需要确认该身份已被授予存储账户的Blob 数据参与者或Blob 数据读取者权限:

    1. 登录Azure门户,找到目标存储账户
    2. 进入「IAM」→「角色分配」,搜索作业托管身份名称(格式通常为databricks-job-[作业ID],可在Databricks作业配置页查看)
    3. 确认对应权限已存在,若无则添加角色分配
  • 修正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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:20:00