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

Azure存储容器通过SAS令牌连接Spark/Databricks失败(403错误)

Spark访问Azure存储容器JSON文件时403认证错误排查方案

问题场景

我尝试通过Spark访问Azure存储容器中的JSON数据文件,已按如下方式配置Spark:

spark.conf.set(f"fs.azure.account.auth.type.{STORAGE_ACCOUNT_NAME}.dfs.core.windows.net", "SAS")
spark.conf.set(f"fs.azure.sas.token.provider.type.{STORAGE_ACCOUNT_NAME}.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set(f"fs.azure.sas.fixed.token.{STORAGE_ACCOUNT_NAME}.dfs.core.windows.net", SAS_TOKEN)
logging.info('spark was configured')

执行data = get_data_from_file(BLOB_PATH)进行连接时,出现403认证错误:

"Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature."

已知信息:

  1. SAS令牌与文件路径均正确;
  2. 容器网络设置启用了防火墙,禁用后问题仍存在;
  3. 访问其他存储账户可正常工作,未修改特殊配置。

排查步骤

  • 校验SAS令牌格式:确认SAS_TOKEN是否包含开头的?,若有需删除。Spark配置中不需要该前缀,带?会导致签名拼接错误。例如原令牌为?sv=xxxx&ss=xxxx...,需改为sv=xxxx&ss=xxxx...。
  • 匹配存储账户URL后缀:检查存储账户类型与配置后缀是否一致:
    • 若为ADLS Gen2,路径需用abfss://<container>@<account>.dfs.core.windows.net/<path>,配置后缀保持dfs.core.windows.net;
    • 若为标准Blob存储,配置后缀需改为blob.core.windows.net,路径用wasbs://<container>@<account>.blob.core.windows.net/<path>。不匹配会导致认证方式失效。
  • 验证SAS令牌权限与资源类型:检查SAS令牌是否包含读取权限(r),资源类型是否覆盖目标对象(o)或容器(c)。可通过Azure Storage Explorer直接使用该SAS令牌访问目标JSON文件,确认权限有效性。
  • 检查Spark/Hadoop版本兼容性:旧版本Hadoop Azure客户端(低于3.2版本)对ADLS Gen2的SAS认证存在bug,会导致签名生成错误。升级Hadoop版本至3.2及以上,或确认客户端依赖包完整性。
  • 同步集群系统时间:Azure存储签名验证要求客户端与服务器时间偏差不超过15分钟,若Spark集群系统时间与UTC时间偏差过大,会触发403错误。检查并同步集群节点时间至UTC标准时间。
  • 确认配置作用域:确保Spark配置在创建DataFrame前设置,且当前会话已加载配置。可在配置后执行print(spark.conf.get("fs.azure.sas.fixed.token.<account>.dfs.core.windows.net")),验证令牌是否正确加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:04:49