允许用户启动/停止特定的Azure VM

时间:2014-05-15 02:13:44

标签: azure

我们的销售团队将使用Azure VM进行销售演示。我希望能够让某些人能够随意启动/停止自己的VM。我已经看到能够在管理门户中添加人员作为管理员,但这似乎可以让他们访问我们的整个订阅。我希望能够在不让每个人都创建自己的订阅的情况下管理它。

示例场景:

人员A能够启动/停止人员A的专用虚拟机。

B人能够启动/停止Person B的专用VM。 等

5 个答案:

答案 0 :(得分:9)

为了允许用户启动和停止虚拟机,您需要使用正确的权限创建自定义role

在这个答案中,我将列出要使用azure command line interface获得此结果的步骤。您可以使用Power ShellAzure Rest Api执行相同操作(在linkPower Shell处找到有关Azure Rest Api使用的命令的详细信息。在此link)。

  • 使用以下内容创建一个JSON文件(我们将其命名为newRole.json):

    {
      "Name": "Virtual Machine Operator",
      "IsCustom": true,
      "Description": "Can deallocate, start  and restart virtual machines.",
      "Actions": [
        "Microsoft.Compute/*/read",
        "Microsoft.Compute/virtualMachines/start/action",
        "Microsoft.Compute/virtualMachines/restart/action",
        "Microsoft.Compute/virtualMachines/deallocate/action"
      ],
      "NotActions": [

], "AssignableScopes": [ "/subscriptions/11111111-1111-1111-1111-111111111111" ] }

  • JSON文件的每个字段的简短说明:

    • Name:新角色的名称。这是将在天蓝色门户网站
    • 中显示的名称
    • Is Custom:指定它是用户定义的角色
    • Description:角色的简短说明,也在天蓝色门户网站上显示
    • Actions:与此角色关联的用户可以执行的操作列表。每条线分别允许用户:
      • 查看虚拟机列表(并非所有虚拟机,我们稍后会看到如何指定每个用户可以看到哪个VM)
      • 启动列表
      • 中的虚拟机之一
      • 在列表中的虚拟机中重新启动其中一个虚拟机
      • 在列表中的虚拟机中释放其中一个虚拟机
    • No Actions:与此角色关联的用户无法执行的操作列表。在这种情况下,列表为空,通常它必须是前一个字段的子集。
    • AssignableScopes:必须添加角色的订阅集。每个代码都以/subscription/字符串为前缀。您可以通过访问订阅菜单(由此图标标识)

      来查找订阅代码

      enter image description here

      并复制SUBSCRIPTION ID

    • 下的值
  • 使用azure cli执行命令az login登录您的azure帐户。有关如何安装azure cli并分别执行登录过程的更多信息herehere
  • 创建执行命令az role definition create --role-definition newRole.json
  • 的新角色
  • 访问门户网站并选择必须由您选择的用户启动和关闭的虚拟机
  • 选择机器后,选择Access control (Iam)

    enter image description here

  • 从新刀片中选择Add

  • 填写以下字段:
    • Role:在我们的案例Virtual Machine Operator
    • 中选择您刚刚创建的角色
    • Assign access toAzure AD user, group, or application
    • Select:与需要启动/重新启动/停止VM的帐户关联的电子邮件
  • 按保存

在用户访问门户网站的此操作之后,她将在虚拟机列表中看到所选的VM。如果她选择虚拟机,她将能够启动/重启/停止它。

答案 1 :(得分:1)

目前这是不可能的。虽然通过一些编程可以实现。您在Azure门户上看到的内容可以通过Azure Service Management API实现。您可以做的是编写一个使用此API的应用程序,然后您可以定义所有规则。

如果您认为您的销售人员不会陷入困境,您可以做的另一件事是使用Azure PowerShell Cmdlets创建一些自定义PowerShell脚本,他们只需执行这些脚本即可启动/停止VM。

答案 2 :(得分:0)

我的建议是构建自己的façade,利用Azure Management API为您执行这些任务。这允许您围绕访问/授权设置自己的控件,并使其跨越多个订阅(如果这证明是必要的话)。此外观可能会托管在免费的Azure网站中。

答案 3 :(得分:0)

在portal.azure.com中打开您的VM 导航到Access control (IAM)Role Assignments,然后单击“添加角色分配”。

选择标准角色虚拟机贡献者

默认情况下分配访问权限(Azure AD用户,组...),

选择字段中输入新的受限用户的电子邮件,然后选择来宾。

保存。

仅此而已。 enter image description here

答案 4 :(得分:0)

我创建了一个自定义角色来允许这样做。我已经测试过了,它有效。 您必须从“虚拟机用户登录”角色开始,然后添加其他权限。这当然也给予用户日志权限,但我假设如果您允许他们启动和停止 VM,那么您也希望他们能够登录。

通过图形用户界面:

 1. Add Custom Role
 2. Select "Clone a role" and role to close is "Virtual Machine User Login"
 3. Click Next
 4. Select add permissions
 5. Scroll  down to "Microsoft.Compute.VirtualMachines" and tick
Microsoft.Compute/virtualMachines/start/action"
"Microsoft.Compute/virtualMachines/powerOff/action"
"Microsoft.Compute/virtualMachines/deallocate/action"
 6. Click Next, select subscription, Next, Next then "Create".
 7. List item

角色的所有权限:

  • 操作 Microsoft.Network/publicIPAddresses/read
  • 操作 Microsoft.Network/virtualNetworks/read
  • 操作 Microsoft.Network/virtualNetworks/read
  • 操作 Microsoft.Network/loadBalancers/read
  • 操作 Microsoft.Network/networkInterfaces/read
  • 操作 Microsoft.Compute/virtualMachines/*/read
  • 操作 Microsoft.Compute/virtualMachines/start/action
  • 操作 Microsoft.Compute/virtualMachines/powerOff/action
  • 操作 Microsoft.Compute/virtualMachines/deallocate/action
  • DataAction Microsoft.Compute/virtualMachines/login/action

这是 JSON:

{ "properties": { "roleName": "VM_Operator_test", "description": "", "assignableScopes": [ "/subscriptions/exampesubscription/EXAMPLE_RG" ], "permissions": [ { "actions": [ "Microsoft.Network/publicIPAddresses/read", "Microsoft.Network/virtualNetworks/read", "Microsoft.Network/loadBalancers/read", "Microsoft.Network/networkInterfaces/read", "Microsoft.Compute/virtualMachines/*/read", "Microsoft.Compute/virtualMachines/start/action", "Microsoft.Compute/virtualMachines/powerOff/action", "Microsoft.Compute/virtualMachines/deallocate/action" ], "notActions": [], "dataActions": [ "Microsoft.Compute/virtualMachines/login/action" ], "notDataActions": [] } ] }}