Auditoria e relatórios no JEA (Just Enough Administration)Auditing and Reporting on JEA

Aplica-se a: Windows PowerShell 5.0Applies to: Windows PowerShell 5.0

Após ter implantado o JEA, você desejará auditar regularmente a configuração JEA.After you've deployed JEA, you will want to regularly audit the JEA configuration. Isso ajudará 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.This will help you assess if the correct people have access to the JEA endpoint and if their assigned roles are still appropriate.

Este tópico descreve as várias maneiras para fazer auditoria em um ponto de extremidade JEA.This topic describes the various ways you can audit a JEA endpoint.

Encontre sessões JEA registradas em um computadorFind registered JEA sessions on a machine

Para verificar quais sessões JEA estão registradas em um computador, use o cmdlet Get-PSSessionConfiguration.To check which JEA sessions are registered on a machine, use the Get-PSSessionConfiguration cmdlet.

# Filter for sessions that are configured as 'RestrictedRemoteServer' to find JEA-like session configurations
PS C:\> 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 do ponto de extremidade estão listados na propriedade "Permissão".The effective rights for the endpoint are listed in the "Permission" property. Esses usuários têm o direito de conectar-se ao ponto de extremidade JEA, mas as funções (e, por extensão, os comandos) aos quais eles têm acesso é determinado pelo campo "RoleDefinitions" no arquivo de configuração de sessão que foi usado para registrar o ponto de extremidade.These users have the right to connect to the JEA endpoint, but which roles (and, by extension, commands) they have access to is determined by the "RoleDefinitions" field in the session configuration file that was used to register the endpoint.

Você pode avaliar os mapeamentos de função em um ponto de extremidade JEA registrado expandindo os dados na propriedade "RoleDefinitions".You can evaluate the role mappings in a registered JEA endpoint by expanding the data in the "RoleDefinitions" property.

# 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 recursos de função disponíveis no computadorFind available role capabilities on the machine

Os arquivos de capacidade da função serão usados pelo JEA somente se estiverem armazenados em uma pasta "RoleCapabilities" dentro de um módulo de PowerShell válido.Role capability files will only be used by JEA if they are stored in a "RoleCapabilities" folder inside a valid PowerShell module. Você pode localizar todos os recursos de função disponíveis em um computador, pesquisando a lista de módulos disponíveis.You can find all role capabilities available on a computer by searching the list of available modules.

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 compartilham o mesmo nome.The order of results from this function is not necessarily the order in which the role capabilities will be selected if multiple role capabilities share the same name.

Verifique os direitos efetivos de um usuário específicoCheck effective rights for a specific user

Depois de configurar um ponto de extremidade JEA, convém verificar quais comandos estão disponíveis a um usuário específico em uma sessão JEA.Once you have set up a JEA endpoint, you may want to check which commands are available to a specific user in a JEA session. Você pode usar Get-PSSessionCapability para enumerar todos os comandos aplicáveis a um usuário se os usuários fossem iniciar uma sessão JEA com suas associações de grupo atual.You can use Get-PSSessionCapability to enumerate all of the commands applicable to a user if they were to start a JEA session with their current group memberships. A saída de Get-PSSessionCapability é idêntica à saída do usuário especificado executando o Get-Command -CommandType All em uma sessão JEA.The output of Get-PSSessionCapability is identical to that of the specified user running Get-Command -CommandType All in a JEA session.

Get-PSSessionCapability -ConfigurationName 'JEAMaintenance' -Username 'CONTOSO\Alice'

Se os usuários não forem membros permanentes de grupos que concederiam a eles direitos adicionais de JEA, esse cmdlet poderá não refletir essas permissões adicionais.If your users are not permanent members of groups which would grant them additional JEA rights, this cmdlet may not reflect those extra permissions. Esse é normalmente o caso 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.This is typically the case when using just-in-time privileged access management systems to allow users to temporarily belong to a security group. Sempre avalie cuidadosamente o mapeamento de usuários para as funções e os conteúdos de cada função para garantir que os usuários obtenham acesso apenas à quantidade mínima de comandos necessários para realizar seus trabalhos com êxito.Always carefully evaluate the mapping of users to roles and the contents of each role to ensure users are only getting access to the least amount of commands needed to do their jobs successfully.

Logs de eventos do PowerShellPowerShell event logs

Se você habilitou o log de módulo e/ou o registro em log de bloco de script no sistema, poderá encontrar eventos nos logs de eventos do Windows para cada comando executado por um usuário em suas sessões JEA.If you enabled module and/or script block logging on the system, you will be able to find events in the Windows event logs for each command a user ran in their JEA sessions. Para localizar esses eventos, abra o Visualizador de Eventos do Windows, navegue até o log de eventos Microsoft-Windows-PowerShell/Operational e procure eventos com a ID do evento 4104.To find these events, open the Windows Event Viewer, navigate to the Microsoft-Windows-PowerShell/Operational event log, and look for events with event ID 4104.

