问题描述

基于 Azure China (21Vianet) 环境,实现对订阅下云服务器(Virtual Machine)的统一资产管理能力。具体要求如下:

  • 通过 RESTful API 获取订阅下所有 VM 信息;
  • 返回标准 JSON 格式数据;
  • 支持自动化集成;
  • 采用只读、安全、可控的访问方式;
    • 能够进一步获取 VM 的操作系统、运行状态、CPU、内存、IP 地址以及删除记录等信息。

 本文为第一部分 将包含获取如何获取认证Token, VM列表,VM公网/私网IP以及VM操作系统信息

问题解答

场景一:如何安全获取访问VM API的认证Token

为了避免使用个人账号访问 Azure 资源,推荐采用 Service Principal(服务主体)方式进行身份认证。

Step 1:创建 Entra ID 应用

在 Microsoft Entra ID 中注册应用程序,并记录以下信息:

  • Tenant ID
  • Client ID
  • Client Secret

认证时将使用这些参数获取访问令牌。

Step 2:为应用授予只读权限

由于客户需要读取整个订阅下的资源信息,因此需要:

  • 进入 Azure Subscription
  • 打开 IAM(Access Control)
  • 添加 Role Assignment
  • 赋予应用 Reader 角色

这样应用即可读取资源信息,但无法修改任何资源,实现最小权限访问原则。

Step 3:获取 Access Token

调用 OAuth2 Client Credential Flow:

POST https://login.partner.microsoftonline.cn/{Tenant_ID}/oauth2/v2.0/token

请求参数:

grant_type=client_credentials
client_id={Client_ID}
client_secret={Client_Secret}
scope=https://management.chinacloudapi.cn/.default

成功后返回:

{
  "access_token":"xxxxxxxxxxxxx"
}

后续所有 ARM API 请求均使用该 Token。

场景二:获取Azure VM列表

调用 Azure Resource Manager API:

GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines?api-version=2025-11-01

Header:

Authorization: Bearer <Access Token>

返回结果:

{
  "value":[
      {
          "id":"...",
          "name":"vm01",
          "location":"chinaeast"
      }
  ]
}

通过此接口即可获取订阅下所有 VM 的基础属性信息。

场景三:获取 VM 公网与私网 IP

获取 VM 信息后,可以从返回结果中找到 NIC 资源:

"networkProfile": {
  "networkInterfaces": [
     {
       "id": "/subscriptions/.../networkInterfaces/nic01"
     }
  ]
}

记录 Network Interface ID。  

随后调用:

GET https://management.chinacloudapi.cn/{networkInterfaceId}?api-version=2025-05-01&$expand=ipConfigurations/publicIPAddress

返回结果中的关键字段:

私网 IP:

properties.ipConfigurations[].properties.privateIPAddress

公网 IP:

properties.ipConfigurations[].properties.publicIPAddress.id

通过该方式即可获取 VM 的网络地址信息。

场景四:获取 VM 操作系统详细版本

基础 VM 查询接口可扩展获取镜像信息:

GET https://management.chinacloudapi.cn/subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.Compute/virtualMachines/{vmName}?api-version=2023-09-01

重点关注:

"storageProfile": {
  "imageReference": {
      "publisher": "canonical",
      "offer": "ubuntu-24_04-lts",
      "sku": "server",
      "version": "latest",
      "exactVersion": "24.04.202512181"
  }
}

以及:

"osDisk": {
    "osType": "Linux"
}

可用于识别:

  • Linux / Windows
  • 镜像发行版本
  • 精确镜像版本号

实现资产管理中的操作系统盘点。  

参考资料

在 Microsoft Entra ID 中注册应用程序 : 如何在 Microsoft Entra ID 中注册应用” | Azure Docs


当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