Automatizzare l'aggiunta di un utente lab a un lab in Azure DevTest Labs

Azure DevTest Labs consente di creare rapidamente ambienti di sviluppo e test self-service usando il portale di Azure. Tuttavia, se si hanno più team e diverse istanze di DevTest Labs, l'automazione del processo di creazione può risparmiare tempo. I modelli di Azure Resource Manager consentono di creare lab, macchine virtuali lab, immagini personalizzate, formule e aggiungere utenti in modo automatizzato. Questo articolo è incentrato in particolare sull'aggiunta di utenti a un'istanza di DevTest Labs.

Per aggiungere un utente a un lab, aggiungere l'utente al ruolo utente di DevTest Labs per il lab. Questo articolo illustra come automatizzare l'aggiunta di un utente a un lab usando uno dei modi seguenti:

  • Modelli di Gestione risorse di Azure
  • Cmdlet di Azure PowerShell
  • Interfaccia della riga di comando di Azure.

Usare i modelli di Gestione risorse di Azure

L'esempio seguente Resource Manager modello specifica un utente da aggiungere al ruolo utente di DevTest Labs di un lab.

{
  "$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'))]"
      ]
    }
  ]
}

Se si assegna il ruolo nello stesso modello che sta creando il lab, ricordarsi di aggiungere una dipendenza tra la risorsa di assegnazione di ruolo e il lab. Per altre informazioni, vedere l'articolo Definizione delle dipendenze in Modelli di Azure Resource Manager.

Informazioni sulla risorsa assegnazione di ruolo

La risorsa di assegnazione di ruolo deve specificare il tipo e il nome.

La prima cosa da notare è che il tipo per la risorsa non Microsoft.Authorization/roleAssignments è così come sarebbe per un gruppo di risorse. Al contrario, il tipo di risorsa segue il modello {provider-namespace}/{resource-type}/providers/roleAssignments. In questo caso, il tipo di risorsa sarà Microsoft.DevTestLab/labs/providers/roleAssignments.

Il nome dell'assegnazione di ruolo stesso deve essere univoco a livello globale. Il nome dell'assegnazione usa il modello {labName}/Microsoft.Authorization/{newGuid}. newGuid è un valore di parametro per il modello. Garantisce che il nome dell'assegnazione di ruolo sia univoco. Poiché non sono disponibili funzioni modello per la creazione di GUID, è necessario generare manualmente un GUID usando qualsiasi strumento generatore GUID.

Nel modello il nome dell'assegnazione di ruolo viene definito dalla fullDevTestLabUserRoleName variabile . La riga esatta del modello è:

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

Proprietà delle risorse di assegnazione di ruolo

Un'assegnazione di ruolo definisce tre proprietà. Richiede , roleDefinitionIdprincipalIde scope.

Definizione del ruolo

L'ID definizione del ruolo è l'identificatore di stringa per la definizione del ruolo esistente. L'ID ruolo è nel formato /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

L'ID sottoscrizione viene ottenuto usando la subscription().subscriptionId funzione modello.

È necessario ottenere la definizione del ruolo per il DevTest Labs User ruolo predefinito. Per ottenere il GUID per il ruolo utente di DevTest Labs , è possibile usare l'API REST Assegnazioni di ruolo o il cmdlet Get-AzRoleDefinition .

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

L'ID ruolo viene definito nella sezione variables e denominato devTestLabUserRoleId. Nel modello l'ID ruolo è impostato su: 11111111111-0000-0000-11111111111111111111.

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

ID entità di sicurezza

L'ID entità è l'ID oggetto dell'utente, del gruppo o dell'entità servizio di Active Directory da aggiungere come utente del lab. Il modello usa come ObjectId parametro .

