你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

向用户授予特定实验室策略的权限

概述

本文说明了如何使用 PowerShell 向用户授予某个特定实验室策略的权限。 这样一来,可基于每个用户的需求应用权限。 例如,你可能想向某个特定用户授予更改 VM 策略设置的权限,但不想授予成本策略权限。

将策略作为资源

正如 Azure 基于角色的访问控制 (Azure RBAC) 一文所述,可通过 Azure RBAC 对 Azure 进行细致的资源访问管理。 使用 Azure RBAC,可以在开发运营团队中进行职责分离,仅向用户授予执行作业所需的访问权限。

在开发测试实验室中,策略是一种资源类型,可启用 Azure RBAC 操作“Microsoft.DevTestLab/labs/policySets/policies/”。 每个实验室策略都是“策略”资源类型中的一种资源,可作为“范围”分配给 Azure 角色。

例如,为了向用户授予对“允许的 VM 大小”策略的读取/写入权限,需要创建一个使用“Microsoft.DevTestLab/labs/policySets/policies/”操作的自定义角色,然后将相应的用户分配给范围“Microsoft.DevTestLab/labs/policySets/policies/AllowedVmSizesInLab”中的此自定义角色。

若要详细了解 Azure RBAC 中的自定义角色,请参阅 Azure 自定义角色

使用 PowerShell 创建实验室自定义角色

若要开始,需要安装 Azure PowerShell

一旦设置了 Azure PowerShell cmdlet,即可执行以下任务:

  • 列出资源提供程序的所有操作
  • 列出特定角色中的操作:
  • 创建自定义角色

下方 PowerShell 脚本举例说明如何了执行这些任务:

# List all the operations/actions for a resource provider.
Get-AzProviderOperation -OperationSearchString "Microsoft.DevTestLab/*"

# List actions in a particular role.
(Get-AzRoleDefinition "DevTest Labs User").Actions

# Create custom role.
$policyRoleDef = (Get-AzRoleDefinition "DevTest Labs User")
$policyRoleDef.Id = $null
$policyRoleDef.Name = "Policy Contributor"
$policyRoleDef.IsCustom = $true
$policyRoleDef.AssignableScopes.Clear()
$policyRoleDef.AssignableScopes.Add("/subscriptions/<SubscriptionID> ")
$policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/policySets/policies/*")
$policyRoleDef = (New-AzRoleDefinition -Role $policyRoleDef)

使用自定义角色将某特定策略的权限分配给用户

一旦定义了自定义角色,即可将其分配给用户。 为了将自定义角色分配给用户,首先必须获取代表用户的 ObjectId。 为此,请使用 Get-AzADUser cmdlet。

在以下示例中,SomeUser 用户的 ObjectId 是 aaaaaaaa-0000-1111-2222-bbbbbbbb。

PS C:\>Get-AzADUser -SearchString "SomeUser"

DisplayName                    Type                           ObjectId
-----------                    ----                           --------
someuser@hotmail.com                                          aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb

获得用户的 ObjectId 和自定义角色名称后,即可使用 New-AzRoleAssignment cmdlet 将该角色分配给此用户:

PS C:\>New-AzRoleAssignment -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb -RoleDefinitionName "Policy Contributor" -Scope /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>/providers/Microsoft.DevTestLab/labs/<LabName>/policySets/default/policies/AllowedVmSizesInLab

在上一示例中,使用了 AllowedVmSizesInLab 策略。 你可以使用以下任意策略:

  • MaxVmsAllowedPerUser
  • MaxVmsAllowedPerLab
  • AllowedVmSizesInLab
  • LabVmsShutdown

创建角色以允许用户执行特定任务

此示例脚本会创建 DevTest 实验室高级用户角色,该角色具有启动和停止实验室中所有 VM 的权限:

    $policyRoleDef = Get-AzRoleDefinition "DevTest Labs User"
    $policyRoleDef.Actions.Remove('Microsoft.DevTestLab/Environments/*')
    $policyRoleDef.Id = $null
    $policyRoleDef.Name = "DevTest Labs Advanced User"
    $policyRoleDef.IsCustom = $true
    $policyRoleDef.AssignableScopes.Clear()
    $policyRoleDef.AssignableScopes.Add("/subscriptions/<subscription Id>")
    $policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/virtualMachines/Start/action")
    $policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/virtualMachines/Stop/action")
    $policyRoleDef = New-AzRoleDefinition -Role $policyRoleDef 

开始使用 Azure 开发测试实验室

不熟悉 Azure? 创建免费的 Azure 帐户

使用过 Azure? 创建第一个实验室并完成 Azure 开发测试实验室快速入门

后续步骤

向用户分配特定实验室策略的权限后,需要考虑执行后续步骤: