Automatisieren des Hinzufügens eines Lab-Benutzers zu einem Lab in Azure DevTest Labs

Mit Azure DevTest Labs können Sie über das Azure-Portal schnell Self-Service-DevTest-Umgebungen erstellen. Wenn Sie jedoch über mehrere Teams und mehrere DevTest Labs-Instanzen verfügen, kann die Automatisierung des Erstellungsprozesses Zeit sparen. Azure Resource Manager-Vorlagen ermöglichen Ihnen das Erstellen von Labs, Lab-VMs, benutzerdefinierten Images, Formeln sowie das Hinzufügen von Benutzern auf automatisierte Weise. Dieser Artikel befasst sich insbesondere mit dem Hinzufügen von Benutzern zu einer DevTest Labs-Instanz.

Um einen Benutzer einem Lab hinzuzufügen, fügen Sie den Benutzer der Rolle DevTest Labs-Benutzer für das Lab hinzu. In diesem Artikel erfahren Sie, wie Sie das Hinzufügen eines Benutzers zu einem Lab mit einer der folgenden Methoden automatisieren können:

  • Azure-Ressourcen-Manager-Vorlagen
  • Azure PowerShell-Cmdlets
  • Azure-Befehlszeilenschnittstelle.

Verwenden von Azure-Ressourcen-Manager-Vorlagen

Die folgende Resource Manager-Beispielvorlage gibt an, dass ein Benutzer der Rolle DevTest Labs-Benutzer eines Labs hinzugefügt werden soll.

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

Wenn Sie die Rolle in der gleichen Vorlage zuweisen, in der auch das Lab erstellt wird, denken Sie daran, eine Abhängigkeit zwischen der Ressourcenzuordnung der Rolle und dem Lab hinzuzufügen. Weitere Informationen finden Sie im Artikel Definieren von Abhängigkeiten in Azure Resource Manager-Vorlagen.

Informationen der Rollenzuweisungsressource

Die Rollenzuweisungsressource muss den Typ und den Namen angeben.

Zunächst ist zu beachten, dass der Typ für die Ressource nicht Microsoft.Authorization/roleAssignments ist, wie es für eine Ressourcengruppe der Fall wäre. Stattdessen folgt der Ressourcentyp dem Muster {provider-namespace}/{resource-type}/providers/roleAssignments. In diesem Fall ist der Ressourcentyp Microsoft.DevTestLab/labs/providers/roleAssignments.

Der Rollenzuweisungsname selbst muss global eindeutig sein. Der Name der Zuweisung verwendet das Muster {labName}/Microsoft.Authorization/{newGuid}. newGuid ist ein Parameterwert für die Vorlage. Er stellt sicher, dass der Rollenzuweisungsname eindeutig ist. Da keine Vorlagenfunktionen zum Erstellen von GUIDs vorhanden sind, müssen Sie selbst mit einem GUID-Generatortool eine GUID erstellen.

In der Vorlage wird der Namen für die Rollenzuweisung durch die Variable fullDevTestLabUserRoleName definiert. In der Vorlage lautet die Zeile folgendermaßen:

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

Eigenschaften der Rollenzuweisungsressource

Eine Rollenzuweisung selbst definiert drei Eigenschaften. Die roleDefinitionId, die principalId, und der scope sind erforderlich.

Rollendefinition

Die Rollendefinitions-ID ist der Zeichenfolgenbezeichner für die vorhandene Rollendefinition. Die Rollen-ID weist das Format /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id} auf.

Die Abonnement-ID wird mit der Vorlagenfunktion subscription().subscriptionId abgerufen.

Sie müssen die Rollendefinition für die integrierte Rolle DevTest Labs User abrufen. Zum Abrufen der GUID für die Rolle DevTest Labs-Benutzer können Sie die Rollenzuweisungs-REST-API oder das Cmdlet Get-AzRoleDefinition verwenden.

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

Die Rollen-ID wird im Abschnitt „Variables“ definiert und trägt den Namen devTestLabUserRoleId. In der Vorlage wird die Rollen-ID auf Folgendes festgelegt: 111111111-0000-0000-11111111111111111.

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

Prinzipal-ID

Die Prinzipal-ID ist die Objekt-ID des Active Directory-Benutzers, der -Gruppe oder des -Dienstprinzipals, den bzw. die Sie dem Lab als Lab-Benutzer hinzufügen möchten. Die Vorlage verwendet die ObjectId als Parameter.

Sie können die Objekt-ID mit den PowerShell-Cmdlets Get-AzureRMADUser, „[Get-AzureRMADGroup“ oder Get-AzureRMADServicePrincipal abrufen. Diese Cmdlets geben ein einzelnes Active Directory-Objekt oder eine Liste von Active Directory-Objekten zurück, die eine ID-Eigenschaft aufweisen, die die Objekt-ID ist, die Sie benötigen. Das folgende Beispiel zeigt Ihnen, wie Sie die Objekt-ID eines einzelnen Benutzers in einem Unternehmen abrufen können.

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

Sie können auch die Microsoft Graph PowerShell-Cmdlets verwenden, einschließlich Get-MgUser, Get-MgGroup und Get-MgServicePrincipal.

`Scope`

Der Bereich gibt die Ressource oder Ressourcengruppe an, die für die Rollenzuweisung gelten soll. Für Ressourcen weist der Bereich das folgende Format auf: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. Die Vorlage verwendet die subscription().subscriptionId-Funktion zum Auffüllen der subscription-id und die resourceGroup().name-Vorlagenfunktion zum Auffüllen des resource-group-name. Die Verwendung dieser Funktionen bedeutet, dass das Lab, dem Sie eine Rolle zuweisen, im aktuellen Abonnement und in der gleichen Ressourcengruppe vorhanden sein muss, in der die Bereitstellung der Vorlage erfolgt. Der letzte Teil (resource-name) ist der Name des Labs. Dieser Wert wird in diesem Beispiel über den Vorlagenparameter empfangen.

Der Rollenbereich in der Vorlage:

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

Bereitstellen der Vorlage

Erstellen Sie zunächst eine Parameterdatei (z.B. „azuredeploy.parameters.json“), die Werte für Parameter in der Resource Manager-Vorlage übergibt.

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

Verwenden Sie dann das PowerShell-Cmdlet New-AzureRmResourceGroupDeployment, um die Resource Manager-Vorlage bereitzustellen. Der folgende Beispielbefehl weist der Rolle „DevTest Labs-Benutzer“ für ein Lab eine Person, eine Gruppe oder einen Dienstprinzipal zu.

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

Hinweis

Der Gruppenbereitstellungsname und die Rollenzuweisungs-GUID müssen eindeutig sein. Wenn Sie versuchen, eine Ressourcenzuordnung mit einer nicht eindeutigen GUID bereitzustellen, erhalten Sie einen RoleAssignmentUpdateNotPermitted-Fehler.

Wenn Sie planen, die Vorlage mehrmals zu verwenden, um mehrere Active Directory-Objekte der Rolle „DevTest Labs-Benutzer“ für Ihr Lab hinzuzufügen, sollten Sie die Verwendung dynamischer Objekte in Ihrem PowerShell-Befehl in Betracht ziehen. Das folgende Beispiel verwendet das Cmdlet New-Guid, um den Namen des Ressourcengruppenbereitstellung und die GUID der Rollenzuweisung dynamisch anzugeben.

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

Mithilfe von Azure PowerShell

Wie in der Einleitung erläutert, erstellen Sie eine neue Azure-Rollenzuweisung, um einen Benutzer der Rolle DevTest Labs-Benutzer für das Lab hinzuzufügen. In PowerShell verwenden Sie zu diesem Zweck das Cmdlet New-AzureRMRoleAssignment. Dieses Cmdlet verfügt über viele optionale Parameter, um Flexibilität zu ermöglichen. ObjectId, SigninName oder ServicePrincipalName kann als das Objekt angegeben werden, dem Berechtigungen erteilt werden.

Hier ist ein Beispiel für einen Azure PowerShell-Befehl, der einen Benutzer der Rolle „DevTest Labs-Benutzer“ im angegebenen Lab hinzufügt.

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

Um die Ressource anzugeben, der Berechtigungen erteilt werden, kann eine Kombination von ResourceName, ResourceType und ResourceGroup oder der Parameter scope verwendet werden. Unabhängig von der Kombination der verwendeten Parameter stellen Sie dem Cmdlet genügend Informationen zur Verfügung, um das Active Directory-Objekt (Benutzer, Gruppe oder Dienstprinzipal), den Bereich (Ressourcengruppe oder Ressource) und die Rollendefinition eindeutig zu identifizieren.

Mithilfe der Azure-Befehlszeilenschnittstelle

In der Azure CLI erfolgt das Hinzufügen von Lab-Benutzer*innen zu einem Lab mithilfe des Befehls az role assignment create. Weitere Informationen zu Azure CLI-Cmdlets finden Sie unter Hinzufügen oder Entfernen von Azure-Rollenzuweisungen mithilfe der Azure CLI.

Das Objekt, dem Zugriff erteilt wird, kann mit den Parametern objectId, signInName und spn angegeben werden. Das Lab, auf das dem Objekt Zugriff erteilt wird, kann durch die scope-URL oder eine Kombination der Parameter resource-name, resource-type und resource-group identifiziert werden.

Das folgende Azure CLI-Beispiel zeigt Ihnen, wie Sie eine Person der Rolle „DevTest Labs-Benutzer“ für das angegebene Lab hinzufügen können.

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ächste Schritte

Weitere Informationen finden Sie in folgenden Artikeln: