You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不共享Azure账户密钥的前提下让他人启停Azure VM?

无需共享Azure账户密钥,让孩子启停VM的几种方案

嘿,这个需求完全能搞定,而且有好几套安全的实现方式,绝对不用把你的账户密钥交出去。我给你梳理几个最实用的选项:

1. Azure RBAC最小权限授权(最推荐的原生方案)

这是Azure官方最提倡的安全做法,核心是只给孩子VM启停的权限,不给任何其他账户权限。步骤很简单:

  • 你登录Azure门户,找到目标VM(或者它所在的资源组)
  • 进入「访问控制(IAM)」页面,点击「添加角色分配」
  • 角色选择「虚拟机启动/停止参与者」(这个权限比「虚拟机参与者」更窄,刚好满足启停需求,更安全)
  • 成员选择孩子的Azure AD账户——如果他没有,你可以在Azure AD里给他创建一个免费的用户账户
  • 完成分配后,孩子用自己的账户登录Azure门户网页版(Surface RT的Edge浏览器完全支持),或者安装Azure的UWP应用,就能直接找到目标VM,点击启动/停止按钮,全程不用碰你的密钥

这个方案的好处是完全依托Azure的原生安全体系,不用写任何代码,维护成本极低。

2. 用Azure Functions搭建轻量API(适合HTTP请求操作)

如果孩子更喜欢用简单的HTTP请求来操作,不用登录门户,Azure Functions是比自己搭.NET站点更省心的选择:

  • 你在Azure里创建一个Function App,选HTTP触发类型
  • 给这个Function App启用系统分配的Managed Identity,然后用RBAC给这个Identity授予VM的启停权限(和上面步骤一样)
  • 在函数里写几行代码调用Azure管理SDK,实现启停逻辑——不用硬编码任何密钥,Managed Identity会自动处理身份验证
  • 最后把函数的HTTP地址和函数密钥(Azure Functions自带的)给孩子,他可以用Edge浏览器直接访问(比如https://<你的函数名>.azurewebsites.net/api/VMControl?action=start&code=<函数密钥>),或者用简单的HTTP工具发送请求

给你个简单的C#函数示例:

using Azure.ResourceManager.Compute;
using Azure.ResourceManager;
using Azure.Identity;
using Microsoft.AspNetCore.Mvc;

public static async Task<IActionResult> Run(
    HttpRequest req,
    ILogger log)
{
    log.LogInformation("VM control request received");

    // 替换成你的VM资源ID
    var vmResourceId = "/subscriptions/你的订阅ID/resourceGroups/资源组名/providers/Microsoft.Compute/virtualMachines/VM名称";
    var action = req.Query["action"].ToString().ToLower();

    var armClient = new ArmClient(new DefaultAzureCredential());
    var vmResource = armClient.GetVirtualMachineResource(new ResourceIdentifier(vmResourceId));

    switch (action)
    {
        case "start":
            await vmResource.StartAsync(WaitUntil.Completed);
            return new OkObjectResult("VM启动成功");
        case "stop":
            await vmResource.StopAsync(WaitUntil.Completed);
            return new OkObjectResult("VM停止成功");
        default:
            return new BadRequestObjectResult("无效操作,请使用 'start' 或 'stop'");
    }
}

3. 自行部署.NET站点(按需选择)

如果一定要自己搭.NET站点,逻辑和Azure Functions类似:

  • 建一个ASP.NET Core Web App,部署到Azure App Service(或者其他托管平台)
  • 给App Service启用系统分配的Managed Identity,同样通过RBAC授予VM启停权限
  • 在控制器里编写Action方法,调用Azure管理SDK实现启停逻辑
  • 给站点加简单的身份验证(比如用户名密码,或者Azure AD登录),确保只有孩子能访问
  • 孩子访问站点上的按钮,或者发送HTTP请求来操作VM

这个方案的缺点是需要自己维护站点,不如Azure Functions省心,所以优先推荐前两个方案。


内容的提问来源于stack exchange,提问作者Sherman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:57:36