从Databricks访问存储账户子目录时遇403授权错误(疑网络问题)
解决VNet注入Databricks访问存储账户子目录403权限问题
问题现象
- 执行
dbutils.fs.ls("abfss://bronze@mycontainer.dfs.core.windows.net/")可正常列出容器根目录内容 - 执行
dbutils.fs.ls("abfss://bronze@mycontainer.dfs.core.windows.net/graph_api/")或dbutils.fs.put操作时返回403错误:This request is not authorized to perform this operation - 存储账户网络设置改为“允许所有网络访问”时,子目录操作恢复正常
现有配置与环境
- 已配置关联Workspace访问连接器的外部位置,连接器拥有存储账户
Storage blob data contributor权限 - 本人是存储账户和外部位置的所有者,且自身拥有
Storage blob data contributor权限 - 环境为VNet注入的Databricks,存储账户网络设置为“允许选定虚拟网络和IP地址访问”,已将两个子网加入白名单,子网附加了存储账户服务端点,未使用专用端点
排查与解决步骤
1. 确认子网服务端点覆盖范围
检查加入存储账户白名单的两个子网是否完全覆盖Databricks的控制平面和数据平面子网。VNet注入的Databricks依赖这两个子网的流量,需确保它们都已添加到存储账户的虚拟网络允许列表,且都启用了Microsoft.Storage服务端点。
2. 验证子目录级权限配置
- 若存储账户启用分层命名空间(ADLS Gen2),检查
graph_api/子目录的自定义ACL设置,确保Workspace访问连接器或你的账户拥有读写权限 - 确认
Storage blob data contributor角色的作用范围包含目标子目录(或上级容器/存储账户),避免权限仅作用于根目录
3. 检查集群网络路由与NSG规则
- 查看Databricks集群子网的路由表,确保没有将
Microsoft.Storage流量路由到公网的规则,保证流量通过服务端点访问存储账户 - 验证NSG规则是否允许集群子网出站访问
Microsoft.Storage的HTTPS流量(端口443)
4. 检查外部位置配置
确认外部位置的路径是否指向容器根目录(abfss://bronze@mycontainer.dfs.core.windows.net/),若外部位置路径限制到特定子目录,会导致访问其他子目录失败。同时确认外部位置的权限已正确关联到Databricks工作区。
5. 开启存储账户的信任服务访问选项
在存储账户的防火墙设置中,开启“允许受信任的Microsoft服务访问此存储账户”选项,避免Databricks控制平面的操作被拦截。
6. 排查RBAC权限的继承问题
若子目录继承了异常的权限设置,可通过Azure CLI重置子目录的权限继承:
az storage fs access set --account-name <存储账户名> --file-system bronze --path graph_api --inherit true
内容的提问来源于stack exchange,提问作者play_something_good
相关产品推荐
相关产品推荐

