我正在尝试使用 azure-python-sdk 在Azure帐户中列出订阅。
我已经按照文档中的链接进行操作了。
from azure.mgmt.subscription import SubscriptionClient
from msrestazure.azure_active_directory import UserPassCredentials
credentials = UserPassCredentials(username='xxxx', password='xxxx')
sub_client = SubscriptionClient(credentials)
subs = [sub.as_dict() for sub in sub_client.subscriptions.list()]
print(subs)
应该返回订阅列表。 但是,每次尝试上述代码时,我只会看到返回空列表。 有人可以帮忙吗?
答案 0 :(得分:0)
尝试此代码,
def list_subscriptions():
try:
sub_client = get_client_from_cli_profile(SubscriptionClient)
except CLIError:
logger.info("Not logged in, running az login")
_run_az_cli_login()
sub_client = get_client_from_cli_profile(SubscriptionClient)
return [["Subscription_name", "Subscription ID"]] + [
[sub.display_name, sub.subscription_id]
for sub in sub_client.subscriptions.list()
]
您可以从 here
答案 1 :(得分:0)
如果列表为空且您没有例外,则可能是您的凭据正确(无例外),但您的用户无权访问订阅(无权限)
在Azure门户的订阅面板中,您可以使用按钮“访问控制(IAM)”来定义允许哪些用户进行给定订阅。 https://docs.microsoft.com/azure/role-based-access-control/role-assignments-portal
https://docs.microsoft.com/azure/role-based-access-control/rbac-and-directory-admin-roles
(我在SDK团队的MS部门工作)
答案 2 :(得分:0)
我认为我已使用 Azure CLI 解决了该问题。但是,我仍然想知道为什么使用 azure-python-sdk 无法正常工作。
代码如下:
import subprocess
import json
subscriptions = json.loads(subprocess.check_output('az account list', shell=True).decode('utf-8'))
print(subscriptions)
感谢您的回复。
答案 3 :(得分:0)
前几天,我遇到了这个问题,发现我创建的凭据具有错误的权限,即“ https://login.microsoftonline.com/common”,如果我的azure帐户可以是组织或学校帐户,但是对于个人帐户,我必须指定授权网址的承租人,否则默认承租人common
无权访问我的个人帐户的订阅。