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 ClientSecretCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.network import NetworkManagementClient
from azure.mgmt.compute import ComputeManagementClient
Subscription_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 = 0
for 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'}}]