模块 'azure.common.credentials' 没有属性 'signed_session'

module 'azure.common.credentials' has no attribute 'signed_session'

我需要帮助来理解我从 Python.

的 Azure SDK 获得的异常

所以我尝试使用以下代码从 Azure 获取 public 个 IP 列表:

import azure.common.credentials as creds
from azure.mgmt.subscription import SubscriptionClient
from azure.mgmt.network.v2019_02_01 import NetworkManagementClient

credentials = creds.get_azure_cli_credentials(resource=None, with_tenant=False)[0]
sub_client = SubscriptionClient(credentials)
subs = [sub.as_dict() for sub in sub_client.subscriptions.list()]

for s in subs:
  sub_id = s['id'][15:]
  network_client = NetworkManagementClient(creds, sub_id)
  pub_ips = network_client.public_ip_addresses.list_all()
  print("done")
  for ip in pub_ips:
    print(ip.ip_address)

这是输出:

Traceback (most recent call last):
done
  File "/Users/user/repo/azure_public_ip.py", line 18, in <module>
    for ip in pub_ips:
  File "/usr/local/lib/python3.7/site-packages/msrest/paging.py", line 143, in __next__
    self.advance_page()
  File "/usr/local/lib/python3.7/site-packages/msrest/paging.py", line 129, in advance_page
    self._response = self._get_next(self.next_link)
  File "/usr/local/lib/python3.7/site-packages/azure/mgmt/network/v2019_02_01/operations/public_ip_addresses_operations.py", line 445, in internal_paging
    response = self._client.send(request, stream=False, **operation_config)
  File "/usr/local/lib/python3.7/site-packages/msrest/service_client.py", line 336, in send
    pipeline_response = self.config.pipeline.run(request, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/msrest/pipeline/__init__.py", line 197, in run
    return first_node.send(pipeline_request, **kwargs)  # type: ignore
  File "/usr/local/lib/python3.7/site-packages/msrest/pipeline/__init__.py", line 150, in send
    response = self.next.send(request, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/msrest/pipeline/requests.py", line 65, in send
    self._creds.signed_session(session)
AttributeError: module 'azure.common.credentials' has no attribute 'signed_session'

如您所见,打印了 "done" 消息,因此在我尝试遍历 public IP 列表之前不会发生异常。我对这个错误感到困惑,因为它听起来好像凭据有问题。但是如果请求public个ip列表没有异常,怎么会这样呢?如果我删除最后两行,也不例外。

这一行:

network_client = NetworkManagementClient(creds, sub_id)

应该是

network_client = NetworkManagementClient(credentials, sub_id)

现在您正在传递您在第 1 行导入的模块