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
, principalId
i 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-name
nazwa 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
, SigninName
lub 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
, ResourceType
ResourceGroup
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
, . signInName
spn
Laboratorium, do którego obiekt otrzymuje dostęp, można zidentyfikować za pomocą scope
adresu URL lub kombinacji parametrów resource-name
, resource-type
i 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:
- Tworzenie maszyn wirtualnych i zarządzanie nimi za pomocą usługi DevTest Labs przy użyciu interfejsu wiersza polecenia platformy Azure
- Tworzenie maszyny wirtualnej za pomocą usługi DevTest Labs przy użyciu programu Azure PowerShell
- Uruchamianie i zatrzymywanie maszyn wirtualnych usługi Azure DevTest Labs przy użyciu narzędzi wiersza polecenia