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/roleAssignments
het 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
, principalId
en 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
, SigninName
of 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
, ResourceType
ResourceGroup
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 objectId
parameters . 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-type
en 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: