使用ManagedIdentityCredential访问AzureML模型遇认证失败求助
这个错误的核心原因是ManagedIdentityCredential依赖Azure实例元数据服务(IMDS)获取身份凭证,当代码运行环境未启用托管身份、无法访问IMDS端点时就会触发。以下是针对性的解决步骤:
核对运行环境的托管身份支持情况
- 若在本地开发环境运行:
ManagedIdentityCredential不适用,建议改用DefaultAzureCredential(自动适配CLI登录、环境变量、托管身份等多种认证方式),修改代码如下:from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential credential = DefaultAzureCredential() ml_client = MLClient(credential, subscription_id, resource_group, workspace_name) print(f'ML Client :', ml_client) azure = ml_client.models.list() for model in azure: print(model) - 若在Azure服务(VM、ACI、App Service等)中运行:
- 进入Azure门户对应服务的「标识」页面,确认系统分配身份处于「开启」状态,或已添加用户分配的身份;
- 再次核对托管身份的角色分配范围,确保是在目标Azure ML工作区级别授予了「参与者」「机器学习数据科学家」等合适角色。
- 若在本地开发环境运行:
检查IMDS端点的访问权限
在Azure服务环境中,执行以下操作排查网络问题:- 检查网络安全组(NSG)是否允许出站访问IMDS端点
http://169.254.169.254; - 若在虚拟网络中,确认私有链接、服务端点配置未拦截IMDS访问;
- 直接在环境中运行
curl http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F,测试是否能正常获取响应,无响应则针对性调整网络配置。
- 检查网络安全组(NSG)是否允许出站访问IMDS端点
显式指定用户分配的托管身份(若使用)
如果你采用的是用户分配的托管身份,初始化ManagedIdentityCredential时必须指定其client_id:from azure.ai.ml import MLClient from azure.identity import ManagedIdentityCredential # 替换为你的用户分配托管身份的client_id credential = ManagedIdentityCredential(client_id="your-managed-identity-client-id") ml_client = MLClient(credential, subscription_id, resource_group, workspace_name) print(f'ML Client :', ml_client) azure = ml_client.models.list() for model in azure: print(model)
内容的提问来源于stack exchange,提问作者Nuzli Mohamad Anas
相关产品推荐
相关产品推荐

