【Azure Developer】通过 API 获取 Azure VM 信息实践指南 Part 1(Azure China)

简介: 本文介绍如何在Azure中国(21Vianet)环境中,通过Service Principal安全认证,调用ARM REST API实现VM资产统一管理:包括获取Token、列举VM、提取公网/私网IP及操作系统详细版本信息,满足只读、自动化、标准化JSON输出要求。

问题描述

基于 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 中注册应用程序 : https://docs.azure.cn/zh-cn/entra/identity-platform/quickstart-register-app

 

 


 

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

相关文章
|
3月前
|
人工智能 自然语言处理 API
【Azure AI Search】Index的字段使用默认Analyzer(standard.lucene) 和 en.microsoft 有什么不同?
Azure AI Search英文检索因词形差异(如brief/briefs)无法匹配,根源在于analyzer选择:默认standard.lucene不处理词形还原,而en.microsoft支持lemmatization,可将变体还原为基本形式。需通过新增字段并配置en.microsoft analyzer解决,兼顾检索质量与业务需求。
326 124
|
3月前
|
人工智能 自然语言处理 API
【Azure AI Search】 stopword 是什么,为什么它会影响搜索结果?
本文解析 Azure AI Search 中搜索 &quot;in brief&quot; 返回结果过多的问题,指出根源在于 analyzer 对停用词(如 &quot;in&quot;)的处理差异:默认 `standard.lucene` 保留停用词导致泛匹配,而 `en.microsoft` 会过滤停用词,使结果更精准。关键在于根据业务语义选择合适 analyzer。
259 121
|
18天前
|
人工智能 安全 IDE
阿里云Qoder CN产品介绍:Qoder CN是什么、适用场景、产品价格及最新活动
本文是阿里云Qoder CN 2026年最新产品活动全解析,这款定位"AI编程搭子"的智能编程工具,主打自主编程、深度集成、安全可控三大核心能力,覆盖从个人开发到企业级协同的全场景需求。活动推出Night Qoder夜间专属折扣,22:00-次日8点指定模型最低2折起,同步上线免费体验版、个人版、Teams版等多档订阅方案,叠加新用户注册赠调用次数等福利,帮助开发者低成本获得端到端智能编程能力。
|
5月前
|
人工智能 监控 网络协议
【App Service】常规排查 App Service 启动 Application Insights 无数据的步骤 (.NET版本)
本文详解Application Insights在Azure App Service中无日志数据的三大原因及排查方法:1)网络连通性(验证到AI端点的443端口访问);2)w3wp.exe进程是否成功加载AI模块;3)DLL冲突(检查并移除重复的Microsoft.ApplicationInsights等组件)。
254 10
|
5月前
|
NoSQL 网络协议 Cloud Native
【Azure Redis】云原生环境下的 Redis 超时之谜:为什么 15 分钟后应用才恢复?
云原生中Redis短暂不可用后应用持续超时15分钟?问题不在Redis,而在Linux TCP默认重传机制(tcp_retries2=15)与长连接模型的错位。需三管齐下:调低内核重传次数、客户端显式配置超时与自动重连、应用层引入断路器与弹性重试。
345 20
|
5月前
|
网络协议 虚拟化 Docker
【Azure Developer】.NET Aspire 启动报错:listen tcp bind: An attempt was made to access a socket in a way forbidden by its access permissions
.NET Aspire在Windows启动时因Hyper-V端口保留机制,导致DCP代理无法绑定53209等端口(报错“访问被拒绝”)。虽端口未被占用,但已被系统保留。推荐方案:修改launchSettings.json,将服务端口改为7xxx等安全范围;或临时重启winnat服务、永久排除指定端口。
642 21
|
5月前
|
前端开发 应用服务中间件 Linux
【Azure App Service】PHP页面上传文件413错误的解决方案
在使用 Azure App Service(Linux + PHP) 部署 Web 应用时,如果上传文件大于1MB,就会遇到 HTTP 413(Request Entity Too Large) 错误。 # 问题解答 ### 一、HTTP 413 错误的本质含义 413 Request Entity Too Large 是标准 HTTP 状态码,表示: > 客户端提交的请求体(Request Body)大小超过了服务器当前允许的最大限制。 在 Azure App Service(Linux)环境中,这个错误并不一定来自前端网关(Frontend),而更常见的来源是 App...
1609 13
|
11月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
713 6
|
3月前
|
数据采集 监控 网络协议
STM32 + MODBUS RTU + RS485 实现方案
STM32 + MODBUS RTU + RS485 实现方案
|
6月前
|
存储 弹性计算 运维
阿里云服务器2核4G、4核8G、8核16G租用价格:2026最新收费标准活动价格参考
2026年阿里云为2核4G、4核8G、8核16G三种配置提供了多样化实例规格与特惠活动。2核4G配置轻量应用服务器和云服务器特价199元/年,适合轻量应用;4核8G配置u2i实例1252.63元/年起,满足中型应用需求;8核16G配置活动价5958.52元/年起,适合高性能计算。用户可根据性能、预算和业务特性选择实例,并通过领取优惠券进一步降低成本。阿里云提供从“普惠级”到“企业级”的丰富选择,满足不同业务需求。
1372 16