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

Databricks Apps自定义服务主体配置及Unity Catalog权限问题

Databricks Apps部署Flask应用访问Unity Catalog Volume权限问题解决方案

1. 修复自定义服务主体指定失效问题

run_as参数并非无效,而是需要严格遵循正确配置格式且满足权限要求:

  • 在databricks.yml中按以下格式配置自定义服务主体:
    deploy:
      apps:
        - name: your-flask-app-name
          run_as:
            service_principal_name: "your-custom-sp@your-account.onmicrosoft.com"
            # 也可使用服务主体ID替代名称
            # service_principal_id: "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    
  • 配置后必须重新执行部署命令(databricks apps deploy),且部署者需拥有该自定义服务主体的管理权限,否则配置会被系统忽略。

2. 为自动生成的服务主体配置Unity Catalog权限

自动生成的服务主体命名格式为app-<应用名称>-<随机后缀>,可在工作区的身份与访问管理 > 服务主体页面搜索应用名称找到它:

  • 通过Unity Catalog UI配置权限:
    1. 进入目标Volume所在的Catalog,依次设置Catalog的USAGE权限、Schema的USAGE权限、Volume的WRITE(或ALL PRIVILEGES)权限给该服务主体。
  • 或通过SQL快速配置:
    GRANT USAGE ON CATALOG <catalog-name> TO `app-your-flask-app-xxxx`;
    GRANT USAGE ON SCHEMA <schema-name> TO `app-your-flask-app-xxxx`;
    GRANT WRITE ON VOLUME <catalog-name>.<schema-name>.<volume-name> TO `app-your-flask-app-xxxx`;
    
  • 权限生效存在延迟,配置后等待1-2分钟再重新测试应用。

3. 修正代码中的Volume路径写法

避免直接使用/Volumes绝对路径,改用Databricks标准路径格式,适配应用容器环境:

# 推荐格式
volume_path = "/Volumes/<catalog>/<schema>/<volume>/target-file.csv"
# 或DBFS路径格式
volume_path = "dbfs:/Volumes/<catalog>/<schema>/<volume>/target-file.csv"

不要依赖本地文件系统的路径解析逻辑,确保代码中使用的路径与笔记本中验证通过的路径完全一致。

4. 调试身份与环境

在Flask应用中添加日志输出当前运行身份,确认是否符合预期:

import os
# 打印当前身份相关环境变量
print(f"Current run identity: {os.environ.get('DATABRICKS_USER') or os.environ.get('DATABRICKS_SERVICE_PRINCIPAL_ID')}")

通过对比笔记本中的身份信息,排查是否存在身份切换异常。

内容的提问来源于stack exchange,提问作者Karri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:05:06