PowerShell-Skriptdelegierung mit Just Enough Administration (JEA)

Inhalt

Powershell-Logo

Wollten Sie schon immer eine Aufgabe delegieren, stellte jedoch fest, dass die Erteilung der erforderlichen Genehmigungen möglicherweise zu riskant ist? Oder wollten Sie Dinge wie das Erstellen von Gruppen in AD blockieren, um Namenskonventionen für Gruppen durchzusetzen??

JEA kann dir dabei helfen und noch viel mehr. In diesem Beitrag, Wir werden sehen, wie Sie Ihre bereits erstellten Skripte mit PowerShell delegieren können 5.1.

Was ist JEA?

JEA ist eine Microsoft PowerShell-Lösung, die Benutzer einschränken kann (und Administratoren) damit sie nur bestimmte Aufgaben in einer bestimmten PowerShell-Sitzung ausführen können, auch wenn sie einen lokalen Administrator für diese Ressource benötigen. Zur selben Zeit, kann sehr spezifisch sein. Nur die von Ihnen angegebenen Befehle können ausgeführt werden, Sie können nur bestimmte Parameterwerte und Parameterwerte aktivieren, die einem bestimmten Muster entsprechen.

Als Beispiel, Sie können Servicedesk aktivieren, um nur einen bestimmten Dienst mit neu zu starten Restart-Service, oder fügen Sie einfach Gruppen gemäß einer bestimmten Namenskonvention zu AD hinzu. Sie können all dies tun, ohne ihnen explizite Berechtigungen auf einem Server oder in AD zu erteilen. Es ist ein Werkzeug, das Ihnen enorm viel Zeit sparen und Ihre Umwelt schützen kann. Beginnen wir damit, unser Skript in eine Funktion zu packen.

Paso 1: Erstellen einer Funktion aus Ihrem Skript

Der erste Schritt, falls du es noch nicht gemacht hast, ist eine Funktion aus Ihrem Skript zu erstellen. Das ist ziemlich einfach, vorausgesetzt du hast deine schon parameters erstellen. Nächste, Ich habe mein einfaches Skript verpackt “Neu-OrdnerAndShare” in einer Funktion:

Function New-FolderAndShare {
    [cmdletbinding()]
    param(
        # Name of the share
        [parameter(Mandatory)]
        [ValidatePattern("^(Project d{5}|Team (Finance|HR|IT|Multi) [a-z ]+)$")]
        [string]$ShareName,

        # Directory of the new share folder locally
        [parameter(Mandatory)]
        [ValidatePattern("^(D|E|F):Shares$")]
        [string]$Path,

        # Who to have full access
        [parameter(Mandatory)]
        [ValidateSet("^CONTOSO")]
        [string]$FullAccess

    )

        $FullPath = Join-Path $Path $ShareName
    New-Item -ItemType Directory -Path $FullPath
    New-SmbShare -Path $FullPath -Name $ShareName -FullAccess $FullAccess

}

Bestätigen Sie die Parameter mit ValidatePattern in Funktion, aber wenn dies Teil eines Moduls wäre, Sie könnten es stattdessen in der RoleCapabilities-Datei mit tun Sichtbare Funktionen.

Das Skript zu einer Funktion zu machen, gibt uns eine bessere Kontrolle über die in JEA erlaubten Parameter und erleichtert den Export.

Paso 2: Kapazitätsaufbau zum Rollenaufbau

Die RoleCapabilities-Datei entscheidet, was eine bestimmte Rolle tun darf (im nächsten Schritt definiert). Dazu gehört, welche Befehle sie ausführen können, welche Parameter können sie verwenden und welche Module sie importieren.

Obwohl RoleCapabilities manuell erstellt werden können, Es wird empfohlen, die zu verwenden New-PSRoleCapabilityFile Integrierter PowerShell-Befehl 5.1. In dieser Datei wird auch die Funktion geladen, die wir im vorherigen Schritt erstellt haben.

Das folgende Skript erstellt eine Datei namens FileShareCreator.psrc und füge die hinzu New-FolderAndShare Funktion (die in der aktuellen Sitzung geladen werden soll):

# RUN THIS IN THE SERVER THAT WILL BE THE JEA ENDPOINT

$RoleCapabilitiesParam = @{
    # Establece a function that will be available in the cmdlet
    FunctionDefinitions = @{ 
        Name="New-FolderAndShare"
                # Import the code of the function
        ScriptBlock =  [ScriptBlock]::Create(
            (Get-Command New-FolderAndShare).Definition
        )
    }

    # Modules used in the function needs to be explicity imported
    ModulesToImport = @(
        "SmbShare",
        "Microsoft.PowerShell.Management"
    )
    Path = ".FileShareCreator.psrc"
}

New-PSRoleCapabilityFile @RoleCapabilitiesParam

Benutzen Get-Command um die Funktion im zu finden FunctionDefinitions-Parameter. Zusätzlich können Sie das Rohskript mit Parametern hinzufügen.

Es gibt auch an, wie Sie die Funktion im VisibleCmdlet Parameter. Dafür, Geben Sie den Namen der Funktion und ihre Parameter zusammen mit einem regulären Ausdruck an.

Mit diesem, Sie können eine extrem granulare Kontrolle darüber erstellen, was ein Benutzer tun kann und was nicht. Aber es gibt einen Vorbehalt, damit dies funktioniert: Sie müssen eine psrc-Datei in einem Modul hinzufügen.

Paso 3: Erstellen eines Moduls für die RoleCapability-Datei

Zeit, ein Modul zu erstellen, in das Sie Ihre Rollenfähigkeiten einbringen können. JEA findet die Rollenfunktionen anhand des Namens der psrc-Dateien ohne deren Erweiterung, Vermeiden Sie daher Duplikate, wenn Sie später weitere Rollenfunktionen erstellen.

Das folgende Skript ist eine modifizierte Version dessen, was Sie in der Offizielle JEA-Dokumentation. Erstellen Sie ein neues Modul im Modulverzeichnis, Erstellen Sie die erforderlichen Dateien und Ordner und kopieren Sie die psrc Datei, die Sie in Schritt erstellt haben 2 bei:

# RUN THIS IN THE SERVER THAT WILL BE THE JEA ENDPOINT

# Create a folder for the module
$modulePath = Join-Path $env:ProgramFiles "WindowsPowerShellModulesFileShareJEA"
New-Item -ItemType Directory -Path $modulePath

# Create an empty script module and module manifest.
# At least one file in the module folder must have the same name as the folder itself.
New-Item -ItemType File -Path (Join-Path $modulePath "FileShareJEA.psm1")
New-ModuleManifest -Path (Join-Path $modulePath "FileShareJEA.psd1") -RootModule "FileShareJEA.psm1"

# Create the RoleCapabilities folder and copy in the PSRC file
$rcFolder = Join-Path $modulePath "RoleCapabilities"
New-Item -ItemType Directory $rcFolder
Copy-Item -Path .FileShareCreator.psrc -Destination $rcFolder

Sie haben jetzt eine Rollenfunktion und eine Rolle erstellt, die in JEA verwendet werden sollen. Jetzt müssen Sie nur noch eine PowerShell-Sitzungskonfiguration erstellen, um den gerade erstellten Rollen AD-Gruppen zuzuordnen.

Paso 4: Definition von Rollen

In diesem Schritt, erstellt eine PowerShell-Sitzungskonfigurationsdatei, die festlegt, welchen Rollen welche Funktionen zugewiesen werden (von dem.psrc Datei, die wir in Schritt erstellt haben 2).

Hier erstellen Sie auch die AD-Gruppe und das Transcripts-Verzeichnis.

# Create directory to store logs
New-Item -ItemType Directory -Path 'C:ProgramDataJEAConfigurationTranscripts' -Force

# Create AD group (you might need to do it on another server)
New-ADGroup -Path "OU=Groups,DC=contoso,DC=com" -Name 'JEA_FILESHARE_CREATOR' -GroupScope DomainLocal

# RUN THIS IN THE SERVER THAT WILL BE THE JEA ENDPOINT

# Establece parameters for New-PSSessionConfigurationFile
$PSSessionConfigurationParams = @{
    # Run as a temporary account
    RunAsVirtualAccount = $True

    # That is a local administrator
    RunAsVirtualAccountGroups = @(
        "administrators"
    )

    # Path where to save log files of what connected users are doing
    TranscriptDirectory = 'C:ProgramDataJEAConfigurationTranscripts'

    # Map an active directory group to the capability we created
    RoleDefinitions = @{
        'CONTOSOJEA_FILESHARE_CREATOR' = @{
            RoleCapabilities="FileShareCreator"
        }
    }
        
        # Path of the PSSC file
    Path = ".SessionConfiguration.pssc"

}
# Create the PSSC file
New-PSSessionConfigurationFile @PSSessionConfigurationParams

Paso 5: Erstellen Sie eine PowerShell-Sitzung

In diesem Schritt, werde in der lesen SessionConfiguration.pssc Datei, die Sie im vorherigen Schritt erstellt haben. Dies ermöglicht Mitgliedern von JEA_FILESHARE_CREATOR um sich per PowerShell mit dem Server zu verbinden:

PS51> Register-PSSessionConfiguration -Path .SessionConfiguration.pssc -Name 'JEAFileShare' -Force

PSPath            : Microsoft.WSMan.ManagementWSMan::localhostPluginJEAFileShare
PSParentPath      : Microsoft.WSMan.ManagementWSMan::localhostPlugin
PSChildName       : JEAFileShare
PSDrive           : WSMan
PSProvider        : Microsoft.WSMan.ManagementWSMan
PSIsContainer     : True
Keys              : {Name=JEAFileShare}
Name              : JEAFileShare
TypeNameOfElement : Container
Type              : Container

Bereit! Einen Benutzer hinzufügen zu JEA_FILESHARE_CREATOR dass Sie auf normale Weise keinen Zugriff auf den Server haben und testen Sie ihn als dieser Benutzer, indem Sie eingeben:

PS51> Enter-PSSession -ComputerName fs02.contoso.com -ConfigurationName JEAFileShare
PS51> New-FolderAndShare -ShareName "Project 12345" -Path D:Share

Jetzt können Sie den Befehl als temporärer lokaler Administrator ausführen, der gesperrt und nur für die Ausführung einiger Standardbefehle aktiviert ist (sichtbar mit Get-Command während der Sitzung) und der New-FolderAndShare Funktion in Funktionsfunktionsdatei hinzugefügt.

Wenn Sie das vorübergehend erstellte Konto sehen möchten, hinzufügen VisibleExternalCommands @('c:windowssystem32whoami.exe') zu Ihren RoleCapabilities-Parametern in Schritt 2. Sie können whoami ausführen und den Namen des lokalen Administrators sehen:

PS51 >whoami
winrm virtual userswinrm va_1_contoso_joe_helpdesk

Zusammenfassung

Die Verwendung von JEA kann eine erstaunliche und einfache Möglichkeit sein, Aufgaben zu delegieren und Ihre Umgebung zu schützen. Dazu gehören nicht nur Ihre eigenen Skripte, aber auch die integrierten Module und die installierten Module. Auch wenn JEA ein großer Mehrwert sein kann, vorsichtig sein! Sie können ein großes Risiko für Ihre Umgebung darstellen, wenn Sie die falschen Befehle delegieren oder die falschen Parameter an unerwartete Personen angeben.

Möchten Sie mehr erfahren?

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.