Share via


Automatisera tillägg av en labbanvändare i ett labb i Azure DevTest Labs

Azure DevTest Labs gör att du snabbt kan skapa utvecklingstestmiljöer med självbetjäning med hjälp av Azure Portal. Men om du har flera team och flera DevTest Labs-instanser kan det spara tid att automatisera skapandeprocessen. Med Azure Resource Manager mallar kan du skapa labb, virtuella labbdatorer, anpassade avbildningar, formler och lägga till användare på ett automatiserat sätt. Den här artikeln fokuserar specifikt på att lägga till användare i en DevTest Labs-instans.

Om du vill lägga till en användare i ett labb lägger du till användaren i DevTest Labs-användarrollen för labbet. Den här artikeln visar hur du automatiserar att lägga till en användare i ett labb på något av följande sätt:

  • Azure Resource Manager-mallar
  • Azure PowerShell-cmdletar
  • Azure CLI.

Använda Azure Resource Manager-mallar

Följande exempel Resource Manager mall anger en användare som ska läggas till i DevTest Labs-användarrollen för ett labb.

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

Om du tilldelar rollen i samma mall som skapar labbet, kom ihåg att lägga till ett beroende mellan rolltilldelningsresursen och labbet. Mer information finns i artikeln Definiera beroenden i Azure Resource Manager-mallar.

Resursinformation för rolltilldelning

Rolltilldelningsresursen måste ange typ och namn.

Det första du bör tänka på är att resurstypen inte Microsoft.Authorization/roleAssignments är som den skulle vara för en resursgrupp. Resurstypen följer i stället mönstret {provider-namespace}/{resource-type}/providers/roleAssignments. I det här fallet blir Microsoft.DevTestLab/labs/providers/roleAssignmentsresurstypen .

Själva rolltilldelningsnamnet måste vara globalt unikt. Namnet på tilldelningen använder mönstret {labName}/Microsoft.Authorization/{newGuid}. newGuid är ett parametervärde för mallen. Det säkerställer att rolltilldelningsnamnet är unikt. Eftersom det inte finns några mallfunktioner för att skapa GUID:er måste du generera ett GUID själv med hjälp av guid-generatorverktyg.

I mallen definieras namnet på rolltilldelningen av variabeln fullDevTestLabUserRoleName . Den exakta raden från mallen är:

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

Resursegenskaper för rolltilldelning

Själva rolltilldelningen definierar tre egenskaper. Den behöver roleDefinitionId, principalIdoch scope.

Rolldefinition

Rolldefinitions-ID:t är strängidentifieraren för den befintliga rolldefinitionen. Roll-ID:t är i formatet /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

Prenumerations-ID:t hämtas med hjälp subscription().subscriptionId av mallfunktionen.

Du måste hämta rolldefinitionen för den DevTest Labs User inbyggda rollen. Om du vill hämta GUID för DevTest Labs-användarrollen kan du använda REST API för rolltilldelningar eller cmdleten Get-AzRoleDefinition .

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

Roll-ID:t definieras i avsnittet variabler och heter devTestLabUserRoleId. I mallen är roll-ID inställt på: 1111111111-0000-0000-111111111111111111111.

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

Huvudnamns-ID

Huvudnamns-ID är objekt-ID för active directory-användaren, gruppen eller tjänstens huvudnamn som du vill lägga till som labbanvändare i labbet. Mallen använder ObjectId som parameter.

Du kan hämta ObjectId med hjälp av Cmdletarna Get-AzureRMADUser, [Get-AzureRMADGroup eller Get-AzureRMADServicePrincipal PowerShell. Dessa cmdletar returnerar en enda eller en lista med Active Directory-objekt som har en ID-egenskap, vilket är det objekt-ID som du behöver. I följande exempel visas hur du hämtar objekt-ID för en enskild användare på ett företag.

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

Du kan också använda Microsoft Graph PowerShell-cmdletar som innehåller Get-MgUser, Get-MgGroup och Get-MgServicePrincipal.

Omfång

Omfånget anger den resurs eller resursgrupp som rolltilldelningen ska gälla för. För resurser är omfånget i formatet: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. Mallen subscription().subscriptionId använder funktionen för att fylla i subscription-id delen och resourceGroup().name mallfunktionen för att fylla i resource-group-name delen. Om du använder de här funktionerna måste labbet som du tilldelar en roll till finnas i den aktuella prenumerationen och i samma resursgrupp som malldistributionen görs till. Den sista delen, resource-name, är namnet på labbet. Det här värdet tas emot via mallparametern i det här exemplet.

Rollomfånget i mallen:

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

Distribuera mallen

Skapa först en parameterfil (till exempel azuredeploy.parameters.json) som skickar värden för parametrar i mallen 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"
    }
  }
}

Använd sedan PowerShell-cmdleten New-AzureRmResourceGroupDeployment för att distribuera mallen Resource Manager. Följande exempelkommando tilldelar en person, grupp eller ett huvudnamn för tjänsten till rollen DevTest Labs-användare för ett labb.

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

Anteckning

Gruppdistributionsnamnet och rolltilldelnings-GUID:et måste vara unika. Om du försöker distribuera en resurstilldelning med hjälp av ett icke-unikt GUID visas ett RoleAssignmentUpdateNotPermitted fel.

Om du planerar att använda mallen flera gånger för att lägga till flera Active Directory-objekt i DevTest Labs-användarrollen för ditt labb bör du överväga att använda dynamiska objekt i PowerShell-kommandot. I följande exempel används cmdleten New-Guid för att ange resursgruppens distributionsnamn och rolltilldelnings-GUID dynamiskt.

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

Använda Azure PowerShell

Som beskrivs i introduktionen skapar du en ny Azure-rolltilldelning för att lägga till en användare i DevTest Labs-användarrollen för labbet. I PowerShell gör du det med hjälp av cmdleten New-AzureRMRoleAssignment . Den här cmdleten har många valfria parametrar som möjliggör flexibilitet. , ObjectIdSigninName, eller ServicePrincipalName kan anges som det objekt som beviljas behörigheter.

Här är ett exempel Azure PowerShell kommando som lägger till en användare till rollen DevTest Labs-användare i det angivna labbet.

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

Om du vill ange vilken resurs som behörigheter beviljas till kan du ange en kombination av ResourceName, ResourceTypeResourceGroup eller av parametern scope . Oavsett vilken kombination av parametrar som används tillhandahåller du tillräckligt med information till cmdleten för att unikt identifiera Active Directory-objektet (användare, grupp eller tjänstens huvudnamn), omfång (resursgrupp eller resurs) och rolldefinition.

Använda Azure CLI

I Azure CLI läggs en labbanvändare till i ett labb med hjälp az role assignment create av kommandot . Mer information om Azure CLI-cmdletar finns i Lägga till eller ta bort Azure-rolltilldelningar med Azure CLI.

Objektet som beviljas åtkomst kan anges av parametrarna objectId, signInName, spn . Labbuppgiften som objektet beviljas åtkomst till kan identifieras av scope URL:en eller en kombination av parametrarna resource-name, resource-typeoch resource-group .

Följande Azure CLI-exempel visar hur du lägger till en person i DevTest Labs-användarrollen för det angivna labbet.

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>

Nästa steg

Se följande artiklar: