Synapse Notebook调试可读取Key Vault秘钥,调度执行失败求因
身份标识差异
调试模式默认使用当前登录用户的Azure AD身份访问Key Vault,只要你的账号具备Get/List密钥权限即可成功;调度执行则依赖Synapse工作区的服务器托管标识,即便已配置权限,也要确认是否是正确的工作区标识(而非Spark池托管标识),同时注意Azure RBAC权限存在15-30分钟的生效延迟。运行环境隔离
调试时Notebook运行在交互式Spark会话,直接继承当前上下文配置;调度执行以批处理任务形式运行在独立环境,可能存在配置偏差:比如调度任务是否指定了正确的Spark池,或者池的网络配置(如VNet隔离、防火墙规则)限制了Key Vault访问——若Key Vault设置防火墙,调试时你的IP可能在允许列表,但Spark池的出站IP不在,就会导致失败。TokenLibrary上下文差异
调试时TokenLibrary自动获取当前用户令牌;调度执行时需确保TokenLibrary使用工作区托管标识的令牌。使用TokenLibrary.getSecret(kv, secret_name)时,要确认kv是Key Vault的纯名称(不带.vault.azure.net后缀),或者是否已在Synapse配置Key Vault链接服务——若用链接服务,调度任务需明确引用链接服务名称而非直接用Key Vault名称。权限模型细节
检查托管标识的权限是否直接分配给Key Vault,而非通过角色继承。另外,Key Vault的访问策略模式与Azure RBAC是独立的:若Key Vault使用访问策略,需给托管标识单独添加Get/List密钥的访问策略权限,仅配置Azure RBAC角色可能无效。
内容的提问来源于stack exchange,提问作者DejanS

