Azure机器学习在线端点部署中的MSI身份验证失败问题
我看到你在部署Azure机器学习托管在线端点时,遇到了MSI身份验证的问题,报错提示连接MSI失败并返回405状态码。结合你提到的已经确认工作区是系统分配的托管身份且有租户ID,我整理了几个常见的排查方向,你可以逐一试试:
检查score.py中的MSI认证代码是否正确
405错误通常是请求方法不匹配导致的,系统分配MSI的token获取端点只接受GET请求。你可以确认下代码里有没有用错请求方法,比如误写成POST。这里给你一个正确的示例代码参考:import requests def get_ml_workspace_token(): # 系统分配MSI的token获取地址,必须用GET请求 token_url = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://ml.azure.com/" headers = {"Metadata": "true"} try: response = requests.get(token_url, headers=headers) response.raise_for_status() return response.json()["access_token"] except Exception as e: raise RuntimeError(f"获取MSI token失败: {str(e)}")确认托管端点的MSI权限配置
即便工作区是系统分配MSI,也要确保这个身份拥有访问目标资源的权限。你可以登录Azure门户,进入对应工作区的「访问控制(IAM)」页面,检查该系统分配的MSI是否被赋予了合适的角色(比如「Azure机器学习工作区参与者」),没有的话手动添加角色权限试试。验证端点环境的MSI服务可用性
托管在线端点的运行环境通常会自动配置MSI服务,但偶尔可能出现异常。你可以尝试重新部署端点,或者检查端点的网络配置:如果端点部署在虚拟网络中,要确保NSG或防火墙规则没有阻断对元数据服务地址169.254.169.254的访问,这个本地地址是MSI获取token的关键通道。核对租户ID与资源URI的正确性
再仔细检查下代码中指定的租户ID是否和工作区实际的租户ID一致,同时确认请求token时的resource参数是否正确(Azure机器学习工作区的标准resource URI是https://ml.azure.com/),参数错误也可能导致身份验证失败。
如果以上步骤都尝试后仍然无法解决问题,建议查看部署日志里更详细的请求细节(比如具体的请求方法、完整的请求URL),这能帮你进一步定位问题所在。
备注:内容来源于stack exchange,提问作者Chidera Ferdinand

