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:

  1. PowerShell-Modul Enthält die Role Capability Datei und stellt den Rahmen bereit, in dem die Rollen-Konfiguration abgelegt wird.

  2. Role Capability (.psrc) Definiert die sichtbaren Cmdlets und importierten Module. Pro Rolle eine Datei.

  3. Session Configuration (.pssc) Definiert Session-Typ, Sicherheitskontext (VirtualAccount) und die Zuordnung von Benutzern zu Rollen.

  4. 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_monitor

  • Domain: <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-ComputerInfo ist ab PowerShell 5.1 Bestandteil von Microsoft.PowerShell.Management.

  • Nicht aufgelistete Cmdlets sind in der Session unsichtbar und nicht ausführbar.

  • Stop-Service, Start-Service, Stop-Process und ä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 Benutzer jea_monitor die Rolle Monitoring zu, die in Monitoring.psrc definiert 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:

  1. Ein alternativer administrativer Zugang gesichert ist

  2. 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