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/roleAssignments
resurstypen .
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
, principalId
och 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. , ObjectId
SigninName
, 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
, ResourceType
ResourceGroup
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-type
och 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: