Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Depois de implantar o JEA, você precisa auditar regularmente a configuração do JEA. A auditoria ajuda a avaliar se as pessoas corretas têm acesso ao ponto de extremidade JEA e se suas funções atribuídas ainda são apropriadas.
Encontre sessões JEA registadas numa máquina
Para verificar quais sessões JEA estão registradas em uma máquina, use o cmdlet 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
Os direitos efetivos para o ponto de extremidade estão listados na propriedade Permissão . Esses utilizadores têm o direito de se conectar ao ponto de extremidade JEA. No entanto, as funções e comandos aos quais eles têm acesso são determinados pela propriedade RoleDefinitions no arquivo de configuração de sessão que foi usado para registrar o ponto de extremidade. Expanda a propriedade RoleDefinitions para avaliar os mapeamentos de função num ponto de extremidade JEA registado.
# 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 }
}
Encontre capacidades de funções disponíveis na máquina
O JEA obtém capacidades de função dos .psrc arquivos armazenados na pasta RoleCapabilities dentro de um módulo do PowerShell. A função a seguir localiza todas as capacidades de função disponíveis em um computador.
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
}
Observação
A ordem dos resultados dessa função não é necessariamente a ordem na qual os recursos de função serão selecionados se vários recursos de função compartilharem o mesmo nome.
Verificar os direitos efetivos de um utilizador específico
O cmdlet Get-PSSessionCapability enumera todos os comandos disponíveis em um ponto de extremidade JEA com base nas associações de grupo de um usuário. A saída de Get-PSSessionCapability é idêntica à do usuário especificado em execução Get-Command -CommandType All em uma sessão JEA.
Get-PSSessionCapability -ConfigurationName 'JEAMaintenance' -Username 'CONTOSO\Alice'
Se os usuários não forem membros permanentes de grupos que lhes concederiam direitos JEA adicionais, esse cmdlet pode não refletir essas permissões extras. Isso acontece ao usar sistemas de gerenciamento de acesso privilegiado just-in-time para permitir que os usuários pertençam temporariamente a um grupo de segurança. Avalie cuidadosamente o mapeamento de usuários para funções e recursos para garantir que os usuários obtenham apenas o nível de acesso necessário para realizar seus trabalhos com êxito.
Logs de eventos do PowerShell
Se você habilitou o registro em log de bloco de módulo ou script no sistema, poderá ver eventos nos logs de eventos do Windows para cada comando que um usuário executa em uma sessão JEA. Para localizar esses eventos, abra o log de eventos Microsoft-Windows-PowerShell/Operational e procure eventos com a ID de evento 4104.
Cada entrada de log de eventos inclui informações sobre a sessão na qual o comando foi executado. Para sessões JEA, o evento inclui informações sobre o ConnectedUser e o RunAsUser. O ConnectedUser é o usuário real que criou a sessão JEA. O RunAsUser é a conta JEA usada para executar o comando.
Os logs de eventos do aplicativo mostram as alterações que estão sendo feitas pelo RunAsUser. Portanto, ter o registo de logs de módulos e scripts ativado é necessário para rastrear uma invocação específica de comando até ao ConnectedUser.
Logs de eventos do aplicativo
Os comandos executados em uma sessão JEA que interagem com aplicativos ou serviços externos podem registrar eventos em seus próprios logs de eventos. Ao contrário dos logs e transcrições do PowerShell, outros mecanismos de log não capturam o usuário conectado da sessão JEA. Em vez disso, esses aplicativos registram apenas o usuário virtual executado como. Para determinar quem executou o comando, você precisa consultar uma transcrição de sessão ou correlacionar os logs de eventos do PowerShell com a hora e o usuário mostrados no log de eventos do aplicativo.
O registo do WinRM também pode ajudá-lo a correlacionar os utilizadores "run-as" com o utilizador que se conecta num registo de eventos da aplicação. A ID de Evento 193 no log de Gerenciamento Remoto/Operacional da Microsoft-Windows-Windows registra o identificador de segurança (SID) e o nome da conta para o usuário conectado e executado como usuário para cada nova sessão JEA.
Transcrições das sessões
Se você configurou o JEA para criar uma transcrição para cada sessão de usuário, uma cópia de texto das ações de cada usuário será armazenada na pasta especificada.
O comando a seguir (como administrador) localiza todos os diretórios de transcrição.
Get-PSSessionConfiguration |
Where-Object { $_.TranscriptDirectory -ne $null } |
Format-Table Name, TranscriptDirectory
Cada transcrição começa com informações sobre a hora em que a sessão começou, qual usuário se conectou à sessão e qual identidade JEA foi atribuída a eles.
**********************
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)
[...]
O corpo da transcrição contém informações sobre cada comando que o usuário invocou. A sintaxe exata do comando usado não está disponível em sessões JEA devido à maneira como os comandos são transformados para a comunicação remota do PowerShell. No entanto, você ainda pode determinar o comando efetivo que foi executado. Abaixo está um exemplo de trecho de transcrição de um usuário em execução Get-Service Dns em uma sessão 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
Uma linha CommandInvocation é escrita para cada comando executado por um usuário.
ParameterBindings registram cada parâmetro e valor fornecido com o comando. No exemplo anterior, você pode ver que o parâmetro Name foi fornecido com o valor Dns para o Get-Service cmdlet.
A saída de cada comando também dispara um CommandInvocation, geralmente para Out-Default. O InputObject of Out-Default é o objeto do PowerShell retornado do comando. Os detalhes desse objeto são impressos algumas linhas abaixo, imitando de perto o que o usuário teria visto.