Технология Just Enough Administration (JEA), которая появилась в версии PowerShell 5.0, позволяет делегировать административные полномочия на все, чем можно управлять с помощью PowerShell. JEA позволяет предоставить вашим пользователям права на выполнение определенных административных задач, не предоставляя им права администратора сервера или сервиса (AD, Exchange, SharePoint и т.д.) С помощью JEA вы можете указать каким пользователям можно запускать определенные командлеты, функции или PowerShell скрипты с правами привилегированных пользователей, а также подробно логировать все действия (похоже на историю команд PowerShell).
Администратор создает на сервере конфигурационный файл сессии PowerShell и файл с командами, которые может выполнять пользователь. На основе этих файлов создается точка подключения JEA (endpoint), к которой может подключиться пользователь и выполнить в этой сессию любую из доступных ему команд или программ.
В этом примере мы покажем пример, как предоставить пользователям из группы техподдержки права на перезагрузку контроллера домен и перезапуск на нем служб DNS и ADDS.
Сначала нужно создать конфигурационный файл сессии PowerShell (
*.pssc
). Для этого на контроллере домена выполните команду:
New-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
Откройте созданный PSSC файл с помощью блокнота.
В PSSC файле указывается кому можно подключаться к данной endpoint JEA, из-под какой учетной записи будут выполняться команды в сессии JEA.
Измените значения:
- SessionType с Default на RestrictedRemoteServer. Данный режим позволит использовать следуюшие командлеты PowerShell: Clear-Host, Exit-PSSession, Get-Command, Get-FormatData, Get-Help, Measure-Object, Out-Default и Select-Object;
- В параметре TranscriptDirectory укажите каталог (нужно создать его), в который нужно логировать все действия пользователей JEA:
TranscriptDirectory = C:\PS\JEA_logs
- Опция RunAsVirtualAccount позволяет запускать команды из-под виртуального аккаунта администратора (члена локальной группы или Administrator или Domain Admin):
RunAsVirtualAccount = $true
GroupManagedServiceAccount = ‘Domain\gMSAUserName’
В директиве RoleDefinitions нужно указать группу безопасности AD, для которой разрешено подключаться к данной сессии PowerShell и название роли JEA (должно соответствовать имени PSRC файла, которые мы создадим далее).
Например,
RoleDefinitions = @{‘TEST\spbHelpDesk' = @{ RoleCapabilities = 'HelpDesk_admins' }}
Сохраните конфигурационный файл сессии.
Test-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
Создайте новый каталог, в котором будет хранится конфигурационный файл JEA, например:
New-Item -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities ' -ItemType Directory
Теперь в этом каталоге нужно создать конфигурационный PSRC файл с описанием роли (обязательно использовать имя файла из конфигурации PSSC выше).
New-PSRoleCapabilityFile -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities\HelpDesk_admins.psrc'
В PSRC файле указывается что разрешено делать в рамках этой сессии JEA. В директиве VisibleCmdlets можно указать командлеты (и их допустимые параметры), которые разрешено использовать для данной группы пользователей.
В параметре VisibleExternalCommands можно указать внешние команды и exe файлы, которые разрешено запускать.
Например, следующая конфигурация позволит пользователям из группы spbHelpDesk перезагружать данный контроллер домена командой shutdown или командлетом Restart-Computer, и перезапускать службы DNSServer и Active Directory Domain Services командлетом Restart-Service.
VisibleCmdlets = 'Restart-Computer', @{ Name = 'Restart-Service'; Parameters = @{ Name = 'Name'; ValidateSet = 'DNS', 'NTDS' }} VisibleExternalCommands = 'c:\windows\system32\shutdown.exe'
Сохраните PSRC файл.
Теперь нужно зарегистрировать новую конфигурацию PSSession для вашего PSSC файла:
Register-PSSessionConfiguration –Name testspbHelpDesk -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
и перезапустить WinRM:
Restart-Service WinRM
Get-PSSessionConfiguration|ft name
Теперь проверим, как работает наша новая конфигурация Just-Enough-Administration (JEA). Вы можете подключиться к созданной endpoint JEA под пользователем, который состоит в группе безопасности, указанной в конфигурационном файле. Подключитесь через PowerShell Remoting к контроллеру домена (обязательно нужно указывать имя endpoint JEA):
Enter-PSSession -ComputerName dc01 -ConfigurationName testspbHelpDesk
Проверьте список доступных командлетов в вашей сессии PowerShell:
Get-Command
Как вы видите, доступно небольшое количество команд, в том числе Restart-Service и Restart-Computer. Пользователю разрешено выполнять только те действия, которые мы ему разрешили.
Попробуйте перезапустить службу DNS:
Restart-Computer dns
Служба успешно перезапустилась (команда выполняется от привилегированного пользователя с правами администратора домена).
Если попробовать перезапустить любую другую службу, которая не описана в конфигурационном файле JEA, появится ошибка:
Cannot validate argument on parameter 'Name'. The argument "spooler" does not belong to the set "DNS,NTDS" specifiedby the ValidateSet attribute. Supply an argument that is in the set and then try the command again. + CategoryInfo : InvalidData: (:) [Restart-Service], ParameterBindingValidationException
История всех действий пользователя в PowerShell сессии JEA пишется в лог файлы в каталог C:\PS\JEA_logs.
Итак, JEA позволяет гранулировано выдавать пользователям права по запуску PowerShell скриптов и программ от имени администратора.