Udostępnij za pośrednictwem


Automatyzowanie dodawania użytkownika laboratorium do laboratorium w usłudze Azure DevTest Labs

Usługa Azure DevTest Labs umożliwia szybkie tworzenie samoobsługowych środowisk deweloperskich przy użyciu witryny Azure Portal. Jeśli jednak masz kilka zespołów i kilka wystąpień usługi DevTest Labs, automatyzacja procesu tworzenia może zaoszczędzić czas. Szablony usługi Azure Resource Manager umożliwiają tworzenie laboratoriów, maszyn wirtualnych laboratoriów, obrazów niestandardowych, formuł i dodawanie użytkowników w zautomatyzowany sposób. Ten artykuł koncentruje się konkretnie na dodawaniu użytkowników do wystąpienia usługi DevTest Labs.

Aby dodać użytkownika do laboratorium, należy dodać użytkownika do roli użytkownika usługi DevTest Labs dla laboratorium. W tym artykule pokazano, jak zautomatyzować dodawanie użytkownika do laboratorium przy użyciu jednego z następujących sposobów:

  • Szablony usługi Azure Resource Manager
  • Polecenia cmdlet programu Azure PowerShell
  • Interfejs wiersza polecenia platformy Azure.

Korzystanie z szablonów usługi Azure Resource Manager

Poniższy przykładowy szablon usługi Resource Manager określa użytkownika, który ma zostać dodany do roli użytkownika laboratorium DevTest Labs.

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

Jeśli przypisujesz rolę w tym samym szablonie, który tworzy laboratorium, pamiętaj, aby dodać zależność między zasobem przypisania roli a laboratorium. Aby uzyskać więcej informacji, zobacz Artykuł Definiowanie zależności w szablonach usługi Azure Resource Manager.

Informacje o zasobie przypisania roli

Zasób przypisania roli musi określać typ i nazwę.

Należy pamiętać, że typ zasobu nie Microsoft.Authorization/roleAssignments jest taki, jak w przypadku grupy zasobów. Zamiast tego typ zasobu jest zgodny ze wzorcem {provider-namespace}/{resource-type}/providers/roleAssignments. W takim przypadku typ zasobu będzie mieć wartość Microsoft.DevTestLab/labs/providers/roleAssignments.

Sama nazwa przypisania roli musi być globalnie unikatowa. Nazwa przypisania używa wzorca {labName}/Microsoft.Authorization/{newGuid}. Jest newGuid to wartość parametru dla szablonu. Gwarantuje to, że nazwa przypisania roli jest unikatowa. Ponieważ nie ma funkcji szablonu do tworzenia identyfikatorów GUID, musisz samodzielnie wygenerować identyfikator GUID przy użyciu dowolnego narzędzia generatora identyfikatora GUID.

W szablonie nazwa przypisania roli jest definiowana przez zmienną fullDevTestLabUserRoleName . Dokładny wiersz z szablonu to:

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

Właściwości zasobu przypisania roli

Przypisanie roli definiuje trzy właściwości. Potrzebuje parametrów roleDefinitionId, principalIdi scope.

Definicja roli

Identyfikator definicji roli to identyfikator ciągu dla istniejącej definicji roli. Identyfikator roli ma postać /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

Identyfikator subskrypcji jest uzyskiwany przy użyciu subscription().subscriptionId funkcji szablonu.

Musisz uzyskać definicję roli dla roli wbudowanej DevTest Labs User . Aby uzyskać identyfikator GUID roli użytkownika usługi DevTest Labs, możesz użyć interfejsu API REST przypisania ról lub polecenia cmdlet Get-AzRoleDefinition.

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

Identyfikator roli jest zdefiniowany w sekcji zmiennych i o nazwie devTestLabUserRoleId. W szablonie identyfikator roli jest ustawiony na: 11111111111-0000-0000-1111111111111111111111111.

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

Identyfikator podmiotu zabezpieczeń

Identyfikator podmiotu zabezpieczeń to identyfikator obiektu użytkownika usługi Active Directory, grupy lub jednostki usługi, którą chcesz dodać jako użytkownik laboratorium do laboratorium. Szablon używa parametru ObjectId jako parametru.

Identyfikator ObjectId można uzyskać przy użyciu poleceń cmdlet get-AzADUser, Get-AzADGroup lub Get-AzADServicePrincipal programu PowerShell. Te polecenia cmdlet zwracają jedną lub listę obiektów usługi Active Directory, które mają właściwość ID, czyli identyfikator obiektu, którego potrzebujesz. W poniższym przykładzie pokazano, jak uzyskać identyfikator obiektu pojedynczego użytkownika w firmie.

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

Możesz również użyć poleceń cmdlet programu PowerShell programu Microsoft Graph, które obejmują polecenia Get-MgUser, Get-MgGroup i Get-MgServicePrincipal.

Scope

Zakres określa zasób lub grupę zasobów, dla której ma być stosowane przypisanie roli. W przypadku zasobów zakres ma postać: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. Szablon używa subscription().subscriptionId funkcji do wypełnienia subscription-id części i funkcji szablonu resourceGroup().name resource-group-name w celu wypełnienia części. Użycie tych funkcji oznacza, że laboratorium, do którego przypisujesz rolę, musi istnieć w bieżącej subskrypcji i tej samej grupie zasobów, do której jest wykonywane wdrożenie szablonu. Ostatnia część to resource-namenazwa laboratorium. Ta wartość jest odbierana za pośrednictwem parametru szablonu w tym przykładzie.

Zakres roli w szablonie:

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

Wdrażanie szablonu

Najpierw utwórz plik parametrów (na przykład: azuredeploy.parameters.json), który przekazuje wartości parametrów w szablonie usługi Resource Manager.

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

Następnie użyj polecenia cmdlet New-AzResourceGroupDeployment programu PowerShell, aby wdrożyć szablon usługi Resource Manager. Poniższe przykładowe polecenie przypisuje osobę, grupę lub jednostkę usługi do roli użytkownika usługi DevTest Labs dla laboratorium.

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

Uwaga

Nazwa wdrożenia grupy i identyfikator GUID przypisania roli musi być unikatowy. Jeśli spróbujesz wdrożyć przypisanie zasobu przy użyciu nietypowego identyfikatora GUID, zostanie wyświetlony RoleAssignmentUpdateNotPermitted błąd.

Jeśli planujesz użyć szablonu kilka razy, aby dodać kilka obiektów usługi Active Directory do roli użytkownika usługi DevTest Labs dla laboratorium, rozważ użycie obiektów dynamicznych w poleceniu programu PowerShell. W poniższym przykładzie użyto polecenia cmdlet New-Guid , aby dynamicznie określić nazwę wdrożenia grupy zasobów i identyfikator GUID przypisania roli.

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

Korzystanie z programu Azure PowerShell

Zgodnie z opisem we wprowadzeniu utworzysz nowe przypisanie roli platformy Azure, aby dodać użytkownika do roli użytkownika usługi DevTest Labs dla laboratorium. W programie PowerShell należy to zrobić za pomocą polecenia cmdlet New-AzRoleAssignment . To polecenie cmdlet ma wiele parametrów opcjonalnych, aby zapewnić elastyczność. Element ObjectId, SigninNamelub ServicePrincipalName można określić jako obiekt, któremu przyznano uprawnienia.

Oto przykładowe polecenie programu Azure PowerShell, które dodaje użytkownika do roli użytkownika usługi DevTest Labs w określonym laboratorium.

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

Aby określić zasób, do którego są przyznawane uprawnienia, można określić za pomocą kombinacji parametru ResourceName, ResourceTypeResourceGroup lub parametru scope . Niezależnie od kombinacji parametrów, podaj wystarczającą ilość informacji do polecenia cmdlet, aby jednoznacznie zidentyfikować obiekt usługi Active Directory (użytkownika, grupę lub jednostkę usługi), zakres (grupę zasobów lub zasób) i definicję roli.

Interfejs wiersza polecenia platformy Azure

W interfejsie wiersza polecenia platformy Azure dodawanie użytkownika laboratorium do laboratorium odbywa się przy użyciu az role assignment create polecenia . Aby uzyskać więcej informacji na temat poleceń cmdlet interfejsu wiersza polecenia platformy Azure, zobacz Dodawanie lub usuwanie przypisań ról platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

Obiekt, któremu udzielono dostępu, można określić za pomocą parametrów objectId, . signInNamespn Laboratorium, do którego obiekt otrzymuje dostęp, można zidentyfikować za pomocą scope adresu URL lub kombinacji parametrów resource-name, resource-typei resource-group .

Poniższy przykład interfejsu wiersza polecenia platformy Azure pokazuje, jak dodać osobę do roli użytkownika usługi DevTest Labs dla określonego laboratorium.

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>

Następne kroki

Odwiedź następujące artykuły: