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

Azure机器学习中使用Synapse SparkPool访问Dataset时身份验证失败

解决:Synapse Spark池作为AML附加计算时,用Dataset连接ADLS Gen2报错的问题

最近把Synapse Spark池作为附加计算资源加到Azure机器学习(AML)后,使用AML Dataset访问Azure Data Lake Storage Gen2时触发如下错误:

Resolving access token for scope "https://storage.azure.com/.default" using identity of type "MANAGED". No identity was found on compute.

Dataset调用代码示例:

ds = Dataset.get_by_name(ws, "XXXXXXXX")

但在同个Spark池的Notebook中直接用Spark代码访问存储却能正常执行:

STRUCTURED_PATH = 'abfss://curated@xxxx.dfs.core.windows.net'
df_xxxxxx = spark.read.load(STRUCTURED_PATH+'/xxxx/xxxx.snappy.parquet', format='parquet')

问题原因

AML Dataset默认会尝试使用AML计算实例的托管标识获取存储访问令牌,但附加的Synapse Spark池并未与该标识正确关联;而直接使用Spark代码时,依托的是Synapse Spark自身的身份(工作区系统分配MSI、用户分配MSI或服务主体),该身份已被授予存储访问权限,因此可以正常访问。

解决方案

  • 为Synapse Spark池的身份配置存储权限
    打开ADLS Gen2存储账户的「Access Control (IAM)」页面,添加「存储Blob数据参与者」角色分配,将Synapse Spark池使用的身份(系统分配MSI/用户分配MSI/服务主体)设为分配对象。

  • 在AML附加计算时指定正确身份
    在AML中配置附加Synapse Spark池时:

    • 若使用系统分配MSI,需确保AML工作区具备Synapse工作区访问权限,且该MSI已获得存储权限;
    • 若使用用户分配MSI,需在附加计算配置步骤中明确选择对应标识,同时确保该标识拥有存储访问权限。
  • 调整Dataset的调用方式
    获取Dataset后,复用当前Spark会话的身份加载数据,避免AML单独尝试获取令牌:

    ds = Dataset.get_by_name(ws, "XXXXXXXX")
    spark_df = ds.to_spark_dataframe()
    

    此方式会让Dataset使用Synapse Spark已授权的身份访问存储,规避身份找不到的错误。

内容的提问来源于stack exchange,提问作者Guillermo Páez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:03:36