Azure App Service托管身份访问Key Vault失败,重启后恢复
问题描述
某Azure App Service于2年前部署,通过**Managed Identity(托管身份)**认证及访问策略配置访问Azure Key Vault,此前运行正常,但今年多次出现访问失败问题,失败后即使内部有重试机制也无法恢复,需重启App Service才可正常访问。
错误信息
Exception:ManagedIdentityCredential authentication failed: Retry failed after 4 tries. Retry settings can be adjusted in ClientOptions.Retry. (发送请求时出错。) (无法建立连接,因为目标机器主动拒绝了它。) (无法建立连接,因为目标机器主动拒绝了它。) (无法建立连接,因为目标机器主动拒绝了它。)
Retry failed after 4 tries. Retry settings can be adjusted in ClientOptions.Retry. (发送请求时出错。) (无法建立连接,因为目标机器主动拒绝了它。) (无法建立连接,因为目标机器主动拒绝了它。) (无法建立连接,因为目标机器主动拒绝了它。)
发送请求时出错。
发送请求时出错。
无法从传输连接读取数据:现有连接被远程主机强制关闭。
现有连接被远程主机强制关闭。
技术疑问解答
1. 该错误是否与Managed Identity(托管身份)或App Service相关?
是,这类问题核心关联App Service的托管身份运行环境异常。App Service内部负责托管身份认证的本地代理服务可能出现进程僵死、连接池耗尽或状态紊乱,导致无法正常转发认证请求到Azure AD。重启App Service会重置该代理服务及相关系统资源,因此能恢复正常访问。
2. 该错误是否与MSI_ENDPOINT或MSI_SECRET等环境变量有关?
可能性极低。MSI_ENDPOINT与MSI_SECRET是App Service平台自动注入的环境变量,正常运行场景下不会无故失效;仅当App Service运行环境出现配置加载异常时,才可能出现变量无法读取的情况,但这类问题同样会被重启修复。结合错误信息中的连接拒绝/强制关闭描述,问题根源更偏向网络连接或本地代理故障,而非环境变量本身。
3. 该错误意味着认证请求未发出App Service机器,还是远程托管身份认证中心收到请求后主动拒绝?
从错误日志的不同阶段可以判断:
- 「无法建立连接,因为目标机器主动拒绝了它」:说明App Service内部的托管身份代理已尝试发起请求,但在TCP握手阶段被目标端点(Azure AD认证网关或App Service内部中转代理)主动拒绝,请求已离开本地进程但未完成连接建立。
- 「现有连接被远程主机强制关闭」:说明已成功建立的连接被远程端(Azure AD或中间网络节点)强制断开,请求已发送但未完成响应读取。
综上,认证请求已发出App Service本地机器,问题出在网络连接层面或Azure AD端的连接处理异常。
内容的提问来源于stack exchange,提问作者Wright Wang

