Dela via


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

Med Azure DevTest Labs kan du snabbt 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 bilder, 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 hur du lägger 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 Resource Manager-exempelmall 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. I stället följer resurstypen 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 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:et 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å: 111111111-0000-0000-11111111111111111111111111.

"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 en parameter.

Du kan hämta ObjectId med hjälp av Cmdletarna Get-AzADUser, Get-AzADGroup eller Get-AzADServicePrincipal PowerShell. Dessa cmdletar returnerar en enda eller lista över 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-AzADUser -UserPrincipalName 'email@company.com').Id

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

Omfattning

Omfånget anger den resurs eller resursgrupp som rolltilldelningen ska gälla för. För resurser är omfånget i formuläret : /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. Att använda dessa funktioner innebär att labbet som du tilldelar en roll till måste 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 Resource Manager-mallen.

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

Använd sedan PowerShell-cmdleten New-AzResourceGroupDeployment för att distribuera Resource Manager-mallen. 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-AzResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateParameterFile .\azuredeploy.parameters.json -TemplateFile .\azuredeploy.json

Kommentar

Gruppdistributionsnamnet och rolltilldelningens GUID 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 användarrollen DevTest Labs för ditt labb kan 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-AzResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "aaaaaaaa-bbbb-cccc-1111-222222222222"

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-AzRoleAssignment . Den här cmdleten har många valfria parametrar som ger flexibilitet. , ObjectIdSigninName, eller ServicePrincipalName kan anges som det objekt som beviljas behörigheter.

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

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

Om du vill ange den 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 ger 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 . Det labb 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

Mer information finns i följande artiklar: