Delen via


Automatiseren het toevoegen van een labgebruiker aan een lab in Azure DevTest Labs

Met Azure DevTest Labs kunt u snel selfservice dev-testomgevingen maken met behulp van Azure Portal. Als u echter meerdere teams en verschillende DevTest Labs-exemplaren hebt, kan het maken van het proces tijd besparen. Met Azure Resource Manager-sjablonen kunt u labs, lab-VM's, aangepaste installatiekopieën, formules en gebruikers op een geautomatiseerde manier toevoegen. Dit artikel richt zich specifiek op het toevoegen van gebruikers aan een DevTest Labs-exemplaar.

Als u een gebruiker aan een lab wilt toevoegen, voegt u de gebruiker toe aan de gebruikersrol DevTest Labs voor het lab. In dit artikel leest u hoe u het toevoegen van een gebruiker aan een lab kunt automatiseren op een van de volgende manieren:

  • Azure Resource Manager-sjablonen
  • Azure PowerShell-cmdlets
  • Azure CLI.

Azure Resource Manager-sjablonen gebruiken

In de volgende Resource Manager-voorbeeldsjabloon wordt aangegeven dat een gebruiker moet worden toegevoegd aan de gebruikersrol DevTest Labs van een 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'))]"
      ]
    }
  ]
}

Als u de rol toewijst in dezelfde sjabloon die het lab maakt, moet u een afhankelijkheid toevoegen tussen de resource voor roltoewijzing en het lab. Zie het artikel Over het definiëren van afhankelijkheden in Azure Resource Manager-sjablonen voor meer informatie.

Resourcegegevens voor roltoewijzing

De roltoewijzingsresource moet het type en de naam opgeven.

Het eerste wat u moet weten, is dat het type voor de resource niet Microsoft.Authorization/roleAssignments hetzelfde is als voor een resourcegroep. In plaats daarvan volgt het resourcetype het patroon {provider-namespace}/{resource-type}/providers/roleAssignments. In dit geval is Microsoft.DevTestLab/labs/providers/roleAssignmentshet resourcetype.

De naam van de roltoewijzing zelf moet wereldwijd uniek zijn. De naam van de toewijzing maakt gebruik van het patroon {labName}/Microsoft.Authorization/{newGuid}. Dit newGuid is een parameterwaarde voor de sjabloon. Deze zorgt ervoor dat de naam van de roltoewijzing uniek is. Omdat er geen sjabloonfuncties zijn voor het maken van GUID's, moet u zelf een GUID genereren met behulp van een GUID-generatorprogramma.

In de sjabloon wordt de naam voor de roltoewijzing gedefinieerd door de fullDevTestLabUserRoleName variabele. De exacte regel van de sjabloon is:

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

Resource-eigenschappen van roltoewijzing

Een roltoewijzing zelf definieert drie eigenschappen. Het heeft de roleDefinitionId, principalIden scope.

Roldefinitie

De id van de roldefinitie is de tekenreeks-id voor de bestaande roldefinitie. De rol-id heeft de vorm /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

De abonnements-id wordt verkregen met behulp van subscription().subscriptionId de sjabloonfunctie.

U moet de roldefinitie voor de DevTest Labs User ingebouwde rol ophalen. Als u de GUID voor de gebruikersrol DevTest Labs wilt ophalen, kunt u de REST API voor roltoewijzingen of de cmdlet Get-AzRoleDefinition gebruiken.

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

De rol-id wordt gedefinieerd in de sectie variabelen en de naam devTestLabUserRoleId. In de sjabloon is de rol-id ingesteld op: 11111111-0000-0000-11111111111111111111.

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

Principal-id

Principal-id is de object-id van de Active Directory-gebruiker, -groep of -service-principal die u als labgebruiker aan het lab wilt toevoegen. De sjabloon gebruikt de ObjectId als parameter.

U kunt de ObjectId ophalen met behulp van de Cmdlets Get-AzADUser, Get-AzADGroup of Get-AzADServicePrincipal PowerShell. Deze cmdlets retourneren één of lijsten met Active Directory-objecten die een id-eigenschap hebben. Dit is de object-id die u nodig hebt. In het volgende voorbeeld ziet u hoe u de object-id van één gebruiker in een bedrijf kunt ophalen.

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

