GetVirtual – Virtualization 4 All

My vision what Microsoft Virtualization and Cloud Computing bring to IT World

Como configurar os utilizadores não-administradores para controlar o Hyper-V

Por padrão o Hyper-V está configurado que somente membros do grupo de administradores podem criar e controlar máquinas virtuais. Muitas das vezes e por razões de segurança, devemos configurar um utilizador não-administrativo criar e controlar máquinas virtuais.

O Hyper-V usa a estrutura de gestão de autorização do Windows para permitir que configure o que os utilizadores podem e não podem fazer com máquinas virtuais. Isso é muito poderoso e permite algumas opções de configuração úteis e interessantes. Para definir o processo é necessário ter em conta alguns termos do mundo da estrutura de gestão de autorização:

  • OPERAÇÃO Este é o bloco de construção básico do Gestor de autorização – e representa alguma acção que o utilizador pode executar. Algumas operações que existem na store de autorização incluem op_Create_VM (o ato de criar uma nova máquina virtual) ou op_Start_VM (o ato de iniciar uma máquina virtual).
  • TAREFA Uma tarefa é um agrupamento de operações. Não se cria todas as tarefas por padrão – mas poderá criar uma tarefa que foi rotulada como ‘control_VM’ e, em seguida, adicionar as operações para iniciar, parar, pausar e reiniciar uma máquina virtual para essa tarefa.
  • PAPEL Uma função que define um trabalho/posição/responsabilidade que é realizada por um utilizador. Por exemplo, pode ter uma função chamada ‘Virtual_Network_Admin’. Este papel teria todas as tarefas e operações relacionadas a redes virtuais. Os utilizadores são então atribuídos a funções conforme necessário.
  • ESCOPO Um escopo permite que seja definido quais objectos pertencentes a quais funções. Se tiver um sistema onde queira conceder acesso administrativo a um subconjunto das máquinas virtuais para um utilizador específico – irá criar um escopo para as máquinas virtuais e aplicar as alterações de configuração só nesse âmbito.
  • ESCOPO PADRÃO O escopo padrão é onde as máquinas virtuais são armazenadas por padrão. É o equivalente a ter nenhum escopo definido.

O Hyper-V pode ser configurado para armazenar a autorização de configuração no Active Directory ou em um arquivo XML local. Após a instalação inicial será sempre configurado para usar um arquivo XML local localizado em \programdata\Microsoft\Windows\Hyper-V\InitialStore.xml na partição do sistema. Para editar este arquivo, deverá seguir os seguintes passos:

  1. Abra a caixa de diálogo Run.
  2. Inicie o MMC.exe
  3. Abrir o menu File e seleccione Add/Remove Snap-in
  4. Na lista Available snap-ins selection Authorization Manager.
  5. Clique em Add > e, em seguida, clique em OK.
  6. Clique no novo nó Authorization Manager no painel esquerdo.
  7. Abra o menu Action e selection Open Authorization Store
  8. Escolha XML file para o Seleccionar a opção Select the authorization store type: e, em seguida, usar o Browse… para abrir \programdata\Microsoft\Windows\Hyper-V\InitialStore.xml na partição do sistema (programdata é um directório oculto, então vai precisar digitar em primeiro lugar).
  9. Clique em OK.
  10. Expanda InitialStore.xml, depois Microsoft Hyper-V services, depois Role Assignments e finalmente seleccione Administrator.
  11. Abra o menu Action e selection Assign Users and Groups para depois seleccionar From Windows and Active Directory
  12. Digite o nome do utilizador que quer seja capaz de controlar o Hyper-V e clique em OK.
  13. Feche a janela do MMC.

E agora está feito. O utilizador que adicionou será capaz de controlar completamente o Hyper-V, mesmo se ele não pertença ao grupo de administradores no computador físico local.

Configuração do controle não-administrativo do Hyper-V através do PowerShell

Em algumas ocasiões é necessário configurar o Hyper-V para permitir que um utilizador não-administrativo (Ex: Administrator) possa controlar tudo no Hyper-V. Como um utilizador consciente de segurança nunca deve usar uma conta administrativa – a menos que seja absolutamente fundamental para efectuar as operações diárias. Mas muitas das vezes existe a necessidade de seguir o processo manual documentado acima para configurar.

Desta forma por utilizar o script PowerShell abaixo para fazer esta configuração de uma forma automática:

# Get current users account information

$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()

$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)

# Get the security principal for the Administrator role

$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator

# Check to see if we are currently running “as Administrator”

if ($myWindowsPrincipal.IsInRole($adminRole))

   {

   # We are running “as Administrator” – so change the title and background color to indicate this

   $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + “(Elevated)”

   $Host.UI.RawUI.BackgroundColor = “DarkBlue”

   clear-host

   }

else

   {

   # We are not running “as Administrator” – so relaunch as administrator

   # Create a new process object that starts PowerShell

   $newProcess = new-object System.Diagnostics.ProcessStartInfo “PowerShell”;

   # Specify the current script path and name as a parameter

   $newProcess.Arguments = $myInvocation.MyCommand.Definition;

   # Indicate that the process should be elevated

   $newProcess.Verb = “runas”;

   # Start the new process

   [System.Diagnostics.Process]::Start($newProcess);

   # Exit from the current, unelevated, process

   exit

   }

# Get the current AzMan store location from the registry

$AzManStoreLocation = (Get-ItemProperty -path “HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization”).StoreLocation

# Open the AzMan store

$AzManStore = new-object -ComObject “AzRoles.AzAuthorizationStore”

$AzManStore.Initialize(2, $AzManStoreLocation)

# Handle the default Hyper-V AzMan store and the SCVMM AzMan store

if (@($AzManStore.Applications | ? {$_.Name -contains “Hyper-V services”}).count -eq 1)

   {

   $HyperVAzManStore = $AzManStore.OpenApplication(“Hyper-V services”)

   }

elseif (@($AzManStore.Applications | ? {$_.Name -contains “Virtual Machine Manager”}).count -eq 1)

   {

   $HyperVAzManStore = $AzManStore.OpenApplication(“Virtual Machine Manager”)

   }

else

   {

   Write-Host “Unable to find AzMan application group.”

   Write-Host -NoNewLine “Press any key to continue…”

   $null = $Host.UI.RawUI.ReadKey(“NoEcho,IncludeKeyDown”)

   exit

   }

# Get the administrator role from the Hyper-V service in the AzMan store

$HyperVAdministratorsRole = $HyperVAzManStore.OpenRoleAssignment(“Administrator”)

# Check to see if the current user is in the Hyper-V administrator role

if (@($HyperVAdministratorsRole.Members | ? {$_ -contains $myWindowsID.User.Value}).count -eq 0)

   {

   # If no – add the user and submit the changes

   $HyperVAdministratorsRole.AddMember($myWindowsID.User.Value)

   $HyperVAdministratorsRole.Submit()

   }

Else

   {

   # If yes – inform the user that they are already a Hyper-V administrator

   Write-host $myWindowsID.Name “is already part of the Hyper-V administrators role assignment”

   Write-Host -NoNewLine “Press any key to continue…”

   $null = $Host.UI.RawUI.ReadKey(“NoEcho,IncludeKeyDown”)

   }

Algumas coisas importantes sobre este script:

  • Deve ser executado como administrador – e irá elevar mesmo que seja executado sem privilégios administrativos.
  • Irá adicionar automaticamente o utilizador actual como um administrador do Hyper-V. Se quiser adicionar outros utilizadores diferentes, irá de precisar de alterar o script.
  • Este script fala com objectos COM do AzMan – o que significa que não pode ser executado remotamente e deve ser executado directamente no servidor Hyper-V.
  • Este script irá lidar com o padrão Hyper-V e configurações de autorização do SCVMM –, mas se executar o script em um servidor autónomo Hyper-V, que mais tarde irá usar o SCVMM para gerir – vai precisar de executar o script novamente.

Leave a comment