是的。您可以使用 Az PowerShell cmdlet New-AzRoleDefinition 来做到这一点。
请参考第二个例子here。 (修改$subs = '/subscriptions/{subscription_id}/resourceGroups/{resourceGroup_name}/providers/Microsoft.Compute/virtualMachines/{VM_name}')
$role = [Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition]::new()
$role.Name = 'Virtual Machine Operator 2'
$role.Description = 'Can monitor and restart virtual machines.'
$role.IsCustom = $true
$perms = 'Microsoft.Storage/*/read','Microsoft.Network/*/read','Microsoft.Compute/*/read'
$perms += 'Microsoft.Compute/virtualMachines/start/action','Microsoft.Compute/virtualMachines/restart/action'
$perms += 'Microsoft.Authorization/*/read'
$perms += 'Microsoft.ResourceHealth/availabilityStatuses/read'
$perms += 'Microsoft.Resources/subscriptions/resourceGroups/read'
$perms += 'Microsoft.Insights/alertRules/*','Microsoft.Support/*'
$role.Actions = $perms
$role.NotActions = (Get-AzRoleDefinition -Name 'Virtual Machine Contributor').NotActions
$subs = '/subscriptions/{subscription_id}/resourceGroups/{resourceGroup_name}/providers/Microsoft.Compute/virtualMachines/{VM_name}'
$role.AssignableScopes = $subs
New-AzRoleDefinition -Role $role
然后您可以将此自定义角色分配给 Azure 门户 -> 此 VM -> 访问控制 (IAM) 中的用户。
您也可以使用 cmdlet New-AzRoleAssignment 来分配角色。
New-AzRoleAssignment -ObjectId {objectID of the user} -RoleDefinitionName 'Virtual Machine Operator 2' -Scope /subscriptions/{subscription_id}/resourceGroups/{resourceGroup_name}/providers/Microsoft.Compute/virtualMachines/{VM_name}
确保此处-Scope 的值与第一个脚本中的AssignableScopes 相同。
顺便说一句:
事实上,我认为没有必要在角色中附加单个 VM 作为范围的一部分。
当您将角色分配给用户时,您需要将范围指定为上面显示的第二个脚本。您可以创建自定义角色,订阅/资源组中存在的所有 VM 都已附加。分配角色时,您只需将一个特定的 VM 指定为作用域。那么用户只能管理这个虚拟机,不能管理其他虚拟机。