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

Spark Scala下持存储角色无需SAS token和master key读取Azure Blob Storage数据的方法

Spark Scala无密钥访问Azure Blob Storage方案

核心实现逻辑是通过Azure AD托管身份完成身份校验,不需要明文配置SAS token或存储账户主密钥。

前提条件

  • 你使用的Spark运行身份(或Spark集群绑定的托管身份)已经同时满足两类权限配置:
    • ARM控制平面权限:你提到的存储账户/容器的Contributor、Reader角色(用于资源访问鉴权)
    • 存储数据平面权限:额外分配存储Blob数据读者(只读场景)或存储Blob数据参与者(读写场景)角色,仅ARM角色无法直接访问存储数据
  • 若使用自建Spark集群,已提前安装与Spark版本兼容的hadoop-azure、azure-identity依赖包;Azure托管Spark服务(Databricks、Synapse Spark池)无需额外安装依赖。

场景1:Azure托管Spark服务

这类环境已经默认集成Azure AD鉴权能力,直接用ABFSS协议访问存储路径即可。

代码示例

// 存储路径格式:abfss://<容器名>@<存储账户名>.dfs.core.windows.net/<目标文件路径>
val storagePath = "abfss://demo-container@demostorageaccount.dfs.core.windows.net/data/order.parquet"

// 直接读取数据
val df = spark.read.parquet(storagePath)
df.show()

场景2:自建Spark集群

需要在SparkSession初始化时增加Azure AD OAuth鉴权配置,再访问存储路径即可。如果你的Spark集群部署在Azure VM/VMSS上,直接绑定对应托管身份即可;本地调试场景可搭配Azure CLI登录账号实现鉴权。

配置+代码示例

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()
  .appName("azure-blob-no-key-demo")
  // 开启Azure AD OAuth鉴权
  .config("spark.hadoop.fs.azure.account.auth.type", "OAuth")
  .config("spark.hadoop.fs.azure.oauth.access.token.provider.type", "ManagedIdentity")
  // 若使用用户分配托管身份,补充以下配置,替换为对应托管身份的客户端ID
  // .config("spark.hadoop.fs.azure.oauth.managed.identity.client.id", "xxxx-xxxx-xxxx-xxxx")
  .getOrCreate()

// 同托管Spark场景,用ABFSS协议访问存储路径
val storagePath = "abfss://demo-container@demostorageaccount.dfs.core.windows.net/data/order.parquet"
val df = spark.read.parquet(storagePath)
df.show()

常见问题说明

角色分配完成后最长需要15分钟生效,若刚分配完权限提示鉴权失败,可稍等几分钟再重试。
若使用低版本hadoop-azure包不支持ABFSS协议,可替换为WASBS协议,鉴权配置前缀调整为spark.hadoop.fs.azure.account.auth.type.<存储账户名>.blob.core.windows.net即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:48:02