问题描述
在运行 Chaos Toolkit Azure 相关 Playbook 时,我收到错误消息“失败:AttributeError:'ServicePrincipalCredentials' 对象没有属性 'get_token”,尽管我已经传入了正确的 Secret ID、租户 ID、客户端 ID、订阅 ID和客户端机密 ID.. 甚至订阅对服务主体具有完全权限。
解决方法
简短回答:检查您尝试运行的确切代码会有所帮助,但是从提到的错误来看,您似乎正在尝试在较旧的库中使用较新的库方法。使用基于 azure.core
的较新 SDK 库时,请使用 ClientSecretCredential
库中的 azure.identity
对象。使用旧版 SDK 库时,请使用 ServicePrincipalCredentials
库中的 azure.common
。
长答案: 适用于 Python 的 Azure 库目前正在更新,以共享常见的云模式,例如身份验证协议、日志记录、跟踪、传输协议、缓冲响应和重试。
在较新版本中,身份验证机制已重新设计并替换为 azure-identity
库,以便为所有 Azure SDK 提供基于 Azure Identity 的统一身份验证。运行 pip install azure-identity
以获取包。
因此,不要使用 ServicePrincipalCredentials
库中的 azure.common
类,而是改为使用 ClientSecretCredential
,如下所示:
from azure.identity import ClientSecretCredential
from azure.mgmt.compute import ComputeManagementClient
credential = ClientSecretCredential(
tenant_id='xxxxx',client_id='xxxxx',client_secret='xxxxx'
)
这是另一个具有详细解决方案的相关主题:Azure Python SDK: 'ServicePrincipalCredentials' object has no attribute 'get_token'
其他参考: