Conceder permissões de usuário para políticas específicas do laboratório

Visão geral

Este artigo ilustra como usar o PowerShell para conceder aos usuários permissões para uma determinada política de laboratório. Dessa forma, as permissões podem ser aplicadas com base nas necessidades de cada usuário. Por exemplo, talvez você queira conceder a um usuário específico a capacidade de alterar as configurações de política de VM, mas não as políticas de custo.

Políticas como recursos

Conforme discutido no artigo RBAC (controle de acesso baseado em função) do Azure, o RBAC permite o gerenciamento refinado do acesso dos recursos do Azure. Com o RBAC do Azure, você pode separar as tarefas de sua equipe de DevOps e conceder apenas o acesso necessário para que os usuários façam suas atividades.

No DevTest Labs, uma política é um tipo de recurso que habilita a ação Microsoft.DevTestLab/labs/policySets/policies/ do RBAC do Azure. Cada política do laboratório é um recurso do tipo de recurso Política, que pode ser atribuído a uma função do Azure como escopo.

Por exemplo, para conceder a permissão de leitura/gravação aos usuários para a política Tamanhos de VM permitidos, você criaria uma função personalizada que funcionasse com a ação Microsoft.DevTestLab/labs/policySets/policies/ e atribuiria essa função personalizada aos usuários adequados no escopo de Microsoft.DevTestLab/labs/policySets/policies/AllowedVmSizesInLab.

Para saber mais sobre funções personalizadas no RBAC do Azure, consulte Funções personalizadas do Azure.

Criar uma função personalizada do laboratório usando o PowerShell

Para começar, é preciso instalar o Azure PowerShell.

Depois de configurar os cmdlets do Azure PowerShell, você pode executar as seguintes tarefas:

  • Listar todas as operações/ações para um provedor de recursos
  • Listar ações em uma função específica:
  • Criar uma função personalizada

O seguinte script do PowerShell apresenta exemplos de como executar essas tarefas:

# List all the operations/actions for a resource provider.
Get-AzProviderOperation -OperationSearchString "Microsoft.DevTestLab/*"

# List actions in a particular role.
(Get-AzRoleDefinition "DevTest Labs User").Actions

# Create custom role.
$policyRoleDef = (Get-AzRoleDefinition "DevTest Labs User")
$policyRoleDef.Id = $null
$policyRoleDef.Name = "Policy Contributor"
$policyRoleDef.IsCustom = $true
$policyRoleDef.AssignableScopes.Clear()
$policyRoleDef.AssignableScopes.Add("/subscriptions/<SubscriptionID> ")
$policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/policySets/policies/*")
$policyRoleDef = (New-AzRoleDefinition -Role $policyRoleDef)

Atribuir permissões a um usuário para uma política específica usando funções personalizadas

Depois de definir suas funções personalizadas, você pode atribuí-las aos usuários. Para atribuir uma função personalizada a um usuário, você deve primeiro obter o ObjectId que representa esse usuário. Para isso, use o cmdlet Get-AzADUser.

No exemplo a seguir, o ObjectId do usuário SomeUser é 05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3.

PS C:\>Get-AzADUser -SearchString "SomeUser"

DisplayName                    Type                           ObjectId
-----------                    ----                           --------
someuser@hotmail.com                                          05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3

Depois que o usuário tiver o ObjectId e houver um nome de função personalizado, será possível atribuir essa função ao usuário com o cmdlet New-AzRoleAssignment:

PS C:\>New-AzRoleAssignment -ObjectId 05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3 -RoleDefinitionName "Policy Contributor" -Scope /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>/providers/Microsoft.DevTestLab/labs/<LabName>/policySets/default/policies/AllowedVmSizesInLab

No exemplo anterior, a política AllowedVmSizesInLab é usada. Você pode usar qualquer uma das políticas a seguir:

  • MaxVmsAllowedPerUser
  • MaxVmsAllowedPerLab
  • AllowedVmSizesInLab
  • LabVmsShutdown

Criar uma função para permitir que os usuários façam uma tarefa específica

Exemplo de um script que cria a função Usuário Avançado do DevTest Labs, que tem permissão para inicializar e desligar todas as VMs no laboratório:

    $policyRoleDef = Get-AzRoleDefinition "DevTest Labs User"
    $policyRoleDef.Actions.Remove('Microsoft.DevTestLab/Environments/*')
    $policyRoleDef.Id = $null
    $policyRoleDef.Name = "DevTest Labs Advanced User"
    $policyRoleDef.IsCustom = $true
    $policyRoleDef.AssignableScopes.Clear()
    $policyRoleDef.AssignableScopes.Add("/subscriptions/<subscription Id>")
    $policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/virtualMachines/Start/action")
    $policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/virtualMachines/Stop/action")
    $policyRoleDef = New-AzRoleDefinition -Role $policyRoleDef 

Introdução a Azure DevTest Labs

Você é novo no Azure? Crie uma conta gratuita do Azure.

Já está no Azure? Introdução ao primeiro laboratório no DevTest Labs: Introdução ao Azure DevTest Labs em minutos.

Próximas etapas

Após você tiver concedido permissões de usuário para políticas específicas do laboratório, estas são algumas das próximas etapas a serem consideradas: