问题描述
基于 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_secret= scope=https://management.chinacloudapi.cn/.default
成功后返回:
{ "access_token":"xxxxxxxxxxxxx" }
后续所有 ARM API 请求均使用该 Token。
场景二:获取Azure VM列表
调用 Azure Resource Manager API:
Header:
Authorization: Bearer
返回结果:
{ "value":[ { "id":"...", "name":"vm01", "location":"chinaeast" } ] }
通过此接口即可获取订阅下所有 VM 的基础属性信息。
场景三:获取 VM 公网与私网 IP
获取 VM 信息后,可以从返回结果中找到 NIC 资源:
"networkProfile": { "networkInterfaces": [ { "id": "/subscriptions/.../networkInterfaces/nic01" } ] }
记录 Network Interface ID。
随后调用:
返回结果中的关键字段:
私网 IP:
properties.ipConfigurations[].properties.privateIPAddress
公网 IP:
properties.ipConfigurations[].properties.publicIPAddress.id
通过该方式即可获取 VM 的网络地址信息。
场景四:获取 VM 操作系统详细版本
基础 VM 查询接口可扩展获取镜像信息:
重点关注:
"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 中注册应用程序 :https://docs.azure.cn/zh-cn/entra/identity-platform/quickstart-register-app
正在加载评论...