托管身份调用GraphRbacManagementClient出现Connection reset错误如何解决
问题原因与解决方法
核心错误原因
你遇到的连接重置问题首先来自API版本不兼容:
- 你使用的
azure.graphrbac依赖库调用的是Azure AD Graph(graph.windows.net),该API已在2022年6月30日正式弃用,微软已逐步关闭该端点的公共访问,直接触发连接被重置报错。 - 你给托管身份(MSI)配置的是Microsoft Graph的
Directory.ReadAll权限,和你调用的Azure AD Graph端点不匹配,即使端点可用也会触发权限错误。
正确实现步骤
- 替换依赖包:卸载废弃的
azure-graphrbac包,安装微软官方支持的Microsoft Graph相关依赖:pip install azure-identity msgraph-core - 修改代码调用当前生效的Microsoft Graph端点
https://graph.microsoft.com,示例代码如下:
from azure.identity import ManagedIdentityCredential from msgraph.core import GraphClient import logging # 初始化系统分配托管身份凭证 credential = ManagedIdentityCredential() # 初始化Graph客户端,使用你已配置的Directory.ReadAll应用权限 graph_client = GraphClient(credential=credential, scopes=["https://graph.microsoft.com/.default"]) # 调用组列表接口 resp = graph_client.get("/groups") if resp.status_code == 200: groups = resp.json().get("value", []) for group in groups: logging.info(group.get("displayName")) else: logging.error(f"请求失败,状态码:{resp.status_code},错误:{resp.text}")
- 确认权限配置生效:你已配置的Microsoft Graph 应用权限
Directory.ReadAll符合要求,注意必须在权限配置页点击授予租户管理员同意,权限才会正式生效。
网络排查(替换SDK后仍报错时检查)
如果修改代码后仍报连接错误,可按以下顺序确认网络配置:
- 若Function App配置了VNet集成,检查VNet关联的网络安全组(NSG)出站规则,是否允许443端口访问
graph.microsoft.com - 若配置了Azure Firewall或第三方出站防火墙,需要将
graph.microsoft.com加入出站白名单 - 若开启了Function App私有端点,确认私有DNS配置未覆盖Microsoft Graph的公共域名解析
内容的提问来源于stack exchange,提问作者Meenakshi
相关产品推荐
相关产品推荐

