你当前正在访问 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 开发测试实验室快速入门。
后续步骤
向用户分配特定实验室策略的权限后,需要考虑执行后续步骤: