Granskning och rapportering av JEA

När du har distribuerat JEA måste du regelbundet granska JEA-konfigurationen. Granskning hjälper dig att bedöma att rätt personer har åtkomst till JEA-slutpunkten och att deras tilldelade roller fortfarande är lämpliga.

Hitta registrerade JEA-sessioner på en dator

Om du vill kontrollera vilka JEA-sessioner som är registrerade på en dator använder du cmdleten 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

De gällande rättigheterna för slutpunkten visas i egenskapen Behörighet . Dessa användare har rätt att ansluta till JEA-slutpunkten. De roller och kommandon som de har åtkomst till bestäms dock av egenskapen RoleDefinitions i sessionskonfigurationsfilen som användes för att registrera slutpunkten. Expandera egenskapen RoleDefinitions för att utvärdera rollmappningarna i en registrerad JEA-slutpunkt.

# 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 }
}

Hitta tillgängliga rollfunktioner på datorn

JEA hämtar rollfunktioner från filerna .psrc som lagras i mappen RoleCapabilities i en PowerShell-modul. Följande funktion hittar alla rollfunktioner som är tillgängliga på en dator.

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
}

Kommentar

Resultatordningen från den här funktionen är inte nödvändigtvis den ordning i vilken rollfunktionerna väljs om flera rollfunktioner har samma namn.

Kontrollera gällande rättigheter för en viss användare

Cmdleten Get-PSSessionCapability räknar upp alla kommandon som är tillgängliga på en JEA-slutpunkt baserat på en användares gruppmedlemskap. Utdata för Get-PSSessionCapability är identiska med den som den angivna användaren kör Get-Command -CommandType All i en JEA-session.

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

Om dina användare inte är permanenta medlemmar i grupper som ger dem ytterligare JEA-rättigheter kanske den här cmdleten inte återspeglar dessa extra behörigheter. Detta inträffar när du använder just-in-time-privilegierade åtkomsthanteringssystem för att tillåta användare att tillfälligt tillhöra en säkerhetsgrupp. Utvärdera noggrant mappningen av användare till roller och funktioner för att säkerställa att användarna bara får den åtkomstnivå som krävs för att utföra sina jobb.

PowerShell-händelseloggar

Om du har aktiverat modul- eller skriptblockloggning i systemet kan du se händelser i Windows-händelseloggarna för varje kommando som en användare kör i en JEA-session. Du hittar dessa händelser genom att öppna händelseloggen Microsoft-Windows-PowerShell/Operational och leta efter händelser med händelse-ID 4104.

Varje händelseloggpost innehåller information om sessionen där kommandot kördes. För JEA-sessioner innehåller händelsen information om Anslut edUser och RunAsUser. Anslut edUser är den faktiska användaren som skapade JEA-sessionen. RunAsUser är kontot JEA som används för att köra kommandot.

Programhändelseloggar visar ändringar som görs av RunAsUser. Så att ha modul- och skriptloggning aktiverat krävs för att spåra ett specifikt kommandoanrop tillbaka till Anslut edUser.

Programhändelseloggar

Kommandon som körs i en JEA-session som interagerar med externa program eller tjänster kan logga händelser till sina egna händelseloggar. Till skillnad från PowerShell-loggar och avskrifter samlar inte andra loggningsmekanismer in den anslutna användaren av JEA-sessionen. I stället loggar dessa program bara den virtuella kör som-användaren. För att avgöra vem som körde kommandot måste du konsultera en sessionsavskrift eller korrelera PowerShell-händelseloggar med tiden och användaren som visas i programhändelseloggen.

WinRM-loggen kan också hjälpa dig att korrelera kör som-användare med den anslutande användaren i en programhändelselogg. Händelse-ID 193 i Fjärrhantering/driftlogg för Microsoft-Windows-Windows registrerar säkerhetsidentifieraren (SID) och kontonamnet för både den anslutande användaren och körs som användare för varje ny JEA-session.

Sessionsavskrifter

Om du har konfigurerat JEA för att skapa en avskrift för varje användarsession lagras en textkopia av varje användares åtgärder i den angivna mappen.

Följande kommando (som administratör) hittar alla avskriftskataloger.

Get-PSSessionConfiguration |
  Where-Object { $_.TranscriptDirectory -ne $null } |
    Format-Table Name, TranscriptDirectory

Varje avskrift börjar med information om den tid då sessionen startade, vilken användare som var ansluten till sessionen och vilken JEA-identitet som tilldelades dem.

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

Avskriftens brödtext innehåller information om varje kommando som användaren anropade. Den exakta syntaxen för kommandot som används är inte tillgänglig i JEA-sessioner på grund av hur kommandon transformeras för PowerShell-fjärrkommunikation. Du kan dock fortfarande fastställa det effektiva kommando som kördes. Nedan visas ett exempel på avskriftsfragment från en användare som körs Get-Service Dns i en 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

En CommandInvocation-rad skrivs för varje kommando som en användare kör. ParameterBindings registrerar varje parameter och värde som medföljer kommandot. I föregående exempel kan du se att parametern Namn angavs med värdet Dns för cmdletenGet-Service.

Utdata från varje kommando utlöser också en CommandInvocation, vanligtvis till Out-Default. InputObjectOut-Default för är PowerShell-objektet som returneras från kommandot. Informationen om objektet skrivs ut några rader nedan, vilket nära efterliknar vad användaren skulle ha sett.

Se även

PowerShell ♥, det blå teamets blogginlägg om säkerhet