azure - 如何为 “Virtual Machine operator” 添加自定义角色以设置自动关闭

标签 azure

我想在 Azure 中创建自定义角色,以允许“虚拟机运算符(operator)”设置自动关闭时间。

我尝试使用 JSON 创建自定义角色,但不知道“自动关闭”的操作是什么

 {
  "Name": "Virtual Machine Operator 2",
  "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",
"Microsoft.Compute/Auto-shutdown/*"
  ],
  "NotActions": [


  ],
  "AssignableScopes": [
    "/subscriptions/8c18015f-f6be-403d-905d-5cdfcb1f1c1d"
  ]
}

上面 JSON 中的行不正确 “Microsoft.Compute/自动关闭/*”

最佳答案

如果为虚拟机启用自动关闭,Azure将在虚拟机所在的资源组中创建一个资源类型为Microsoft.DevTestLab/schedules的资源。您可以在资源组中查看它(选择显示隐藏类型选项)。

enter image description here

因此,如果您想设置自动关闭时间,则需要Microsoft.DevTestLab/schedules/*权限(可能是Microsoft.DevTestLab/schedules/write 是最低权限,我刚刚测试了 Microsoft.DevTestLab/schedules/*)。

同时,当我们设置Microsoft.DevTestLab/schedules时,我们实际上也设置了VM(资源链接到VM范围),所以我们还需要Microsoft.Compute/virtualMachines/write 权限,否则会出现错误。

结论,自定义角色 .json 文件应如下所示。

 {
  "Name": "Virtual Machine Operator 2",
  "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",
    "Microsoft.DevTestLab/schedules/*",
    "Microsoft.Compute/virtualMachines/write"
  ],
  "NotActions": [


  ],
  "AssignableScopes": [
    "/subscriptions/xxxxxxxxxxxxxxxx"
  ]
}
<小时/>

此外,我测试了自定义角色以在 powershell 中使用服务主体上下文设置自动关闭 设置,它在我这边运行良好,您也可以尝试一下。

$resourcegroup = "<resource group name>"
$vm = "<VM Name>"
$shutdown_time = "1900"
$shutdown_timezone = "China Standard Time"

$properties = @{
    "status" = "Enabled";
    "taskType" = "ComputeVmShutdownTask";
    "dailyRecurrence" = @{"time" = $shutdown_time };
    "timeZoneId" = $shutdown_timezone;
    "notificationSettings" = @{
        "status" = "Disabled";
        "timeInMinutes" = 30
    }
    "targetResourceId" = (Get-AzVM -ResourceGroupName $resourcegroup -Name $vm).Id
}

Set-AzResource -ResourceId ("/subscriptions/{0}/resourceGroups/{1}/providers/microsoft.devtestlab/schedules/shutdown-computevm-{2}" -f (Get-AzContext).Subscription.Id, $resourcegroup, $vm) -Properties $properties -Force

关于azure - 如何为 “Virtual Machine operator” 添加自定义角色以设置自动关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57263562/

相关文章:

javascript - 当 Azure 搜索查询包含撇号时,会导致错误响应 400

c# - 防止某些字段被 .NET Azure Web Api 中的 PATCH 覆盖

.net命令列表包--在azure管道中格式化json

azure - 在 ADF 管道中使用通配 rune 件名从容器复制特定文件

azure - `docker context create aci` `--location` 参数似乎没有效果

基于 Azure AD 角色的身份验证 : where do I create the Roles in WebApp/API Application?

azure - 按计划从 VS2013 部署 Azure webjob

Azure DevOps Pipeline - 将文件推送到一个作业中的存储库并在另一作业中检索它

mongodb - 无法在 azure 容器实例中将 azure 文件共享装载为 mongodb 卷

Azure VPN 客户端错误 : Failure in acquiring AAD Token: Keyset does not exist