È possibile ottenere ObjectId usando i cmdlet Get-AzureRMADUser, [Get-AzureRMADGroup o Get-AzureRMADServicePrincipal di PowerShell. Questi cmdlet restituiscono un singolo oggetto o un elenco di oggetti Active Directory con una proprietà ID, ovvero l'ID oggetto necessario. L'esempio seguente illustra come ottenere l'ID oggetto di un singolo utente in una società.

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

È anche possibile usare i cmdlet di PowerShell di Microsoft Graph che includono Get-MgUser, Get-MgGroup e Get-MgServicePrincipal.

Scope

L'ambito specifica la risorsa o il gruppo di risorse per cui deve essere applicata l'assegnazione di ruolo. Per le risorse, l'ambito è nel formato : /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. Il modello usa la subscription().subscriptionId funzione per compilare la subscription-id parte e la resourceGroup().name funzione modello da compilare nella resource-group-name parte. L'uso di queste funzioni significa che il lab a cui si sta assegnando un ruolo deve esistere nella sottoscrizione corrente e nello stesso gruppo di risorse a cui viene eseguita la distribuzione del modello. L'ultima parte, resource-name, è il nome del lab. Questo valore viene ricevuto tramite il parametro del modello in questo esempio.

Ambito del ruolo nel modello:

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

Distribuzione del modello

Creare prima di tutto un file di parametri ,ad esempio azuredeploy.parameters.json, che passa i valori per i parametri nel modello di Resource Manager.

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

Usare quindi il cmdlet di PowerShell New-AzureRmResourceGroupDeployment per distribuire il modello di Resource Manager. Il comando di esempio seguente assegna una persona, un gruppo o un'entità servizio al ruolo utente di DevTest Labs per un lab.

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

Nota

Il nome della distribuzione del gruppo e il GUID dell'assegnazione di ruolo devono essere univoci. Se si tenta di distribuire un'assegnazione di risorse usando un GUID non univoco, verrà visualizzato un RoleAssignmentUpdateNotPermitted errore.

Se si prevede di usare il modello più volte per aggiungere più oggetti di Active Directory al ruolo utente di DevTest Labs per il lab, prendere in considerazione l'uso di oggetti dinamici nel comando di PowerShell. Nell'esempio seguente viene usato il cmdlet New-Guid per specificare dinamicamente il nome della distribuzione del gruppo di risorse e il GUID dell'assegnazione di ruolo.

New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "11111111-1111-1111-1111-111111111111"

Usare Azure PowerShell

Come illustrato nell'introduzione, si crea una nuova assegnazione di ruolo di Azure per aggiungere un utente al ruolo utente di DevTest Labs per il lab. In PowerShell si usa il cmdlet New-AzureRMRoleAssignment . Questo cmdlet include molti parametri facoltativi per consentire la flessibilità. L'oggetto ObjectId, SigninNameo ServicePrincipalName può essere specificato come oggetto a cui sono concesse le autorizzazioni.

Di seguito è riportato un comando di esempio Azure PowerShell che aggiunge un utente al ruolo utente di DevTest Labs nel lab specificato.

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

Per specificare la risorsa a cui vengono concesse le autorizzazioni, è possibile specificare una combinazione di ResourceName, ResourceTypeResourceGroup o dal scope parametro . Indipendentemente dalla combinazione di parametri usata, fornire informazioni sufficienti al cmdlet per identificare in modo univoco l'oggetto Active Directory (utente, gruppo o entità servizio), l'ambito (gruppo di risorse o risorsa) e la definizione del ruolo.

Utilizzare l'interfaccia della riga di comando di Azure

Nell'interfaccia della riga di comando di Azure l'aggiunta di un utente lab a un lab viene eseguita usando il az role assignment create comando . Per altre informazioni sui cmdlet dell'interfaccia della riga di comando di Azure, vedere Aggiungere o rimuovere assegnazioni di ruolo di Azure tramite l'interfaccia della riga di comando di Azure.

L'oggetto a cui viene concesso l'accesso può essere specificato dai objectIdparametri , signInName, spn . Il lab a cui viene concesso l'accesso all'oggetto può essere identificato dall'URL scope o da una combinazione dei resource-nameparametri , resource-typee resource-group .

L'esempio seguente dell'interfaccia della riga di comando di Azure illustra come aggiungere una persona al ruolo utente di DevTest Labs per il lab specificato.

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>

Passaggi successivi

Vedere gli articoli seguenti: