我已经尝试使用 AzureCliCredential(),如前面的问题/文档中所述 - 这在普通的 azure 云中效果很好。如果我使用 USGov 云 (portal.azure.us),相同的代码不会返回任何内容;我尝试过http跟踪,看起来它仍然指向management.azure.com而不是management.core.usgovcloudapi.net - 但它没有说什么。几乎所有需要订阅范围的内容都告诉我订阅不存在,但“az 帐户列表”正确显示了所有订阅。我已经将所有 python 模块更新到最新版本..不确定目前出了什么问题,有什么想法吗?
总结一下,程序是:
- 使用
az login --use-device-code
登录 - 访问 microsoft.com/deviceloginus(usgov 设备登录)并输入代码
- shell 已通过身份验证
az 帐户列表
显示我的所有订阅- 运行测试代码以列出订阅 - 没有得到任何结果。跟踪显示,如果我强制将 base_url 设置为 https://management.usgovcloudapi.net,事情仍然指向 management.azure.com。 ,我收到
InvalidAuthenticationTokenAudience
异常。
我正在使用的代码:
import logging
from azure.identity import AzureCliCredential
from azure.mgmt.subscription import SubscriptionClient
credential = AzureCliCredential()
client = SubscriptionClient(credential=credential, logging_enable=True, base_url="https://management.usgovcloudapi.net/")
logging.basicConfig(filename='test_sub_debug.log', level=logging.DEBUG)
aba_logger = logging.getLogger('azure.mgmt.subscription')
aba_logger.setLevel(logging.DEBUG)
sub_list = client.subscriptions.list()
for subscription in sub_list:
print(subscription)
# (obviously remove the base_url= parameter for the default behavior)
最佳答案
我能够使其正常工作,但当我注销 AZ CLI 时,它仍然能够进行身份验证,因此我无法确定它是否使用相同的凭据。这是包含更多详细信息的文章:https://learn.microsoft.com/en-us/azure/developer/python/azure-sdk-sovereign-domain
import os
from msrestazure.azure_cloud import AZURE_US_GOV_CLOUD as CLOUD
from azure.mgmt.resource import SubscriptionClient
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential(authority=CLOUD.endpoints.active_directory)
subscription_client = SubscriptionClient(
credential,
base_url=CLOUD.endpoints.resource_manager,
credential_scopes=[CLOUD.endpoints.resource_manager + "/.default"])
sub_list = subscription_client.subscriptions.list()
for subscription in sub_list:
print(subscription)
关于Azure Python SDK - 使用 CLI 凭据连接到 USGov 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71772443/