Использование PowerShell Just Enough Administration (JEA) для делегирования административных задач пользователям

Использование PowerShell Just Enough Administration (JEA) для делегирования административных задач пользователям

Технология Just Enough Administration (JEA), которая появилась в версии PowerShell 5.0, позволяет делегировать административные полномочия на все, чем можно управлять с помощью PowerShell. JEA позволяет предоставить вашим пользователям права на выполнение определенных административных задач, не предоставляя им права администратора сервера или сервиса (AD, Exchange, SharePoint и т.д.) С помощью JEA вы можете указать каким пользователям можно запускать определенные командлеты, функции или PowerShell скрипты с правами привилегированных пользователей, а также подробно логировать все действия (похоже на историю команд PowerShell).

Как использовать PowerShell Just Enough Administration?

Администратор создает на сервере конфигурационный файл сессии PowerShell и файл с командами, которые может выполнять пользователь. На основе этих файлов создается точка подключения JEA (endpoint), к которой может подключиться пользователь и выполнить в этой сессию любую из доступных ему команд или программ.

В этом примере мы покажем пример, как предоставить пользователям из группы техподдержки права на перезагрузку контроллера домен и перезапуск на нем служб DNS и ADDS.

Сначала нужно создать конфигурационный файл сессии PowerShell (
*.pssc
). Для этого на контроллере домена выполните команду:

New-PSSessionConfigurationFile -Path 'C:Program FilesWindowsPowerShelldc_manage.pssc'

Откройте созданный PSSC файл с помощью блокнота.

New-PSSessionConfigurationFile pssc конфигурационный файл Just Enough Administration

В 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:PSJEA_logs
  • Опция RunAsVirtualAccount позволяет запускать команды из-под виртуального аккаунта администратора (члена локальной группы или Administrator или Domain Admin):
    RunAsVirtualAccount = $true
Для доступа к сетевым ресурсам можно использовать управляемый аккаунт group managed service (gMSA):
GroupManagedServiceAccount = ‘DomaingMSAUserName’

В директиве RoleDefinitions нужно указать группу безопасности AD, для которой разрешено подключаться к данной сессии PowerShell и название роли JEA (должно соответствовать имени PSRC файла, которые мы создадим далее).

Например,

RoleDefinitions = @{‘TESTspbHelpDesk' = @{ RoleCapabilities = 'HelpDesk_admins' }}

Назначаем RoleDefinitions в Just Enough Administration

Сохраните конфигурационный файл сессии.

Прежде чем двигаться дальше, проверьте что в конфигурационном файле нет ошибок:

Test-PSSessionConfigurationFile -Path  'C:Program FilesWindowsPowerShelldc_manage.pssc'

Test-PSSessionConfigurationFile

Создайте новый каталог, в котором будет хранится конфигурационный файл JEA, например:

New-Item -Path 'C:Program FilesWindowsPowerShellModulesJEARoleCapabilities ' -ItemType Directory

Файлы .psrc всегда должны находится в подпапке RoleCapabilities нужного вам модуля.

Теперь в этом каталоге нужно создать конфигурационный PSRC файл с описанием роли (обязательно использовать имя файла из конфигурации PSSC выше).

New-PSRoleCapabilityFile -Path 'C:Program FilesWindowsPowerShellModulesJEARoleCapabilitiesHelpDesk_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:windowssystem32shutdown.exe'

Сохраните PSRC файл.

New-PSRoleCapabilityFile PSRC конфигурационный файл со списком команд и командлетов PowerShell, которые должны быть доступны пользователю

Теперь нужно зарегистрировать новую конфигурацию PSSession для вашего PSSC файла:

Register-PSSessionConfiguration –Name testspbHelpDesk -Path 'C:Program FilesWindowsPowerShelldc_manage.pssc'

и перезапустить WinRM:

Restart-Service WinRM

Register-PSSessionConfiguration

Вы можете вывести список доступных точек подключения JEA с помощью командлета:

Get-PSSessionConfiguration|ft name

Get-PSSessionConfiguration

Теперь проверим, как работает наша новая конфигурация 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

проверка работы Just Enough Administration в powershell - пользователю может запускать только разрешенные команды

История всех действий пользователя в PowerShell сессии JEA пишется в лог файлы в каталог C:PSJEA_logs.

Итак, JEA позволяет гранулировано выдавать пользователям права по запуску PowerShell скриптов и программ от имени администратора.

Windows Server 2016
Использование PowerShell Just Enough Administration (JEA) для делегирования административных задач пользователям