azure

事实上,微软Azure并没有一个所谓的“API拜访凭证”的概念,咱们须要通过它的“Active Directory”中的应用程序Client信息来进行API的拜访。而且相较其它云厂商而言,微软Azure的API拜访凭证略显简单,且须要通过多个步骤获取,它由订阅(Subscription)ID、租户(Tenant)ID、Client ID和Client Secret四个局部形成。
获取微软Azure的订阅(Subscription)ID

每个Azure用户在应用时都会接触到订阅的概念。您在购买Azure产品之前,必须先创立一个订阅,而后须要在这个订阅下购买云资源,云资源不能跨订阅拜访。因而,当您存在多个订阅时,请您确保输出的订阅ID是您须要导入的云资源所属订阅,否则可能会呈现无奈列出云资源的状况。

登录Azure控制台,在左侧菜单栏抉择“老本治理+计费”(菜单程序可自定义调整,截图仅供示意)。

在概述中,找到您要导入的云资源所属订阅,获取订阅ID。如果您有多个订阅,都心愿通过安恒云来治理,那么请在安恒云中创立多个云账户分批导入。

获取微软Azure的租户(Tenant)ID

租户是Active Directory中的一个概念,示意组织;租户蕴含组织中的用户以及用户的相干信息(如明码、用户配置文件数据、权限等)。

(1)在Azure控制台的左侧菜单栏中抉择“Azure Active Directory”。

在“Azure Active Directory”的属性页面,能够看到“租户ID”,该ID即为Azure的租户(Tenant)ID。

获取微软Azure的Client信息

所谓Client信息,即Active Directory中应用程序的API访问信息,包含Client ID和Client Secret两局部。

(1)在Azure Active Directory中,点击<利用注册>,将会列呈现有的所有应用程序,建议您新建一个专门的应用程序供安恒云调用API。点击<新注册>。

(2)在注册应用程序页面,输出以下信息后点击<注册>。

名称:xxxxxxxx(不能用中文)

受反对的账户类型:倡议抉择“任何组织目录”

重定向URI:填写https://xxxxxxxx

(3)注册实现后如下图所示,该应用程序(客户端)ID即是Client ID

(4)点击刚注册的利用“xxxx”的<证书和明码>,点击<新客户端明码>,阐明填写“安恒云API拜访”,截止期限抉择“从不”,而后点击<增加>即可。

应用程序资源受权
(1)取得Client信息后,还须要将应用程序在资源上进行受权:在左侧菜单栏抉择“资源组”。

(2)查看资源列表,抉择您心愿导入到安恒云的资源组,进入后点击<访问控制(标识和拜访治理)>子菜单,在授予对此资源的拜访权限区域点击<增加角色调配>

3)在增加角色调配区域,角色抉择“所有者”,将拜访权限调配到抉择默认的“用户、组或服务主体”,抉择文本框中输出后面创立的管理员账号关键字,选中后能够看到上面所选成员中存在该账号,点击<保留>。

(4)此时在访问控制(标识和拜访治理)的角色调配页签下,在所有者中即减少了您创立的管理员账号。尔后您便能够应用该账号创立的Client信息作为API拜访凭证,将资源导入到xx

Code

from azure.identity import ClientSecretCredentialfrom azure.mgmt.resource import ResourceManagementClientfrom azure.mgmt.network import NetworkManagementClientfrom azure.mgmt.compute import ComputeManagementClientSubscription_Id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Tenant_Id = "axxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Client_Id = "7exxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Secret = "wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"GROUP_NAME = 'Cxx'AZRUE_URL = 'https://management.chinacloudapi.cn'credentials = ClientSecretCredential(    tenant_id=Tenant_Id,    client_id=Client_Id,    client_secret=Secret)resource_client = ResourceManagementClient(credential=credentials, subscription_id=Subscription_Id, base_url=AZRUE_URL,                                           credential_scopes=["https://management.chinacloudapi.cn/.default"])compute_client = ComputeManagementClient(credential=credentials, subscription_id=Subscription_Id, base_url=AZRUE_URL,                                         credential_scopes=["https://management.chinacloudapi.cn/.default"])network_client = NetworkManagementClient(credential=credentials, subscription_id=Subscription_Id, base_url=AZRUE_URL,                                         credential_scopes=["https://management.chinacloudapi.cn/.default"])### 获取 虚拟机名字列表vm_list = compute_client.virtual_machines.list(GROUP_NAME)vm_name_list = []i = 0for vm in vm_list:    array = vm.id.split("/")    resource_group = array[4]    vm_name = array[-1]    statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses    status = len(statuses) >= 2 and statuses[1]    vm_name_list.append(vm_name)print(vm_name_list)vm_info_list = []for i in vm_name_list:    virtual_machine = compute_client.virtual_machines.get(GROUP_NAME, i)    vm_dict = dict()    vm_dict['name'] = virtual_machine.name    vm_dict['os_type'] = virtual_machine.storage_profile.os_disk.os_type    vm_dict['vmSize'] = virtual_machine.hardware_profile.vm_size    vm_dict['disk_size'] = virtual_machine.storage_profile.os_disk.disk_size_gb    vm_dict['data_disks'] = []    vm_dict['ip'] = []    try:        vm_dict['image_reference'] = dict(exact_version=virtual_machine.storage_profile.image_reference.exact_version, sku=virtual_machine.storage_profile.image_reference.offer)    except Exception as e:        vm_dict['image_reference'] = 'null'    for item in virtual_machine.storage_profile.data_disks:        vm_dict['data_disks'].append(dict(lun=item.lun, name=item.name, disk_size_gb=item.disk_size_gb))    for item in virtual_machine.network_profile.network_interfaces:        network_interface_name = item.id.split('/')[-1]        a = network_client.network_interfaces.get(GROUP_NAME, network_interface_name)        for ip in a.ip_configurations:            vm_dict['ip'].append(ip.private_ip_address)    print(vm_dict)    vm_info_list.append(vm_dict)print(vm_info_list)
  • 输入后果:
['Zxxxx6-Server'][ {'name': 'Zxxxxix6-Server', 'os_type': 'Linux', 'vmSize': 'Standard_D4s_v3', 'disk_size': 30, 'data_disks': [], 'ip': ['10.2x.5x.1x'], 'image_reference': {'exact_version': '8.2.2020111800', 'sku': 'CentOS'}}]