Azure Government环境获取Azure VM数据报SubscriptionNotFound错误如何解决
问题核心原因
你仅给DefaultAzureCredential指定了Azure Government的认证 authority,但是ComputeManagementClient默认使用Azure公有云的资源管理端点,请求被发送到公有云环境,自然找不到政府云租户下的订阅。
解决方案
1. 修改ComputeManagementClient初始化配置,适配政府云端点
实例化ComputeManagementClient时主动指定Azure Government的资源管理端点base_url,修改后的函数代码如下:
""" Instantiate the ComputeManagementClient with the appropriate credentials. @return ComputeManagementClient object """ def get_access_to_virtual_machine(): subscription_id = key.SUBSCRIPTION_ID credentials = DefaultAzureCredential(authority = AzureAuthorityHosts.AZURE_GOVERNMENT, exclude_environment_credential = True, exclude_managed_identity_credential = True, exclude_shared_token_cache_credential = True) client = KeyClient(vault_url = key.VAULT_URL, credential = credentials) # 新增base_url参数指定政府云管理端点 compute_client = ComputeManagementClient( credential=credentials, subscription_id=subscription_id, base_url="https://management.usgovcloudapi.net/" ) return compute_client
2. 校验基础配置
- 确认
key.SUBSCRIPTION_ID填写的是Azure Government租户下的有效订阅ID,不要误用公有云订阅ID - 确认当前凭据对应的身份(本地开发对应Azure CLI登录的账号、部署后对应托管身份/服务主体)已被加入该政府云订阅的IAM权限列表,至少拥有虚拟机读取权限
- 本地开发测试前需要先把Azure CLI切换到政府云环境,执行命令:
az cloud set --name AzureUSGovernment
再执行az login登录政府云账号,否则DefaultAzureCredential会获取到公有云的身份凭证,导致权限验证失败。
3. 可选:升级SDK稳定版
你当前使用的azure-mgmt-compute==17.0.0b1是较老的预览版本,对政府云的适配存在已知问题。如果修改端点后仍报错,可以卸载预览版安装稳定版:
pip uninstall azure-mgmt-compute -y pip install azure-mgmt-compute>=28.0.0
配置验证
修改完成后可以先加一段代码验证订阅访问是否正常:
compute_client = get_access_to_virtual_machine() for sub in compute_client.subscriptions.list(): print(f"订阅ID:{sub.subscription_id},订阅名称:{sub.display_name}")
如果打印结果包含你要使用的订阅ID,说明配置正常,再调用虚拟机查询接口即可。
内容的提问来源于stack exchange,提问作者greendaysbomb
相关产品推荐
相关产品推荐

