You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Linux虚拟机中使用MSI认证Python应用时遇错误求助

解决Azure MSI Python认证的日志警告与运行错误

首先,那个No handlers could be found for logger "msrestazure.azure_active_directory"的警告很好解决——这只是Python日志模块没配置处理器导致的,你可以在代码最开头加一段日志配置,既能消除警告,还能帮你看到更完整的错误细节:

import logging
logging.basicConfig(level=logging.INFO)

接下来针对你遇到的认证失败问题,给你几个排查方向:

  • 先确认VM的MSI服务是否正常工作
    登录到Linux VM里,执行这条命令测试MSI能否正常获取令牌:

    curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true
    

    如果返回包含access_token的JSON,说明MSI服务没问题;如果返回错误,先去Azure门户检查VM的「身份」配置:系统分配身份是否启用,或者用户分配身份是否正确关联。

  • 检查并升级Python依赖包
    旧版本的Azure SDK包可能存在兼容性问题,建议升级到最新稳定版:

    pip install --upgrade azure-mgmt-resource msrestazure azure-identity
    

    另外,Azure官方现在更推荐用azure-identity库的ManagedIdentityCredential来实现MSI认证,比旧代码更稳定,给你一个示例代码:

    from azure.identity import ManagedIdentityCredential
    from azure.mgmt.resource import ResourceManagementClient
    
    # 初始化MSI凭证
    credential = ManagedIdentityCredential()
    # 替换成你的Azure订阅ID
    subscription_id = "your-subscription-id"
    # 创建资源管理客户端
    resource_client = ResourceManagementClient(credential, subscription_id)
    
    # 测试调用:列出当前订阅下的所有资源组
    for rg in resource_client.resource_groups.list():
        print(f"资源组名称: {rg.name}")
    
  • 验证MSI身份的权限配置
    就算MSI能拿到令牌,如果没有对应的Azure资源权限,还是会报错。去Azure门户找到你的VM身份(系统分配或用户分配的),给它分配合适的角色(比如「读者」「参与者」)到你的订阅或目标资源组。

如果还是解决不了,建议把日志级别调到DEBUG,获取更详细的请求日志,再结合完整的Traceback来定位问题:

import logging
logging.basicConfig(level=logging.DEBUG)

内容的提问来源于stack exchange,提问作者explorer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:06:15