U kunt ook de Microsoft Graph PowerShell-cmdlets gebruiken die Get-MgUser, Get-MgGroup en Get-MgServicePrincipal bevatten.

Bereik

Het bereik geeft de resource of resourcegroep op waarvoor de roltoewijzing moet worden toegepast. Voor resources heeft het bereik de volgende vorm: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. De sjabloon gebruikt de subscription().subscriptionId functie om het subscription-id deel en de resourceGroup().name sjabloonfunctie in te vullen om het resource-group-name deel in te vullen. Als u deze functies gebruikt, moet het lab waaraan u een rol toewijst, bestaan in het huidige abonnement en dezelfde resourcegroep waaraan de sjabloonimplementatie wordt gemaakt. Het laatste deel resource-name, is de naam van het lab. Deze waarde wordt ontvangen via de sjabloonparameter in dit voorbeeld.

Het rolbereik in de sjabloon:

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

Het sjabloon implementeren

Maak eerst een parameterbestand (bijvoorbeeld: azuredeploy.parameters.json) dat waarden doorgeeft voor parameters in de Resource Manager-sjabloon.

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

Gebruik vervolgens de PowerShell-cmdlet New-AzResourceGroupDeployment om de Resource Manager-sjabloon te implementeren. Met de volgende voorbeeldopdracht wordt een persoon, groep of service-principal toegewezen aan de gebruikersrol DevTest Labs voor een lab.

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

Notitie

De GUID voor de groepsimplementatie en roltoewijzing moet uniek zijn. Als u een resourcetoewijzing probeert te implementeren met behulp van een niet-unieke GUID, wordt er een RoleAssignmentUpdateNotPermitted fout weergegeven.

Als u van plan bent om de sjabloon meerdere keren te gebruiken om verschillende Active Directory-objecten toe te voegen aan de gebruikersrol DevTest Labs voor uw lab, kunt u overwegen dynamische objecten in uw PowerShell-opdracht te gebruiken. In het volgende voorbeeld wordt de cmdlet New-Guid gebruikt om de resourcegroepimplementatienaam en roltoewijzing-GUID dynamisch op te geven.

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

Azure PowerShell gebruiken

Zoals besproken in de inleiding, maakt u een nieuwe Azure-roltoewijzing om een gebruiker toe te voegen aan de gebruikersrol DevTest Labs voor het lab. In PowerShell doet u dit met behulp van de cmdlet New-AzRoleAssignment . Deze cmdlet heeft veel optionele parameters om flexibiliteit mogelijk te maken. De ObjectId, SigninNameof ServicePrincipalName kan worden opgegeven als het object dat machtigingen krijgt.

Hier volgt een voorbeeld van een Azure PowerShell-opdracht waarmee een gebruiker wordt toegevoegd aan de gebruikersrol DevTest Labs in het opgegeven lab.

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

Als u de resource wilt opgeven waaraan machtigingen worden verleend, kunt u opgeven door een combinatie vanResourceName, ResourceTypeResourceGroup of door de scope parameter. Welke combinatie van parameters ook wordt gebruikt, geef voldoende informatie op voor de cmdlet om het Active Directory-object (gebruiker, groep of service-principal), bereik (resourcegroep of resource) en roldefinitie uniek te identificeren.

Azure CLI gebruiken

In de Azure CLI wordt het toevoegen van een labgebruiker aan een lab uitgevoerd met behulp van de az role assignment create opdracht. Zie Azure-roltoewijzingen toevoegen of verwijderen met behulp van Azure CLI voor meer informatie over Azure CLI-cmdlets.

Het object waaraan toegang wordt verleend, kan worden opgegeven door de objectIdparameters . spn signInName Het lab waaraan het object toegang krijgt, kan worden geïdentificeerd door de scope URL of een combinatie van de resource-name, resource-typeen resource-group parameters.

In het volgende Azure CLI-voorbeeld ziet u hoe u een persoon toevoegt aan de gebruikersrol DevTest Labs voor het opgegeven lab.

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>

Volgende stappen

Zie de volgende artikelen: