Azure、Databricks、Spark - 无法使用SAS令牌连接

0 投票
1 回答
43 浏览
提问于 2025-04-13 13:05

我正在尝试访问我的 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')

但是当我尝试连接时,出现了一个错误:"服务器未能验证请求。请确保授权头的值正确形成,包括签名部分。"(403错误)。

data = get_data_from_file(BLOB_PATH)

/* SAS 令牌是正确的,文件路径也是正确的。

** 容器的网络设置中启用了防火墙(关闭防火墙也没有帮助)。

*** 如果我尝试从其他存储读取数据是可以的,但为什么呢?我没有在设置中做什么。

1 个回答

1

“服务器未能验证请求。确保授权头的值正确形成,包括签名。”(403)

出现这个问题可能有几个原因:

  • 如果你在使用 blob 存储,那么你必须使用 wasbs 而不是 abfss。我用我的 SAS 令牌尝试了下面的代码,结果在我的 blob 存储上也出现了同样的错误。

** 容器的网络设置中启用了防火墙(禁用它也没有帮助)。**

要访问 Azure blob 存储中的文件,而防火墙设置为 仅来自选定网络

  • 你需要为 Databricks 工作区配置 VNet(虚拟网络)。
  • 然后将同一个虚拟网络添加到你的存储账户中。
  • 我还选择了 服务端点子网委派,如下所示:
  • 现在运行代码以从 ADLS 文件中获取数据。

另外,可以查看 这个 StackOverflow 的回答作为参考。

撰写回答