Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
После развертывания JEA необходимо регулярно проверять конфигурацию JEA. Аудит помогает оценить, что правильные пользователи имеют доступ к конечной точке JEA и их назначенные роли по-прежнему подходят.
Поиск зарегистрированных сеансов JEA на компьютере
Чтобы проверить, какие сеансы JEA зарегистрированы на компьютере, используйте командлет Get-PSSessionConfiguration .
# Filter for sessions that are configured as 'RestrictedRemoteServer' to
# find JEA-like session configurations
Get-PSSessionConfiguration | Where-Object { $_.SessionType -eq 'RestrictedRemoteServer' }
Name : JEAMaintenance
PSVersion : 5.1
StartupScript :
RunAsUser :
Permission : CONTOSO\JEA_DNS_ADMINS AccessAllowed, CONTOSO\JEA_DNS_OPERATORS AccessAllowed,
CONTOSO\JEA_DNS_AUDITORS AccessAllowed
Действующие права для конечной точки перечислены в свойстве Permission . Эти пользователи имеют право подключаться к конечной точке JEA. Однако роли и команды, к которым они имеют доступ, определяются свойством RoleDefinitions в файле конфигурации сеанса , который использовался для регистрации конечной точки. Разверните свойство RoleDefinitions , чтобы оценить сопоставления ролей в зарегистрированной конечной точке JEA.
# Get the desired session configuration
$jea = Get-PSSessionConfiguration -Name 'JEAMaintenance'
# Enumerate users/groups and which roles they have access to
$jea.RoleDefinitions.GetEnumerator() | Select-Object Name, @{
Name = 'Role Capabilities'
Expression = { $_.Value.RoleCapabilities }
}
Найдите доступные возможности роли на компьютере.
JEA получает возможности ролей из .psrc
файлов, хранящихся в папке RoleCapabilities в модуле PowerShell. Следующая функция находит все возможности ролей, доступные на компьютере.
function Find-LocalRoleCapability {
$results = @()
# Find modules with a "RoleCapabilities" subfolder and add any PSRC files to the result set
Get-Module -ListAvailable | ForEach-Object {
$psrcpath = Join-Path -Path $_.ModuleBase -ChildPath 'RoleCapabilities'
if (Test-Path $psrcpath) {
$results += Get-ChildItem -Path $psrcpath -Filter *.psrc
}
}
# Format the results nicely to make it easier to read
$results | Select-Object @{ Name = 'Name'; Expression = { $_.Name.TrimEnd('.psrc') }}, @{
Name = 'Path'; Expression = { $_.FullName }
} | Sort-Object Name
}
Замечание
Порядок результатов этой функции может не быть тем же, что и порядок выбора возможностей роли, если несколько возможностей ролей имеют одинаковые названия.
Проверка действующих прав для конкретного пользователя
Командлет Get-PSSessionCapability перечисляет все команды, доступные в конечной точке JEA на основе членства в группах пользователя. Выходные данные Get-PSSessionCapability
идентичны выходным данным, полученным указанным пользователем, работающим с Get-Command -CommandType All
в сеансе JEA.
Get-PSSessionCapability -ConfigurationName 'JEAMaintenance' -Username 'CONTOSO\Alice'
Если пользователи не являются постоянными членами групп, которые предоставляют им дополнительные права JEA, этот командлет может не отражать эти дополнительные разрешения. Это происходит при использовании систем управления привилегированным доступом 'just-in-time', чтобы разрешить пользователям временно принадлежать к группе безопасности. Тщательно оцените сопоставление пользователей с ролями и возможностями, чтобы гарантировать, что пользователи получают только уровень доступа, необходимый для успешного выполнения своих заданий.
Журналы событий PowerShell
Если вы включили модуль или ведение журнала блоков скриптов в системе, вы увидите события в журналах событий Windows для каждой команды, выполняемой пользователем в сеансе JEA. Чтобы найти эти события, откройте журнал событий Microsoft-Windows-PowerShell/Operations и найдите события с идентификатором события 4104.
Каждая запись журнала событий содержит сведения о сеансе, в котором выполнялась команда. Для сеансов JEA событие содержит сведения о ConnectedUser и RunAsUser. ConnectedUser — это фактический пользователь, создавший сеанс JEA. RunAsUser — это учетная запись JEA, используемая для выполнения команды.
Журналы событий приложения показывают изменения, внесенные RunAsUser. Поэтому для трассировки вызова определенной команды обратно к ConnectedUser требуется включить ведение журнала модулей и скриптов.
Журналы событий приложений
Команды, выполняемые в сеансе JEA, который взаимодействует с внешними приложениями или службами, могут регистрировать события в собственные журналы событий. В отличие от журналов и расшифровок PowerShell другие механизмы ведения журнала не фиксируют подключенного пользователя сеанса JEA. Вместо этого эти приложения фиксируют только виртуального пользователя, выполняющего запуск от имени другого пользователя. Чтобы определить, кто выполнил команду, необходимо обратиться к расшифровке сеанса или сопоставить журналы событий PowerShell с временем и пользователем, отображаемым в журнале событий приложения.
Журнал WinRM также может помочь сопоставить пользователей, запускающих от имени, с подключающимся пользователем в журнале событий приложения. Идентификатор события 193 в журнале Microsoft-Windows-Windows Remote Management/Operational фиксирует идентификатор безопасности (SID) и имя учетной записи как для пользователя, подключающегося к сеансу, так и для пользователя, от имени которого запускается каждый новый сеанс JEA.
Расшифровки сеансов
Если вы настроили JEA для создания расшифровки для каждого сеанса пользователя, то в указанной папке хранятся текстовые копии действий каждого пользователя.
Следующая команда (с правами администратора) находит все директории транскриптов.
Get-PSSessionConfiguration |
Where-Object { $_.TranscriptDirectory -ne $null } |
Format-Table Name, TranscriptDirectory
Каждая расшифровка начинается с сведений о времени начала сеанса, который пользователь подключен к сеансу, и какой идентификатор JEA был назначен им.
**********************
Windows PowerShell transcript start
Start time: 20160710144736
Username: CONTOSO\Alice
RunAs User: WinRM Virtual Users\WinRM VA_1_CONTOSO_Alice
Machine: SERVER01 (Microsoft Windows NT 10.0.14393.0)
[...]
Текст расшифровки содержит сведения о каждой команде, вызываемой пользователем. Точный синтаксис используемой команды недоступен в сеансах JEA из-за специфики преобразования команд для удаленного взаимодействия PowerShell. Однако вы все равно можете определить эффективную команду, которая была выполнена. Ниже приведен пример фрагмента расшифровки пользователя, работающего Get-Service Dns
в сеансе JEA:
PS>CommandInvocation(Get-Service): "Get-Service"
>> ParameterBinding(Get-Service): name="Name"; value="Dns"
>> CommandInvocation(Out-Default): "Out-Default"
>> ParameterBinding(Out-Default): name="InputObject"; value="Dns"
Running Dns DNS Server
Строка CommandInvocation записывается для каждой команды, выполняемой пользователем.
ParameterBindings записывают каждый параметр и значение, предоставленные командой. В предыдущем примере можно увидеть, что параметр Имя был предоставлен со значением Dns для командлета Get-Service
.
Выходные данные каждой команды также активируют вызов команды, как правило в Out-Default
.
InputObjectOut-Default
— это объект PowerShell, возвращаемый командой. Сведения об этом объекте печатаются несколько строк ниже, тесно имитируя то, что пользователь видел.
См. также
PowerShell