Cada entrada de log de eventos incluirá informações sobre a sessão na qual o comando foi executado.Each event log entry will include information about the session in which the command was run. Para sessões JEA, isso inclui informações importantes sobre o ConnectedUser, que é o usuário real que criou a sessão JEA, bem como o RunAsUser, que identifica a conta JEA usada para executar o comando.For JEA sessions, this includes important information about the ConnectedUser, which is the actual user who created the JEA session, as well as the RunAsUser which identifies the account JEA used to execute the command. Os logs de eventos do aplicativo mostrarão as alterações feitas pelo RunAsUser, portanto, habilitar as transcrições ou o registro em log de módulo/script é crucial para poder rastrear uma invocação de comando específica de um usuário.Application event logs will show changes being made by the RunAsUser, so having transcripts or module/script logging enabled is crucial to be able to trace a specific command invocation back to a user.

Logs de eventos do aplicativoApplication event logs

Quando você executa um comando em uma sessão JEA que interage com um aplicativo ou um serviço externo, esses aplicativos podem registrar eventos em seus próprios logs de eventos.When you run a command in a JEA session that interacts with an external application or service, those applications may log events to their own event logs. Diferentemente dos logs e transcrições do PowerShell, outros mecanismos de registro em log não capturarão o usuário conectado da sessão JEA e, em vez disso, registrarão somente a conta de serviço gerenciado de grupo ou o usuário virtual Run As.Unlike PowerShell logs and transcripts, other logging mechanisms will not capture the connected user of the JEA session, and will instead only log the virtual run-as user or group managed service account. Para determinar quem executou o comando, você precisará consultar uma transcrição da sessão ou correlacionar os logs de eventos do PowerShell com a hora e o usuário mostrados no log de eventos do aplicativo.In order to determine who ran the command, you will need to consult a session transcript or correlate PowerShell event logs with the time and user shown in the application event log.

O log WinRM também pode ajudar a correlacionar os usuários Run As, em um log de eventos do aplicativo, com o usuário que está se conectando.The WinRM log can also help you correlate run as users in an application event log with the connecting user. A ID do evento 193 no log Microsoft-Windows-Windows Remote Management/Operational registra o SID (identificador de segurança) e o nome de conta do usuário que está se conectando e do usuário Run As, sempre que uma sessão JEA é criada.Event ID 193 in the Microsoft-Windows-Windows Remote Management/Operational log records the security identifier (SID) and account name for both the connecting user and run as user every time a JEA session is created.

Transcrições de sessãoSession transcripts

Se você configurou o JEA para criar uma transcrição para cada sessão de usuário, uma cópia do texto de todas as ações de usuário será armazenada na pasta especificada.If you configured JEA to create a transcript for each user session, a text copy of every user's actions will be stored in the specified folder.

Para localizar todos os diretórios de transcrição, execute o seguinte comando como administrador no computador configurado com o JEA:To find all transcript directories, run the following command as an administrator on the computer configured with JEA:

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 foi iniciada, qual usuário se conectou à sessão e qual identidade JEA foi atribuída a eles.Each transcript starts with information about the time the session started, which user connected to the session, and which JEA identity was assigned to them.

**********************
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)
[...]

No corpo da transcrição são registradas as informações sobre cada comando invocado pelo usuário.In the body of the transcript, information is logged about each command the user invoked. A sintaxe exata do comando que foi executado pelo usuário não está disponível nas sessões JEA devido à maneira como os comandos são transformados para a comunicação remota do PowerShell, no entanto, você ainda poderá determinar o comando efetivo que foi executado.The exact syntax of the command the user ran is unavailable in JEA sessions due to the way commands are transformed for PowerShell remoting, however you can still determine the effective command that was executed. Abaixo está um exemplo de trecho de transcrição de um usuário executando Get-Service Dns em uma sessão JEA:Below is an example transcript snippet from a user running Get-Service Dns in a JEA session:

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

Para cada comando que um usuário executa, uma linha "CommandInvocation" será escrita, descrevendo o cmdlet ou a função invocada pelo usuário.For each command a user runs, a "CommandInvocation" line will be written, describing the cmdlet or function the user invoked. O ParameterBindings segue cada CommandInvocation para informar sobre cada parâmetro e valor que foi fornecido com o comando.ParameterBindings follow each CommandInvocation to tell you about each parameter and value that was supplied with the command. No exemplo acima, você pode ver que o parâmetro "Nome" foi fornecido com o valor "Dns" para o cmdlet "Get-Service".In the above example, you can see that the parameter "Name" was supplied the value "Dns" for the "Get-Service" cmdlet.

A saída de cada comando também disparará um CommandInvocation, geralmente para Out-Default.The output of each command will also trigger a CommandInvocation, usually to Out-Default. O InputObject do Out-Default é o objeto do PowerShell retornado pelo comando.The InputObject of Out-Default is the PowerShell object returned from the command. Os detalhes desse objeto estão impressos algumas linhas abaixo, imitando de perto o que o usuário veria.The details of that object are printed a few lines below, closely mimicking what the user would have seen.

Consulte tambémSee also