Делегирование прав на Hyper-V. Часть 2 — присвоение области виртуальным машинам


Мы уже обсуждали общие вопросы модели делегирования Authorization Management Framework и Authorization Manager, используемый в Hyper-V. Сейчас пришло время более детально рассмотреть некоторые наиболее насущные вопросы. Большинство заказчиков, которым я рассказываю про модель делегирования в Hyper-V первым делом спрашивают меня, возможно ли делегировать пользователю или группе некоторые права на конкретную виртуальную машину. В Virtual Server 2005 единственным способом предоставления доступа к ограниченному набору ВМ являлось использование NTFS ограничений на конфигурационные файлы, так чтобы пользователи могли работать лишь с теми виртуальными машинами, на которые у них достаточно NTFS прав. Модель, используемая в Hyper-V позволяет настраивать это более гибко.


Одним из фундаментальных терминов Authorization Management Framework является Область (Scope). Что это такое я уже рассказывал, - очевидно, что для задачи делегирования прав на конкретные виртуальные машины следует создать область, содержащую данные машины. Создается область в консоли Authorization Manager.



Далее вам нужно поместить в данную область необходимые виртуальные машины. В некоторых случаях удобно для каждой ВМ создавать отдельную область, - когда вы хотите разным группам пользователей дать доступ к разным пересекающимся наборам ВМ. Иногда удобно виртуальные машины группировать в области по ролям - контроллеры, Exchange серверы, тестовые серверы отделов.


Следующим шагом станет помещение самих виртуальных машин в созданную область. Увы, этот шаг совсем не тривиален, по крайней мере пока у вас не установлен и настроен System Center Virtual Machine Manager 2008. Средств помещения виртуальной машины в заданную область в MMC консоли AzMan нет (в ней вообще не фигурируют сами ВМ), возможностей сделать это из командной строки в версии Hyper-V RC1 я не знаю. Однако, я знаю как это можно сделать через WMI запросы, а значит, это можно сделать и средствами PowerShell. Во вложении к статье вы найдете два скрипта, которые автоматизируют эту задачу. Первый скрипт - Getscope.vbs в качестве параметра требует имя виртуальной машины, а возвращает название области, которой она принадлежит. Если возвращенное значение пустое, значит виртуальная машина принадлежит к области по умолчанию (default scope). Второй скрипт Setscope.vbs в качестве параметров требует имя виртуальной машины и название созданной области, в которую вы хотите поместить виртуальную машину. В результате работы скрипта виртуальная машина переместится в указанную область.


Наиболее сложная часть на этом закончена. Далее потребуется лишь описать Задачи (Tasks) и Роли (Roles) в данной области, и связать роли с доменными пользователями или группами. Об этом я расскажу в следующий раз. Если знатоки PowerShell помогут переписать мои скрипты в виде cmdlet'ов, буду очень признателен.

VMsScopes.zip

Comments (5)

  1. Alex A says:

    Чтобы GetScope не давал ошибки, область должна быть вручную создана (на картинках в статье видно как)

    И SetScope может помещать машины только в существующую область

  2. Alex A says:

    В рамках подготовки к Virtualization Launch пришлось таки придумывать примеры. Радуйтесь 🙂

    Пример помещения ВМ в Область.

    Исхожу из того, что на сервере:

    1) Есть несколько ВМ, название части из которых начинается на "01_"

    2) Существует отдельная область с именем "01_Scope"

    Пример ниже перенесет все ВМ с именем, начинающимся с "01_" в область "01_Scope"

    $VM_Service = get-wmiobject -namespace rootvirtualization Msvm_VirtualSystemManagementService

    $ListofVMs =get-wmiobject -namespace rootvirtualization Msvm_ComputerSystem -filter  "ElementName <> Name "  | `

       where { $_.ElementName -like "01_*"}

    foreach ($VM in $ListofVMs) {

           if ( $VM -ne $Null)

           {

           $VMGlobalSetting = get-wmiobject -namespace rootvirtualization Msvm_VirtualSystemGlobalSettingData | where `

              { $_.ElementName -like "*$($VM.ElementName)*" }

            $VMGlobalSetting.ScopeOfResidence = “01_Scope”

    $VM_Service.ModifyVirtualSystem($VM.__PATH, $VMGlobalSetting.psbase.Gettext(1))

    }

    }

  3. Alex, пример выполнения команд добавьте плиз!! для таких как я в статью =)

    Для получения принадлежности к области:

    C:HVTools>Getscope.vbs "Project Server 2007"

    где – "Project Server 2007" название виртуально машины.

    Для установки принадлежности к области:

    C:HVTools>Setscope.vbs "Project Server 2007" "SharePoint Servers"

    где – "Project Server 2007" название виртуально машины.

    где – "SharePoint Servers" название области в которую помещается VM.

  4. kad says:

    воспользовался скриптами но оба выдают ошибку

    C:Getscope.vbs "service.contoso.com" -Line: 15 Chart:1 Error: Invalid parameter Code:80041008 Source:SWbemObjectSet

    что не так?

  5. alex says:

    Очень познавательно. А где можно прочитать следующую часть? я не нашёл Часть 3…

    Спасибо.

Skip to main content