SCREENCAST : Delegar Permisos sobre la administración de Hyper-v a Usuarios que no son Administradores con powershell

Hola a Todos, como ya conté el la parte UNO, DOS y TRES del post 
Seguridad en Hyper-V : Administrador de autorización para su correcta delegación”

La administración de Hyper-v se puede delegar a usuarios que incluso no son Administradores del dominio, ni de la maquina local

Ahora automatizaremos todo con Powershell y asignaremos permisos de administrador a usuarios que tiene una cuanta común y corriente del Dominio y necesiten administrar Hyper-v desde Windows 7

El siguiente script esta basado en uno que realizo el Program Manager de Hyper-v, pero le realice algunos cambios para hacerlo mas amigable al Usuario y que se puedan conectar de forma remota

Cuales son los pasos entonces:

  1. Ver si mi HOST esta manejado por Hyper-v manager o por SCVMM
  2. Agregar al usuario al grupo administradores de hyper-v dentro del archivo del autorization Manager
  3. Agregar al usuario al Grupo “Usuarios COM distribuidos”
  4. Conceder los permisos de Seguridad WMI sobre CIMV2 y Virtualization
 

#Traemos el Nombre del Computador

$computerName
=$env:Computername

#Traemos el Nombre del Dominio

$domainName
=[Environment]::UserDomainName

#Caputamos el Nombre del Usuario

$UserName= Read-Host «Ingrese el Nombre de Usuario «

$myWindowsID = ([Security.Principal.WindowsIdentity]$UserName)

$COM=«Usuarios COM distribuidos»

#Lo agregamos al Grupo COM distribuidos


([ADSI]«WinNT://$computerName/$COM,group»).Add(«WinNT://$domainName/$UserName»)

#Buscamos el XML que tiene al almacen de autorizacion



$AzManStoreLocation
= (Get-ItemProperty –path «HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionVirtualization»).StoreLocation

#Abrimos y lo almacenamos en una variable

$AzManStore = new-object -ComObject «AzRoles.AzAuthorizationStore»

$AzManStore.Initialize(2, $AzManStoreLocation)

#Vemos si el servidor es manejado por Hyper-v Service o por SCVMM

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 «NO encontre Azman»

   Write-Host -NoNewLine «Presione Cualquier tecla para continuar…»

   $null = $Host.UI.RawUI.ReadKey(«NoEcho,IncludeKeyDown»)

   exit

   }

 
# Traemos el rol de administrador desde el Azman

$HyperVAdministratorsRole = $HyperVAzManStore.OpenRoleAssignment(«Administrator»)

# vemos si el usuario ya esta en ese rol

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

   {

   # Si no esta lo agregamos 
   $HyperVAdministratorsRole.AddMember($myWindowsID.User.Value)

   $HyperVAdministratorsRole.Submit()

   }

Else

   {

   # Si está, le avisamos al usuario quer ya existe 
   Write-host $myWindowsID.Name «El usuario ya es miembro de administradores de HV»

   Write-Host -NoNewLine «Presione Cualquier tecla para continuar….»

   $null = $Host.UI.RawUI.ReadKey(«NoEcho,IncludeKeyDown»)

   }

Guardamos Este Script como AdminHV.ps1 y lo ejecutamos

Cuando nos pregunte por el usuario, agregamos al usuario común y corriente ej: Hypervtest

Con este Script cubrimos los puntos 1,2,3

Cubrir el punto 4 es bastante complejo, pero la gente de WMI de MSFT realizo un script que puede hacer justo lo que necesitamos

http://blogs.msdn.com/b/wmi/archive/2009/07/27/scripting-wmi-namespace-security-part-3-of-3.aspx

Imaginamos que el nombre del dominio se llama CAPACITA y el usuario se llama Hypervtest

Entonces ahora ejecuto el Script que descargamos desde la pagina anterior

Set-WmiNamespaceSecurity root/cimv2 add CAPACITAHypervtest Enable,RemoteAccess

Set-WmiNamespaceSecurity root/virtualization add CAPACITAHypervtest Enable,RemoteAccess

Como se pueden dar cuenta agrego al usuario CAPACITAHypervtest  al espacio de nombre Cimv2 con el derecho de acceso remoto, del mismo modo sobre virtualization

Con un Video todo queda mas claro

Les dejo los 2 Script

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *