Automatizar a adição de um usuário de laboratório a um laboratório no Azure DevTest Labs
O Azure DevTest Labs permite que você crie rapidamente ambientes de desenvolvimento e teste de autoatendimento usando o portal do Azure. No entanto, se você tiver várias equipes e várias instâncias do DevTest Labs, automatizar o processo de criação pode economizar tempo. Os modelos do Azure Resource Manager permitem criar laboratórios, VMs de laboratório, imagens personalizadas, fórmulas e adicionar utilizadores de forma automatizada. Este artigo se concentra especificamente na adição de usuários a uma instância do DevTest Labs.
Para adicionar um usuário a um laboratório, adicione o usuário à função Usuário do DevTest Labs para o laboratório. Este artigo mostra como automatizar a adição de um usuário a um laboratório usando uma das seguintes maneiras:
- Modelos do Azure Resource Manager
- Cmdlets do Azure PowerShell
- CLI do Azure.
Utilizar modelos do Azure Resource Manager
O modelo Resource Manager de exemplo a seguir especifica um usuário a ser adicionado à função Usuário do DevTest Labs de um laboratório.
{
"$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'))]"
]
}
]
}
Se você estiver atribuindo a função no mesmo modelo que está criando o laboratório, lembre-se de adicionar uma dependência entre o recurso de atribuição de função e o laboratório. Para obter mais informações, consulte o artigo Definindo dependências nos modelos do Azure Resource Manager.
Informações sobre o recurso de atribuição de função
O recurso de atribuição de função precisa especificar o tipo e o nome.
A primeira coisa a observar é que o tipo para o recurso não Microsoft.Authorization/roleAssignments
é como seria para um grupo de recursos. Em vez disso, o tipo de recurso segue o padrão {provider-namespace}/{resource-type}/providers/roleAssignments
. Nesse caso, o tipo de recurso será Microsoft.DevTestLab/labs/providers/roleAssignments
.
O próprio nome da atribuição de função precisa ser globalmente exclusivo. O nome da atribuição usa o padrão {labName}/Microsoft.Authorization/{newGuid}
. O newGuid
é um valor de parâmetro para o modelo. Ele garante que o nome da atribuição de função seja exclusivo. Como não há funções de modelo para criar GUIDs, você mesmo precisa gerar um GUID usando qualquer ferramenta geradora de GUID.
No modelo, o nome da atribuição de função é definido pela fullDevTestLabUserRoleName
variável. A linha exata do modelo é:
"fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]"
Propriedades do recurso de atribuição de função
Uma atribuição de função em si define três propriedades. Precisa do roleDefinitionId
, principalId
, e scope
.
Definição de função
O ID de definição de função é o identificador de cadeia de caracteres para a definição de função existente. O ID da função está no formato /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}
.
O ID da assinatura é obtido usando a subscription().subscriptionId
função de modelo.
Você precisa obter a definição de função para a DevTest Labs User
função interna. Para obter o GUID para a função Usuário do DevTest Labs, você pode usar a API REST de Atribuições de Função ou o cmdlet Get-AzRoleDefinition.
$dtlUserRoleDefId = (Get-AzRoleDefinition -Name "DevTest Labs User").Id
O ID da função é definido na seção de variáveis e nomeado devTestLabUserRoleId
. No modelo, a ID da função é definida como: 111111111-0000-0000-11111111111111111111.
"devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",
Principal ID
ID Principal é a ID de objeto do usuário, grupo ou entidade de serviço do Ative Directory que você deseja adicionar como um usuário de laboratório ao laboratório. O modelo usa o ObjectId
como parâmetro.
Você pode obter o ObjectId usando os cmdlets Get-AzADUser, Get-AzADGroup ou Get-AzADServicePrincipal PowerShell. Esses cmdlets retornam um único ou listas de objetos do Ative Directory que têm uma propriedade ID, que é a ID do objeto de que você precisa. O exemplo a seguir mostra como obter a ID do objeto de um único usuário em uma empresa.
$userObjectId = (Get-AzADUser -UserPrincipalName 'email@company.com').Id
Você também pode usar os cmdlets do Microsoft Graph PowerShell que incluem Get-MgUser, Get-MgGroup e Get-MgServicePrincipal.
Âmbito
Escopo especifica o recurso ou grupo de recursos ao qual a atribuição de função deve ser aplicada. Para recursos, o escopo está na forma: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}
. O modelo usa a subscription().subscriptionId
função para preencher a subscription-id
parte e a função de resourceGroup().name
modelo para preencher a resource-group-name
parte. Usar essas funções significa que o laboratório ao qual você está atribuindo uma função deve existir na assinatura atual e no mesmo grupo de recursos ao qual a implantação do modelo é feita. A última parte, resource-name
, é o nome do laboratório. Esse valor é recebido por meio do parâmetro template neste exemplo.
O escopo da função no modelo:
"roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"
Implementar o modelo
Primeiro, crie um arquivo de parâmetros (por exemplo: azuredeploy.parameters.json) que passe valores para parâmetros no modelo do 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"
}
}
}
Em seguida, use o cmdlet New-AzResourceGroupDeployment PowerShell para implantar o modelo do Resource Manager. O comando de exemplo a seguir atribui uma pessoa, grupo ou uma entidade de serviço à função Usuário do DevTest Labs para um laboratório.
New-AzResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateParameterFile .\azuredeploy.parameters.json -TemplateFile .\azuredeploy.json
Nota
O nome da implantação do grupo e o GUID da atribuição de função devem ser exclusivos. Se você tentar implantar uma atribuição de recursos usando um GUID não exclusivo, verá um RoleAssignmentUpdateNotPermitted
erro.
Se você planeja usar o modelo várias vezes para adicionar vários objetos do Ative Directory à função Usuário do DevTest Labs para seu laboratório, considere usar objetos dinâmicos no comando PowerShell. O exemplo a seguir usa o cmdlet New-Guid para especificar o nome da implantação do grupo de recursos e o GUID de atribuição de função dinamicamente.
New-AzResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "aaaaaaaa-bbbb-cccc-1111-222222222222"
Utilizar o Azure PowerShell
Conforme discutido na introdução, você cria uma nova atribuição de função do Azure para adicionar um usuário à função Usuário do DevTest Labs para o laboratório. No PowerShell, você faz isso usando o cmdlet New-AzRoleAssignment . Este cmdlet tem muitos parâmetros opcionais para permitir flexibilidade. O ObjectId
, SigninName
ou ServicePrincipalName
pode ser especificado como o objeto que está recebendo permissões.
Aqui está um exemplo de comando do Azure PowerShell que adiciona um usuário à função Usuário do DevTest Labs no laboratório especificado.
New-AzRoleAssignment -UserPrincipalName <email@company.com> -RoleDefinitionName 'DevTest Labs User' -ResourceName '<Lab Name>' -ResourceGroupName '<Resource Group Name>' -ResourceType 'Microsoft.DevTestLab/labs'
Para especificar o recurso ao qual as permissões estão sendo concedidas pode ser especificado por uma combinação de ResourceName
, ResourceType
ResourceGroup
ou pelo scope
parâmetro. Seja qual for a combinação de parâmetros usada, forneça informações suficientes ao cmdlet para identificar exclusivamente o objeto do Ative Directory (usuário, grupo ou entidade de serviço), o escopo (grupo de recursos ou recurso) e a definição de função.
Utilizar a CLI do Azure
Na CLI do Azure, adicionar um usuário de laboratório a um laboratório é feito usando o az role assignment create
comando. Para obter mais informações sobre cmdlets da CLI do Azure, consulte Adicionar ou remover atribuições de função do Azure usando a CLI do Azure.
O objeto ao qual está sendo concedido acesso pode ser especificado pelos objectId
parâmetros , signInName
. spn
O laboratório ao qual o objeto está recebendo acesso pode ser identificado pela scope
url ou por uma combinação dos resource-name
parâmetros , resource-type
e resource-group
.
O exemplo da CLI do Azure a seguir mostra como adicionar uma pessoa à função Usuário do DevTest Labs para o Laboratório especificado.
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>
Próximos passos
Consulte os seguintes artigos: