Automatyzowanie dodawania użytkownika laboratorium do laboratorium w Azure DevTest Labs
Azure DevTest Labs umożliwia szybkie tworzenie samoobsługowych środowisk deweloperskich przy użyciu 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 Resource Manager określa użytkownika, który ma zostać dodany do roli użytkownika usługi DevTest Labs laboratorium.
{
"$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ę.
Pierwszą rzeczą, którą należy zauważyć, jest to, ż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 to 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 szablonu. Gwarantuje to, że nazwa przypisania roli jest unikatowa. Ponieważ nie ma funkcji szablonu do tworzenia identyfikatorów GUID, musisz wygenerować identyfikator GUID samodzielnie przy użyciu dowolnego narzędzia generatora identyfikatora GUID.
W szablonie nazwa przypisania roli jest definiowana przez zmienną fullDevTestLabUserRoleName
. Dokładny wiersz szablonu to:
"fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]"
Właściwości zasobu przypisania roli
Samo przypisanie roli definiuje trzy właściwości. Wymaga roleDefinitionId
, principalId
i scope
.
Definicja roli
Identyfikator definicji roli to identyfikator ciągu 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 definiowany w sekcji zmiennych i o nazwie devTestLabUserRoleId
. W szablonie identyfikator roli jest ustawiony na: 11111111111-0000-0000-11111111111111111111111111111.
"devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",
Identyfikator podmiotu zabezpieczeń
Identyfikator podmiotu zabezpieczeń to identyfikator obiektu użytkownika, grupy lub jednostki usługi usługi Active Directory, którą chcesz dodać jako użytkownik laboratorium. Szablon używa parametru ObjectId
jako parametru.
Identyfikator ObjectId można uzyskać przy użyciu poleceń cmdlet get-AzureRMADUser[ Get-AzureRMADGroup lub Get-AzureRMADServicePrincipal programu PowerShell. Te polecenia cmdlet zwracają pojedynczą 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-AzureRmADUser -UserPrincipalName 'email@company.com').Id
Możesz również użyć poleceń cmdlet programu PowerShell programu Microsoft Graph, które obejmują polecenia cmdlet Get-MgUser, Get-MgGroup i Get-MgServicePrincipal.
Zakres
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, aby wypełnić subscription-id
część i funkcję szablonu resourceGroup().name
resource-group-name
, aby wypełnić tę część. 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 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-AzureRmResourceGroupDeployment Programu PowerShell, aby wdrożyć szablon 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-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateParameterFile .\azuredeploy.parameters.json -TemplateFile .\azuredeploy.json
Uwaga
Nazwa wdrożenia grupy i identyfikator GUID przypisania roli muszą być unikatowe. Jeśli spróbujesz wdrożyć przypisanie zasobu przy użyciu nie unikatowego identyfikatora RoleAssignmentUpdateNotPermitted
GUID, zostanie wyświetlony błąd.
Jeśli planujesz kilka razy użyć szablonu, 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 w celu dynamicznego określenia nazwy wdrożenia grupy zasobów i identyfikatora GUID przypisania roli.
New-AzureRmResourceGroupDeployment -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
Jak wspomniano 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 można to zrobić za pomocą polecenia cmdlet New-AzureRMRoleAssignment . To polecenie cmdlet ma wiele opcjonalnych parametrów, aby zapewnić elastyczność. Obiekt ObjectId
, SigninName
lub ServicePrincipalName
można określić jako obiekt, któremu przyznano uprawnienia.
Oto przykładowe polecenie Azure PowerShell, które dodaje użytkownika do roli Użytkownika usługi DevTest Labs w określonym laboratorium.
New-AzureRmRoleAssignment -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 udzielono uprawnień, można określić za pomocą kombinacji parametru ResourceName
, ResourceType
ResourceGroup
lub parametru scope
. Niezależnie od kombinacji parametrów, podaj wystarczające informacje do polecenia cmdlet, aby jednoznacznie zidentyfikować obiekt usługi Active Directory (użytkownik, grupa lub jednostka usługi), zakres (grupa 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ę za pomocą 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 resource-name
parametrów , 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
Zobacz 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 Azure PowerShell
- Uruchamianie i zatrzymywanie maszyn wirtualnych Azure DevTest Labs za pomocą narzędzi wiersza polecenia