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

Azure Synapse PySpark中ManagedIdentityCredential获取令牌失败问题

解决Azure Synapse PySpark中ManagedIdentityCredential的CredentialUnavailableError问题

1. 确认Synapse工作区系统托管标识已启用

  • 登录Azure门户,进入目标Synapse工作区,转到概述 -> 托管标识,验证“系统分配的托管标识”状态为已启用。若未启用,点击启用并保存配置。

2. 检查Spark池的托管标识配置

  • 进入Synapse Studio,依次打开管理 -> Apache Spark池:
    • 选中运行Notebook的目标Spark池,进入池设置 -> 高级
    • 确认“启用托管标识”选项已勾选,并选择了正确的托管标识(系统分配或预先配置的用户分配标识)

3. 修正get_token的资源参数

  • 调用get_token时,传入的资源参数必须与目标REST API的Azure AD受众(audience)完全匹配,格式通常为API的应用ID URI或客户端ID加/.default后缀。示例代码:
    from azure.identity import ManagedIdentityCredential
    
    credential = ManagedIdentityCredential()
    # 替换为你的自定义API的正确资源标识符
    token = credential.get_token("https://your-custom-api.azurewebsites.net/.default")
    

4. 配置托管标识对目标API的访问权限

  • 在Azure AD的企业应用程序中找到Synapse的托管标识(名称与工作区一致):
    • 转到权限 -> 添加权限,选择你的自定义REST API,添加对应应用权限(根据API认证要求)
    • 若为应用权限,点击授予管理员同意完成权限激活

5. 调整Spark会话配置

  • 在Notebook开头添加以下配置,确保Spark环境支持托管标识访问:
    spark.conf.set("spark.mssparkutils.azureIdentity.enabled", "true")
    
    可先通过mssparkutils验证标识可用性,再使用ManagedIdentityCredential:
    import mssparkutils
    from azure.identity import ManagedIdentityCredential
    
    # 先验证令牌获取
    mssparkutils.azure.getAccessToken("https://your-custom-api.azurewebsites.net/.default")
    # 再使用ManagedIdentityCredential
    credential = ManagedIdentityCredential()
    token = credential.get_token("https://your-custom-api.azurewebsites.net/.default")
    

6. 排查网络访问限制

  • 若Synapse工作区部署在虚拟网络内,需确保Spark节点能访问托管标识元数据端点http://169.254.169.254/metadata/identity/oauth2/token:
    • 检查虚拟网络NSG规则,允许出站访问该内部IP
    • 确认无防火墙或代理阻止对该端点的请求

内容的提问来源于stack exchange,提问作者arpan desai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:43:11