Давайте для начала разберёмся с терминологией. Что такое роли NSX-менеджера? Роли NSX-менеджера позволяют управлять правами доступа к объектам NSX с помощью присвоения той или иной роли отдельному пользователю или группе. В UI эти настройки находятся в Networking & Security -> System -> Users and Domains.
Что такое PowerNSX? PowerNSX - это PowerShell-модуль, абстрагирующий VMware NSX RESTful API в набор простых в использовании PowerShell функций. Готовой функции для управления ролями NSX-менеджера PowerNSX модуль не содержит, зато в нём есть универсальная функция для доступа к NSX API - Invoke-NsxRestMethod, которую мы и будем использовать в нашем скрипте.
Функция Add-NsxEntityRoleAssignment, как следует из её названия, присваивает какую-либо роль -Role пользователю(ям) -User или группе(ам) -Group. Параметр -Role опциональный и имеет значение по умолчанию.
Оба параметра, -User и -Group, поддерживают работу сразу с несколькими пользователями или группами, но только не одновременно. Причём объекты могут быть из разных источников, например, один из домена SSO, а другой из Active Directory.
Эта функция, как и все остальные, поддерживает такие стандартные параметры, как -Verbose, -Debug и -Confirm. Параметр -Role поддерживает Intellisense, и вам не нужно писать или помнить названия ролей.
Для того, чтобы поменять роль, вам потребуется сначала удалить существующую, а потом назначить новую. И поможет нам в этом следующая функция нашего скрипта.
Remove-NsxEntityRoleAssignment
Функция Remove-NsxEntityRoleAssignment очень похожа на предыдущую, даже имеет те же самые параметры, за исключением параметра -Role, поскольку в нём не нуждается. Она удаляет любую роль, назначенную любому пользователю(ям) -User или группе(ам) -Group.
Функция Add-NsxEntityAccessScope является изюминкой нашего скрипта, поскольку позволяет назначить не глобальную роль, а роль в рамках каких-либо объектов NSX! Начиная с версии NSX 6.2, VMware удалили опцию Limit Scope из UI, но оставили её в API. Эту ситуацию хорошо описал в своей статье Mike Da Costa, и функция Add-NsxEntityAccessScope полностью автоматизирует решение, предложенное в его статье.
Функция Add-NsxEntityAccessScope имеет один дополнительный параметр -AccessScope, который может принимать любое количество различных NSX-объектов. Объектами могут быть Edge, DLR или Logical Switch.
Поскольку одному пользователю или группе можно назначить только одну роль, т.е. добавить только один раз, следующий приём позволит добавить в Access Scope разные типы NSX объектов.
Ну и в заключение, функция Get-NsxEntityRoleAssignment. Функция очень проста в использовании, поскольку не имеет ни одного обязательного параметра. Просто подключитесь к серверу(ам) NSX Manager и запустите функцию.
Функция имеет 3 опциональных параметра, которые, в общем-то, являются фильтрами для различного рода выборок. Параметр -Entity возвращает только пользователей и группы, содержащие в имени заданное слово. Параметр позиционный и не имеет надобности в символе *.
Все функции поддерживают одновременную работу с несколькими серверами NSX Manager, но не позволяют выбрать какой-либо из них. Все функции выполняются на всех подключенных серверах NSX. Для того, чтобы убедиться куда вы подключены, проверьте значение переменной $DefaultNSXConnection или воспользуйтесь моей функцией Set-PowerCLITitle, с некоторых пор она поддерживает и серверы NSX.
Все функции поддерживают как добавление, так и удаление ролей сразу нескольким пользователям -User или группам -Group.
Скрипт содержит внутреннюю вспомогательную функцию Get-NsxRoleDisplayName, которая переводит названия ролей, которые вы видите в UI, в те, которые используются в API-запросах. Учтите, что не все роли, поддерживаемые функцией, будут поддерживаться вашей версией NSX, некоторые были добавлены, только начиная с определённой версии. Используйте параметр -Verbose при добавлении ролей, чтобы получать соответствующие уведомления об этом.