Compartir vía


Automatizar la adición de un usuario de laboratorio a un laboratorio en Azure DevTest Labs

Azure DevTest Labs le permite crear rápidamente entornos de desarrollo y pruebas de autoservicio mediante Azure Portal. Pero si tiene varios equipos y varias instancias de DevTest Labs, automatizar el proceso de creación puede ahorrar tiempo. Las plantillas de Azure Resource Manager le permiten crear laboratorios, máquinas virtuales de laboratorio, imágenes personalizadas, fórmulas y agregar usuarios de forma automática. Este artículo se centra específicamente en la adición de usuarios a una instancia de DevTest Labs.

Para agregar un usuario a un laboratorio, agrega el usuario al rol de usuario de DevTest Labs para el laboratorio. Este artículo le muestra cómo automatizar la adición de un usuario a un laboratorio mediante una de las maneras siguientes:

  • Plantillas del Administrador de recursos de Azure
  • Cmdlets de Azure PowerShell
  • CLI de Azure.

Utilización de plantillas del Administrador de recursos de Azure

La siguiente plantilla de ejemplo de Resource Manager especifica un usuario que se agregará al rol de usuario de DevTest Labs de un laboratorio.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "principalId": {
      "type": "string",
      "metadata": {
        "description": "The objectId of the user, group, or service principal for the role."
      }
    },
    "labName": {
      "type": "string",
      "metadata": {
        "description": "The name of the lab instance to be created."
      }
    },
    "roleAssignmentGuid": {
      "type": "string",
      "metadata": {
        "description": "Guid to use as the name for the role assignment."
      }
    }
  },
  "variables": {
    "devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",
    "fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]",
    "roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"
  },
  "resources": [
    {
      "apiVersion": "2016-05-15",
      "type": "Microsoft.DevTestLab/labs",
      "name": "[parameters('labName')]",
      "location": "[resourceGroup().location]"
    },
    {
      "apiVersion": "2016-07-01",
      "type": "Microsoft.DevTestLab/labs/providers/roleAssignments",
      "name": "[variables('fullDevTestLabUserRoleName')]",
      "properties": {
        "roleDefinitionId": "[variables('devTestLabUserRoleId')]",
        "principalId": "[parameters('principalId')]",
        "scope": "[variables('roleScope')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.DevTestLab/labs', parameters('labName'))]"
      ]
    }
  ]
}

Si va a asignar el rol en la misma plantilla que está creando el laboratorio, no olvide agregar una dependencia entre el recurso de asignación de roles y el laboratorio. Para obtener más información, consulte el artículo Definición de dependencias en plantillas de Azure Resource Manager.

Información sobre el recurso de asignación de roles

El recurso de asignación de roles debe especificar el tipo y nombre.

Lo primero que debe tener en cuenta es que el tipo del recurso no es Microsoft.Authorization/roleAssignments, como sería para un grupo de recursos. En su lugar, el tipo de recurso sigue el patrón {provider-namespace}/{resource-type}/providers/roleAssignments. En este caso, el tipo de recurso será Microsoft.DevTestLab/labs/providers/roleAssignments.

El propio nombre de la asignación de roles debe ser único globalmente. El nombre de la asignación usa el patrón {labName}/Microsoft.Authorization/{newGuid}. El newGuid es un valor de parámetro para la plantilla. Se asegura de que el nombre de la asignación de roles es único. Como no hay ninguna función de plantilla para crear GUID, deberá generar un GUID mediante cualquier herramienta generadora de GUID.

En la plantilla, el nombre de la asignación de roles se define mediante la variable fullDevTestLabUserRoleName. La línea exacta de la plantilla es:

"fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]"

Propiedades del recurso de asignación de roles

Una asignación de roles en sí define tres propiedades. Necesita roleDefinitionId, principalId y scope.

Definición de roles

El identificador de definición de roles es el identificador de cadena para la definición de roles existente. El identificador de roles tiene el formato: /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

El identificador de suscripción se obtiene mediante la función de plantilla subscription().subscriptionId.

Deberá obtener la definición de roles para el rol integrado DevTest Labs User. Para obtener el GUID para el rol de usuario de DevTest Labs, puede usar la API de REST de asignaciones de roles o el cmdlet Get-AzRoleDefinition.

$dtlUserRoleDefId = (Get-AzRoleDefinition -Name "DevTest Labs User").Id

El identificador de rol se define en la sección de variables y se denomina devTestLabUserRoleId. En la plantilla, el identificador de rol se establece en: 111111111-0000-0000-11111111111111111.

"devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",

Identificador de entidad de seguridad

El identificador de entidad de seguridad es el identificador de objeto del usuario, grupo o entidad de servicio de Active Directory que quiere agregar como usuario de laboratorio para el laboratorio. La plantilla usa ObjectId como un parámetro.

Puede obtener el valor de ObjectId mediante los cmdlets de PowerShell Get-AzureRMADUser, [Get-AzureRMADGroup o Get-AzureRMADServicePrincipal. Estos cmdlets devuelven un objeto único o unas listas de objetos de Active Directory que tienen una propiedad de identificador, que es el identificador de objeto que necesita. El ejemplo siguiente muestra cómo obtener el identificador de objeto de un usuario único en una empresa.

$userObjectId = (Get-AzureRmADUser -UserPrincipalName 'email@company.com').Id

También puede usar los cmdlets de PowerShell de Microsoft Graph que incluyen Get-MgUser, Get-MgGroup y Get-MgServicePrincipal.

Ámbito

El ámbito especifica el recurso o grupo de recursos para el que se debe aplicar la asignación de roles. Para los recursos, el ámbito tiene el formato: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. La plantilla usa la función subscription().subscriptionId para rellenar el apartado subscription-id y la función de plantilla resourceGroup().name para rellenar el apartado resource-group-name. El uso de estas funciones implica que el laboratorio al que va a asignar un rol debe existir en la suscripción actual y en el mismo grupo de recursos en el que se realiza la implementación de plantilla. El último apartado, resource-name, es el nombre del laboratorio. Este valor se recibe a través del parámetro de plantilla de este ejemplo.

El ámbito de rol en la plantilla:

"roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"

Implementación de la plantilla

En primer lugar, cree un archivo de parámetros (por ejemplo: azuredeploy.parameters.json) que pase los valores de los parámetros en la plantilla de Resource Manager.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "principalId": {
      "value": "aaaaaaaa-bbbb-cccc-1111-222222222222"
    },
    "labName": {
      "value": "MyLab"
    },
    "roleAssignmentGuid": {
      "value": "22222222-2222-2222-2222-222222222222"
    }
  }
}

Después, use el cmdlet de PowerShell New-AzureRmResourceGroupDeployment para implementar la plantilla de Resource Manager. El comando de ejemplo siguiente asigna una persona, grupo o una entidad de servicio al rol de usuario de DevTest Labs para un laboratorio.

New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateParameterFile .\azuredeploy.parameters.json -TemplateFile .\azuredeploy.json

Nota

El nombre de implementación del grupo y el GUID de asignación de roles deben ser únicos. Si intenta implementar una asignación de recursos con un GUID que no es único, obtendrá el error RoleAssignmentUpdateNotPermitted.

Si tiene previsto usar la plantilla varias veces para agregar varios objetos de Active Directory al rol de usuario de DevTest Labs para el laboratorio, considere la posibilidad de utilizar objetos dinámicos en el comando de PowerShell. En el ejemplo siguiente se usa el cmdlet New-Guid para especificar el GUID de asignación de roles y el nombre de implementación del grupo de recursos dinámicamente.

New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "aaaaaaaa-bbbb-cccc-1111-222222222222"

Uso de Azure PowerShell

Como se describe en la introducción, crea una nueva asignación de roles de Azure para agregar un usuario al rol de usuario de DevTest Labs para el laboratorio. En PowerShell, lo hace mediante el cmdlet New-AzureRMRoleAssignment. Este cmdlet tiene muchos parámetros opcionales para permitir flexibilidad. Se puede especificar ObjectId, SigninName o ServicePrincipalName como el objeto al que se va a conceder permisos.

A continuación se muestra un comando de Azure PowerShell de ejemplo que agrega un usuario al rol de usuario de DevTest Labs en el laboratorio especificado.

New-AzureRmRoleAssignment -UserPrincipalName <email@company.com> -RoleDefinitionName 'DevTest Labs User' -ResourceName '<Lab Name>' -ResourceGroupName '<Resource Group Name>' -ResourceType 'Microsoft.DevTestLab/labs'

Para especificar el recurso al que se está concediendo permisos puede usar una combinación de ResourceName, ResourceType, ResourceGroup o mediante el parámetro scope. Independientemente de la combinación de parámetros que use, proporcione suficiente información para que el cmdlet identifique de forma única el objeto de Active Directory (usuario, grupo o entidad de servicio), el ámbito (grupo de recursos o recurso) y la definición de rol.

Uso de CLI de Azure

En la CLI de Azure, la adición de un usuario de laboratorios a un laboratorio se realiza mediante el uso del comando az role assignment create. Para más información sobre los cmdlets de la CLI de Azure, consulte Incorporación o eliminación de asignaciones de roles de Azure mediante la CLI de Azure.

Se puede especificar el objeto al que se va a conceder acceso mediante los parámetros objectId, signInName, spn. El laboratorio al que se va a conceder acceso al objeto puede identificarse por la dirección url de scope o por una combinación de los parámetros resource-name, resource-type y resource-group.

En el siguiente ejemplo de la CLI de Azure se muestra cómo agregar a una persona al rol de usuario de DevTest Labs del laboratorio de pruebas especificado.

az role assignment create --roleName "DevTest Labs User" --signInName <email@company.com> -–resource-name "<Lab Name>" --resource-type "Microsoft.DevTestLab/labs" --resource-group "<Resource Group Name>" --role Contributor --scope /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>

Pasos siguientes

Vea los artículos siguientes: