Just Enough Administration (JEA) – Monitoring Endpoint
Überblick
Dieses Dokument beschreibt die Erstellung eines minimalen PowerShell-JEA-Endpunkts für Monitoring-Zwecke.
Ziel ist es:
einem dedizierten Benutzer eingeschränkten Remote-Zugriff zu gewähren
ausschliesslich definierte Cmdlets bereitzustellen
Default-Endpunkte optional zu härten
Architekturprinzip
Ein JEA-Endpoint besteht aus vier Bausteinen:
PowerShell-Modul Enthält die Role Capability Datei und stellt den Rahmen bereit, in dem die Rollen-Konfiguration abgelegt wird.
Role Capability (.psrc) Definiert die sichtbaren Cmdlets und importierten Module. Pro Rolle eine Datei.
Session Configuration (.pssc) Definiert Session-Typ, Sicherheitskontext (VirtualAccount) und die Zuordnung von Benutzern zu Rollen.
Registrierter Endpoint Wird über WinRM veröffentlicht und ist per Remote-PowerShell erreichbar.
Sicherheitsgrundsatz bei JEA mit RunAsVirtualAccount und
SessionType RestrictedRemoteServer:
Wichtig
Die Zugriffskontrolle wird primär über RoleDefinitions
in der .pssc-Datei gesteuert — nicht über klassische Windows ACLs.
In Windows ACLs überschreibt ein Deny-ACE jeden Allow-ACE. Deny sollte daher nur gezielt zur zusätzlichen Härtung verwendet werden, nicht als primärer Steuerungsmechanismus.
Empfehlung: JEA korrekt konfigurieren ist die Basis. Default-Endpunkte zusätzlich zu härten ist optionales Hardening.
Was sind Cmdlets?
Cmdlets sind die kleinste ausführbare Einheit in PowerShell.
Sinnvolle Monitoring Cmdlets sind:
Lesende Cmdlets (Read-Only):
Get-Process– Listet laufende Prozesse. Kein Schreibzugriff, keine Auswirkung auf das System.Get-Service– Listet Windows-Dienste und deren Status. Ebenfalls rein lesend.Get-ComputerInfo– Gibt Systeminformationen zurück (OS, Hardware, Netzwerk). Ab PowerShell 5.1 verfügbar.
Schreibende / eingreifende Cmdlets:
Stop-Service– Stoppt einen laufenden Dienst. Kann Systemdienste deaktivieren.Start-Service– Startet einen gestoppten Dienst. Erfordert in der Regel erhöhte Rechte.Restart-Service– Kombination aus Stop und Start. Bei falscher Anwendung kritisch.Stop-Process– Beendet einen laufenden Prozess. Kann Anwendungen und Systemdienste abwürgen.
Konsequenz für JEA: Für das Monitoring sollten ausschliesslich lesende Cmdlets vergeben werden.
WinRM vorbereiten
Enable-PSRemoting -Force
Set-Service WinRM -StartupType Automatic
Start-Service WinRM
Optional (z.B. Monitoring via ICMP/Ping erlauben):
Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In
Status prüfen:
Get-Service WinRM
winrm enumerate winrm/config/listener
Dedizierten Benutzer erstellen
Variante 1 – Lokaler Benutzer:
net user jea_monitor <secure_password> /add
Variante 2 – Domain-Benutzer:
Kein lokales Anlegen erforderlich. Der Benutzer wird direkt in
RoleDefinitions mit seinem Domain-Präfix referenziert.
Wichtig: In RoleDefinitions muss die Identität eindeutig qualifiziert sein:
Lokal:
<ComputerName>\jea_monitorDomain:
<DomainName>\jea_monitor
PowerShell-Modulstruktur
Die Role Capability muss in einem gültigen PowerShell-Modul liegen. Die Verzeichnisstruktur muss exakt eingehalten werden:
C:\Program Files\WindowsPowerShell\Modules\
MonitoringJEA\
MonitoringJEA.psd1
RoleCapabilities\
Monitoring.psrc
Der Modulname (MonitoringJEA) und der Name in RoleDefinitions
('Monitoring') müssen konsistent mit Dateinamen und Ordnernamen sein.
Modulmanifest erstellen (wenn nicht vorhanden):
New-ModuleManifest `
-Path "C:\Program Files\WindowsPowerShell\Modules\MonitoringJEA\MonitoringJEA.psd1" `
-RootModule "" `
-ModuleVersion "1.0"
Role Capability definieren (.psrc)
Die .psrc-Datei legt fest, welche Cmdlets einem Benutzer
innerhalb einer JEA-Session zur Verfügung stehen.
New-PSRoleCapabilityFile `
-Path "C:\Program Files\WindowsPowerShell\Modules\MonitoringJEA\RoleCapabilities\Monitoring.psrc" `
-VisibleCmdlets @(
'Get-Service',
'Get-Process',
'Get-ComputerInfo'
) `
-ModulesToImport @(
'Microsoft.PowerShell.Management',
'Microsoft.PowerShell.Utility'
)
Hinweise:
Get-ComputerInfoist ab PowerShell 5.1 Bestandteil vonMicrosoft.PowerShell.Management.Nicht aufgelistete Cmdlets sind in der Session unsichtbar und nicht ausführbar.
Stop-Service,Start-Service,Stop-Processund ähnliche schreibende Cmdlets sind bewusst nicht enthalten.
Inhalt der generierten .psrc-Datei prüfen:
Get-Content "C:\Program Files\WindowsPowerShell\Modules\MonitoringJEA\RoleCapabilities\Monitoring.psrc"
Session Configuration erstellen (.pssc)
Die .pssc-Datei definiert den Sicherheitskontext der Session
und ordnet Benutzer den Rollen aus der .psrc-Datei zu.
New-PSSessionConfigurationFile `
-Path "C:\ProgramData\JEA\MonitoringJEA.pssc" `
-SessionType RestrictedRemoteServer `
-RunAsVirtualAccount `
-RoleDefinitions @{
'COMPUTERNAME\jea_monitor' = @{
RoleCapabilities = 'Monitoring'
}
}
Erklärung der Parameter:
SessionType RestrictedRemoteServer– Deaktiviert interaktive Shell-Funktionen, erlaubt nur explizit freigegebene Cmdlets.RunAsVirtualAccount– Der Endpoint läuft als temporäres, lokales Admin-Konto. Der verbindende Benutzer selbst braucht keine Adminrechte.RoleDefinitions– Weist dem Benutzerjea_monitordie RolleMonitoringzu, die inMonitoring.psrcdefiniert ist.
Syntaxprüfung der .pssc-Datei vor der Registrierung:
Test-PSSessionConfigurationFile -Path "C:\ProgramData\JEA\MonitoringJEA.pssc"
Erwartete Ausgabe: True
Endpoint registrieren
Register-PSSessionConfiguration `
-Name MonitoringJEA `
-Path "C:\ProgramData\JEA\MonitoringJEA.pssc" `
-Force
Restart-Service WinRM
Verifikation nach der Registrierung:
# Alle registrierten Endpoints auflisten
Get-PSSessionConfiguration | Select-Object Name, Enabled
# Details zum JEA-Endpoint inkl. Berechtigungen
Get-PSSessionConfiguration -Name MonitoringJEA | Select-Object Name, Enabled, Permission
Bemerkung
Enabled wird in der PowerShell-Ausgabe als .NET Boolean
dargestellt: True / False (grossgeschrieben).
Im zugrundeliegenden WSMan-XML wird derselbe Wert als
true / false (kleingeschrieben) gespeichert.
Optional: Default-Endpunkte härten
Warnung
Nur durchführen, wenn:
Ein alternativer administrativer Zugang gesichert ist
Der JEA-Endpoint erfolgreich getestet wurde
Falsch angewendetes Hardening kann den administrativen Remote-Zugriff dauerhaft sperren.
Default-Endpunkte deaktivieren:
Disable-PSSessionConfiguration -Name Microsoft.PowerShell -Force
Disable-PSSessionConfiguration -Name Microsoft.PowerShell32 -Force
Disable-PSSessionConfiguration -Name Microsoft.PowerShell.Workflow -Force
Disable-PSSessionConfiguration -Name Microsoft.Windows.ServerManagerWorkflow -Force
Restart-Service WinRM
Default-Endpunkte wieder aktivieren (Rollback):
Enable-PSSessionConfiguration -Name Microsoft.PowerShell -Force
Enable-PSSessionConfiguration -Name Microsoft.PowerShell32 -Force
Enable-PSSessionConfiguration -Name Microsoft.PowerShell.Workflow -Force
Enable-PSSessionConfiguration -Name Microsoft.Windows.ServerManagerWorkflow -Force
Restart-Service WinRM
Status aller Endpoints prüfen:
Get-PSSessionConfiguration | Select-Object Name, Enabled