Автоматизация добавления пользователя тестовой службы Azure DevTest Labs
Azure DevTest Labs позволяет быстро создавать среды самообслуживания для разработки и тестирования с помощью портала Azure. Однако если у вас несколько команд и несколько экземпляров DevTest Labs, автоматизация процесса создания позволит сэкономить время. Шаблоны Azure Resource Manager позволяют создавать тестовые службы, виртуальные машины тестовых служб, пользовательские образы, формулы, а также добавлять пользователей в автоматическом режиме. В этой статье особое внимание уделяется добавлению пользователей в экземпляр DevTest Labs.
Чтобы добавить пользователя в тестовую службу, добавьте его в роль Пользователь DevTest Labs для тестовой службы. В этой статье показано, как автоматизировать добавление пользователя в тестовую службу одним из следующих способов.
- Шаблоны Azure Resource Manager
- Командлеты Azure PowerShell
- Azure CLI.
Использование шаблонов Azure Resource Manager
В следующем примере шаблона Resourse Manager указывается пользователь, которого необходимо добавить в роль Пользователь 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'))]"
]
}
]
}
При назначении роли в том же шаблоне, который создает тестовую службу, не забудьте добавить зависимость между ресурсом назначения роли и тестовой службой. Дополнительные сведения см. в статье Определение зависимостей в шаблонах Azure Resource Manager.
Сведения о ресурсах назначения ролей
Ресурс назначения ролей должен указывать тип и имя.
Прежде всего следует отметить, что Microsoft.Authorization/roleAssignments
не является типом ресурса, как это было бы при использовании группы ресурсов. Вместо этого тип ресурса соответствует шаблону {provider-namespace}/{resource-type}/providers/roleAssignments
. В этом случае типом ресурса будет Microsoft.DevTestLab/labs/providers/roleAssignments
.
Само имя назначения ролей должно быть глобально уникальным. Имя назначения использует шаблон {labName}/Microsoft.Authorization/{newGuid}
.
newGuid
— это значение параметра для шаблона. Оно гарантирует уникальность имени назначения ролей. Так как функции шаблона для создания GUID отсутствуют, необходимо создать GUID самостоятельно с помощью любого средства создания GUID.
В шаблоне имя для назначения ролей определяется переменной fullDevTestLabUserRoleName
. Точная строка из шаблона:
"fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]"
Свойства ресурса назначения ролей
Само назначение ролей определяет три свойства. Ему требуются roleDefinitionId
, principalId
и scope
.
Определение роли
Идентификатор определения роли — это идентификатор строки для существующего определения роли. Идентификатор роли имеет форму /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}
.
Для получения идентификатора подписки используется функция шаблона subscription().subscriptionId
.
Необходимо получить определение роли для встроенной роли DevTest Labs User
. Чтобы получить GUID для роли Пользователь DevTest Labs, можно использовать REST API назначения ролей или командлет Get-AzRoleDefinition.
$dtlUserRoleDefId = (Get-AzRoleDefinition -Name "DevTest Labs User").Id
Идентификатор роли определяется в разделе переменных и получает имя devTestLabUserRoleId
. В шаблоне идентификатору роли задается следующее значение: 111111111-0000-0000-11111111111111111.
"devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",
Идентификатор субъекта
Идентификатор субъекта — это идентификатор объекта пользователя, группы или субъекта-службы AD DS, который вы хотите добавить в тестовую службу в качестве пользователя тестовой службы. Шаблон использует ObjectId
в качестве параметра.
ObjectId можно получить с помощью командлетов PowerShell Get-AzureRMADUser, [Get-AzureRMADGroup или Get-AzureRMADServicePrincipal. Эти командлеты возвращают один объект или список объектов AD DS со свойством идентификатора. Оно и является тем идентификатором объекта, который вам нужен. В следующем примере показано, как получить идентификатор объекта одного пользователя в компании.
$userObjectId = (Get-AzureRmADUser -UserPrincipalName 'email@company.com').Id
Вы также можете использовать командлеты Microsoft Graph PowerShell, которые включают Get-MgUser, Get-MgGroup и Get-MgServicePrincipal.
Область
Область указывает ресурс или группу ресурсов, к которым должно применяться назначение ролей. Для ресурсов область имеет следующий вид: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}
. Шаблон использует функцию subscription().subscriptionId
для заполнения части subscription-id
и функцию шаблона resourceGroup().name
для заполнения части resource-group-name
. Использование этих функций означает, что тестовая служба, которой назначается роль, должна существовать в текущей подписке и той же группе ресурсов, в которую выполняется развертывание шаблона. Последняя часть resource-name
— это имя тестовой службы. В данном примере это значение получается через параметр шаблона.
Область роли в шаблоне:
"roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"
Развертывание шаблона
Сначала создайте файл параметров (например, azuredeploy.parameters.json), который будет передавать значения для параметров в шаблоне 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"
}
}
}
Затем используйте командлет PowerShell New-AzureRmResourceGroupDeployment, чтобы развернуть шаблон Resource Manager. В следующем примере команда назначает пользователю, группе или субъекту-службе роль пользователя DevTest Labs для тестовой службы.
New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateParameterFile .\azuredeploy.parameters.json -TemplateFile .\azuredeploy.json
Примечание
Имя развертывания группы и GUID назначения роли должно быть уникальным. При попытке развернуть назначение ресурса с идентификатором GUID, не являющимся уникальным, вы уведите сообщение об ошибке RoleAssignmentUpdateNotPermitted
.
Если вы планируете использовать шаблон несколько раз, чтобы добавить несколько объектов AD DS к роли пользователя DevTest Labs для тестовой службы, рассмотрите возможность использования динамических объектов в команде PowerShell. В следующем примере используется командлет New-Guid для динамического задания имени развертывания группы ресурсов и GUID назначения ролей.
New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "aaaaaaaa-bbbb-cccc-1111-222222222222"
Использование Azure PowerShell
Как и говорилось во введении, вы создаете новое назначение ролей Azure, чтобы добавить пользователя в роль Пользователь DevTest Labs для тестовой службы. В PowerShell это можно сделать с помощью командлета New-AzureRMRoleAssignment. Этот командлет имеет множество необязательных параметров, что обеспечивает гибкость.
ObjectId
, SigninName
или ServicePrincipalName
можно задать как объект, которому предоставляются разрешения.
Ниже приведен пример команды Azure PowerShell, которая добавляет пользователя в роль пользователя DevTest Labs в указанной тестовой службе.
New-AzureRmRoleAssignment -UserPrincipalName <email@company.com> -RoleDefinitionName 'DevTest Labs User' -ResourceName '<Lab Name>' -ResourceGroupName '<Resource Group Name>' -ResourceType 'Microsoft.DevTestLab/labs'
Для задания ресурса, которому предоставляются разрешения, можно использовать сочетание ResourceName
, ResourceType
, ResourceGroup
или параметр scope
. Независимо от того, какое сочетание параметров используется, предоставьте командлету достаточно сведений для уникальной идентификации объекта AD DS (пользователя, группы или субъекта-службы), области (группы ресурсов или ресурса) и определения роли.
Использование Azure CLI
В Azure CLI добавление пользователя тестовой службы в тестовую службу выполняется с помощью команды az role assignment create
. Дополнительные сведения о командлетах Azure CLI см. в статье Добавление и удаление назначений ролей Azure с помощью Azure CLI.
Объект, которому предоставляется доступ, можно задать параметрами objectId
, signInName
, spn
. Тестовую службу, к которой объекту предоставляется доступ, можно идентифицировать по URL-адресу scope
или сочетанию параметров resource-name
, resource-type
и resource-group
.
В следующем примере Azure CLI показано, как добавить пользователя в роль пользователя DevTest Labs для указанной тестовой службы.
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>
Дальнейшие действия
См. следующие статьи: