Partilhar via


Automatizar a adição de um utilizador de laboratório a um laboratório no Azure DevTest Labs

Azure DevTest Labs permite-lhe criar rapidamente ambientes self-service dev-test com o portal do Azure. No entanto, se tiver várias equipas e várias instâncias do DevTest Labs, automatizar o processo de criação pode poupar tempo. Os modelos de Resource Manager do Azure permitem-lhe criar laboratórios, VMs de laboratório, imagens personalizadas, fórmulas e adicionar utilizadores de forma automatizada. Este artigo foca-se especificamente em adicionar utilizadores a uma instância do DevTest Labs.

Para adicionar um utilizador a um laboratório, adicione o utilizador à função DevTest Labs User do laboratório. Este artigo mostra-lhe como automatizar a adição de um utilizador a um laboratório através de uma das seguintes formas:

  • Modelos do Azure Resource Manager
  • Cmdlets do Azure PowerShell
  • CLI do Azure.

Use Azure Resource Manager templates (Utilizar modelos do Azure Resource Manager)

O exemplo seguinte Resource Manager modelo especifica um utilizador a ser adicionado à função de Utilizador 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 estiver a atribuir a função no mesmo modelo que está a criar o laboratório, lembre-se de adicionar uma dependência entre o recurso de atribuição de funções e o laboratório. Para obter mais informações, veja o artigo Definir dependências no Azure Resource Manager Templates.

Informações de Recursos de Atribuição de Funções

O recurso de atribuição de funções tem de especificar o tipo e o nome.

A primeira coisa a ter em atenção é 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. Neste caso, o tipo de recurso será Microsoft.DevTestLab/labs/providers/roleAssignments.

O próprio nome da atribuição de funções tem de ser globalmente exclusivo. O nome da atribuição utiliza o padrão {labName}/Microsoft.Authorization/{newGuid}. É newGuid um valor de parâmetro para o modelo. Garante que o nome da atribuição de função é exclusivo. Uma vez que não existem funções de modelo para criar GUIDs, tem de gerar um GUID por si próprio através de qualquer ferramenta de gerador 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ções

Uma atribuição de função em si define três propriedades. Precisa de , roleDefinitionIdprincipalIde scope.

Definição de Função

O ID de definição de função é o identificador de cadeia para a definição de função existente. O ID da função está no formulário /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

O ID da subscrição é obtido com a subscription().subscriptionId função de modelo.

Tem de obter a definição de função para a função DevTest Labs User incorporada. Para obter o GUID para a função de Utilizador do DevTest Labs , pode utilizar a API REST de Atribuições de Funções ou o cmdlet Get-AzRoleDefinition .

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

O ID da função é definido na secção de variáveis e com o nome devTestLabUserRoleId. No modelo, o ID da função está definido como: 11111111111-0000-0000-11111111111111111111111111.

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

Principal ID

O ID principal é o ID de objeto do utilizador, grupo ou principal de serviço do Active Directory que pretende adicionar como utilizador de laboratório ao laboratório. O modelo utiliza o ObjectId como um parâmetro.

Pode obter o ObjectId com os cmdlets Get-AzureRMADUser, [Get-AzureRMADGroup ou Get-AzureRMADServicePrincipal PowerShell. Estes cmdlets devolvem uma única ou listas de objetos do Active Directory que têm uma propriedade de ID, que é o ID do objeto de que precisa. O exemplo seguinte mostra-lhe como obter o ID de objeto de um único utilizador numa empresa.

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

Também pode utilizar os cmdlets do PowerShell do Microsoft Graph que incluem Get-MgUser, Get-MgGroup e Get-MgServicePrincipal.

Âmbito

O âmbito especifica o recurso ou grupo de recursos para o qual a atribuição de função deve ser aplicada. Para recursos, o âmbito está no formulário: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. O modelo utiliza 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 peça. Utilizar estas funções significa que o laboratório ao qual está a atribuir uma função tem de existir na subscrição atual e no mesmo grupo de recursos ao qual a implementação do modelo é efetuada. A última parte, resource-name, é o nome do laboratório. Este valor é recebido através do parâmetro de modelo neste exemplo.

O âmbito da função no modelo:

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

Implementar o modelo

Em primeiro lugar, crie um ficheiro de parâmetros (por exemplo: azuredeploy.parameters.json) que transmita valores para parâmetros no modelo de 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, utilize o cmdlet New-AzureRmResourceGroupDeployment powerShell para implementar o modelo de Resource Manager. O seguinte comando de exemplo atribui uma pessoa, grupo ou um principal de serviço à função de Utilizador do DevTest Labs para um laboratório.

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

Nota

O nome da implementação do grupo e o GUID da atribuição de funções têm de ser exclusivos. Se tentar implementar uma atribuição de recursos com um GUID não exclusivo, verá um RoleAssignmentUpdateNotPermitted erro.

Se planear utilizar o modelo várias vezes para adicionar vários objetos do Active Directory à função de Utilizador do DevTest Labs para o seu laboratório, considere utilizar objetos dinâmicos no comando do PowerShell. O exemplo seguinte utiliza o cmdlet New-Guid para especificar dinamicamente o nome da implementação do grupo de recursos e o GUID da atribuição de funções.

New-AzureRmResourceGroupDeployment -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 abordado na introdução, vai criar uma nova atribuição de função do Azure para adicionar um utilizador à função de Utilizador do DevTest Labs para o laboratório. No PowerShell, pode fazê-lo com o cmdlet New-AzureRMRoleAssignment . Este cmdlet tem muitos parâmetros opcionais para permitir flexibilidade. O ObjectId, SigninNameou ServicePrincipalName pode ser especificado como o objeto a ser concedido permissões.

Eis um exemplo Azure PowerShell comando que adiciona um utilizador à função de Utilizador do DevTest Labs no laboratório especificado.

New-AzureRmRoleAssignment -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 a ser concedidas, pode ser especificado por uma combinação de ResourceName, ResourceTypeResourceGroup ou pelo scope parâmetro. Seja qual for a combinação de parâmetros utilizada, forneça informações suficientes ao cmdlet para identificar exclusivamente o objeto do Active Directory (utilizador, grupo ou principal de serviço), âmbito (grupo de recursos ou recurso) e definição de função.

Utilizar a CLI do Azure

Na CLI do Azure, a adição de um utilizador de laboratório a um laboratório é feita com o az role assignment create comando . Para obter mais informações sobre os cmdlets da CLI do Azure, veja Adicionar ou remover atribuições de funções do Azure com a CLI do Azure.

O objeto a quem está a ser concedido acesso pode ser especificado pelos objectIdparâmetros , signInName. spn O laboratório ao qual o objeto está a receber acesso pode ser identificado pelo URL ou por scope uma combinação dos resource-nameparâmetros , resource-typee resource-group .

O exemplo seguinte da CLI do Azure mostra-lhe como adicionar uma pessoa à função de Utilizador 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>

Passos seguintes

Consulte os seguintes artigos: