Concesión de permisos de usuario a directivas específicas de laboratorio

Información general

Este artículo muestra cómo usar PowerShell para conceder permisos de usuario a una directiva concreta de laboratorio. De este modo, se pueden aplicar permisos en función de las necesidades de cada usuario. Por ejemplo, quizá prefiera conceder a un usuario determinado la posibilidad de cambiar la configuración de directiva de máquina virtual, pero no las directivas de costos.

Directivas como recursos

Como se ha explicado en el artículo Control de acceso basado en rol de Azure (RBAC de Azure), RBAC de Azure permite la administración de acceso específica a los recursos de Azure. Gracias a RBAC de Azure, puede dividir las tareas entre el equipo de DevOps y conceder a los usuarios únicamente el nivel de acceso que necesitan para realizar su trabajo.

En DevTest Labs, una directiva es un tipo de recurso que permite la acción de RBAC de Azure Microsoft.DevTestLab/labs/policySets/policies/ . Cada directiva de laboratorio es un recurso en el tipo de recurso Directiva, y se puede asignar como ámbito a un rol de Azure.

Por ejemplo, para conceder permisos de lectura y escritura a los usuarios para la directiva Tamaños permitidos de máquina virtual, debe crear un rol personalizado que funcione con la acción Microsoft.DevTestLab/labs/policySets/policies/ y, después, asignar los usuarios adecuados a este rol personalizado en el ámbito de Microsoft.DevTestLab/labs/policySets/policies/AllowedVmSizesInLab.

Para obtener más información sobre los roles personalizados de RBAC de Azure, vea Roles personalizados de Azure.

Creación de un rol personalizado de laboratorio con PowerShell

Para empezar, deberá instalar Azure PowerShell.

Una vez haya configurado los cmdlets de Azure PowerShell, podrá realizar las siguientes tareas:

  • Enumerar todas las operaciones y acciones para un proveedor de recursos
  • Enumerar las acciones de un rol determinado
  • Crear un rol personalizado

El siguiente script de PowerShell muestra ejemplos de cómo realizar estas tareas:

# 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)

Asignación de permisos a un usuario para una directiva determinada utilizando roles personalizados

Una vez haya definido los roles personalizados, puede asignárselos a los usuarios. A fin de asignar un rol personalizado a un usuario, primero debe obtener el ObjectId que representa a ese usuario. Para ello, use el cmdlet Get-AzADUser.

En el ejemplo siguiente, el valor ObjectId del usuario SomeUser es 05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3.

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

DisplayName                    Type                           ObjectId
-----------                    ----                           --------
someuser@hotmail.com                                          05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3

Una vez que tenga el ObjectId para el usuario y un nombre de rol personalizado, puede asignar ese rol al usuario con el cmdlet New-AzRoleAssignment:

PS C:\>New-AzRoleAssignment -ObjectId 05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3 -RoleDefinitionName "Policy Contributor" -Scope /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>/providers/Microsoft.DevTestLab/labs/<LabName>/policySets/default/policies/AllowedVmSizesInLab

En el ejemplo anterior, se utiliza la directiva AllowedVmSizesInLab . Puede usar cualquiera de las directivas siguientes:

  • MaxVmsAllowedPerUser
  • MaxVmsAllowedPerLab
  • AllowedVmSizesInLab
  • LabVmsShutdown

Creación de un rol para permitir que los usuarios realicen una tarea específica

En este script de ejemplo se crea el rol Usuario avanzado de DevTest Labs, que tiene permiso para iniciar y detener todas las VM del laboratorio:

    $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 

Introducción a Azure DevTest Labs

¿Acaba de llegar a Azure? Cree una cuenta gratuita de Azure.

¿Ya está familiarizado con Azure? Introducción al primer laboratorio de DevTest Labs: empiece a trabajar con Azure DevTest Labs en cuestión de minutos.

Pasos siguientes

Una vez que haya concedido permisos de usuario a las directivas específicas del laboratorio, estos son algunos de los siguientes pasos que debe considerar: