Databricks读取Azure Blob存储文件身份验证失败,求其他解决办法
Databricks访问Azure存储认证错误的额外排查方案
问题场景
在Databricks中执行以下代码读取Azure存储CSV文件时:
date_config = spark.read.option("header", True).option("inferSchema", True).csv(f"{DBX_SAMPLE_MNT}/dateconfig/date_config.csv")
触发认证错误:
shaded.databricks.org.apache.hadoop.fs.azure.AzureException: hadoop_azure_shaded.com.microsoft.azure.storage.StorageException: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
已尝试但无效的操作:
- 在存储账户和容器级别生成新的SAS令牌;
- 调整存储账户网络设置的“允许访问来源”(全部/选定网络);
- 确认账户密钥无误;
- 开关VPN并检查本地设备时间。
此前可用的SAS令牌尚未过期却突发该问题,以下是额外可行的解决办法:
1. 校验SAS令牌的权限与路径匹配度
- 检查SAS的资源类型:若为容器级SAS,确认挂载路径对应容器与授权容器一致;若为对象级SAS,需保证访问的文件路径完全在授权范围内。
- 验证SAS的权限参数:确保包含
r(读取)权限,避免因权限缺失导致认证失败。 - 检查SAS签名版本:旧版本签名可能与Databricks的Hadoop SDK不兼容,尝试生成V2及以上版本的SAS令牌。
2. 重新检查并重置Databricks挂载配置
- 核对挂载命令参数:确认
dbutils.fs.mount中的source指向正确存储容器URL,extra_configs里的凭据无多余空格、转义错误。 - 执行卸载后重新挂载:先用
dbutils.fs.unmount("/mnt/your-mount-path")移除现有挂载,再使用有效凭据重新挂载,清除缓存的旧凭据。
3. 细化存储账户网络规则检查
- 确认“允许受信任的Microsoft服务访问”选项:即使设置了全部网络访问,若未勾选该选项,Databricks作为受信任服务仍可能被拦截。
- 选定网络场景下的额外检查:确保Databricks工作区所在VNet已加入存储账户允许列表,同时确认服务端点或专用链接配置正常,保证网络连通。
4. 验证Databricks集群节点时间同步
- 本地设备时间正常不代表集群节点时间同步,在集群中执行
!date查看节点时间,若与Azure服务器时间偏差超过15分钟,重启集群完成时间同步。
5. 检查存储账户状态与ACL权限
- 确认存储账户状态:在Azure门户查看是否有账户锁定、配额超限等异常告警。
- 核查容器ACL与RBAC权限:若使用Azure AD托管标识或RBAC,确认集群使用的服务主体拥有目标容器/文件的读取权限,ACL限制可能覆盖SAS令牌权限。
6. 排查Databricks Runtime版本兼容性
- 若近期升级过Runtime,可能存在Hadoop Azure SDK版本不兼容问题,尝试切换回之前正常运行的Runtime版本测试,或查阅对应Runtime文档确认推荐的SAS配置。
内容的提问来源于stack exchange,提问作者Jilinnie Park
相关产品推荐
相关产品推荐

