Delen via


Mogelijkheden voor JEA-rollen

Wanneer u een JEA-eindpunt maakt, moet u een of meer rolmogelijkheden definiëren die beschrijven wat iemand in een JEA-sessie kan doen. Een functiefunctie is een PowerShell-gegevensbestand met de .psrc extensie waarin alle cmdlets, functies, providers en externe programma's worden vermeld die beschikbaar worden gesteld om gebruikers te verbinden.

Bepalen welke opdrachten moeten worden toegestaan

De eerste stap bij het maken van een functiemogelijkheidsbestand is om te overwegen waartoe de gebruikers toegang nodig hebben. Het verzamelen van vereisten kan enige tijd duren, maar het is belangrijk. Gebruikers toegang geven tot te weinig cmdlets en functies kunnen voorkomen dat ze hun taak kunnen uitvoeren. Als u toegang tot te veel cmdlets en functies toestaat, kunnen gebruikers meer doen dan u bedoelde en uw beveiligingshouding verzwakken.

Hoe u dit proces doet, is afhankelijk van uw organisatie en doelstellingen. Met de volgende tips kunt u ervoor zorgen dat u op het juiste pad bent.

  1. Identificeer de opdrachten die gebruikers gebruiken om hun taken uit te voeren. Dit kan betrekking hebben op het onderzoeken van IT-medewerkers, het controleren van automatiseringsscripts of het analyseren van Transcripties en logboeken van PowerShell-sessies.
  2. Werk , indien mogelijk, het gebruik van opdrachtregelprogramma's bij naar PowerShell-equivalenten voor de beste controle- en JEA-aanpassingservaring. Externe programma's kunnen niet zo gedetailleerd worden beperkt als systeemeigen PowerShell-cmdlets en functies in JEA.
  3. Beperk het bereik van de cmdlets om alleen specifieke parameters of parameterwaarden toe te staan. Dit is vooral belangrijk als gebruikers slechts een deel van een systeem moeten beheren.
  4. Maak aangepaste functies om complexe opdrachten of opdrachten te vervangen die moeilijk te beperken zijn in JEA. Een eenvoudige functie die een complexe opdracht verpakt of aanvullende validatielogica toepast, kan extra controle bieden voor beheerders en eenvoud van eindgebruikers.
  5. Test de bereiklijst met toegestane opdrachten met uw gebruikers of automatiseringsservices en pas deze indien nodig aan.

Voorbeelden van potentieel gevaarlijke opdrachten

Zorgvuldige selectie van opdrachten is belangrijk om ervoor te zorgen dat het JEA-eindpunt de gebruiker niet toestaat hun machtigingen te verhogen.

Belangrijk

Essentiële informatie die vereist is voor gebruikersuccesCommands in een JEA-sessie, worden vaak uitgevoerd met verhoogde bevoegdheden.

De volgende lijst bevat voorbeelden van opdrachten die schadelijk kunnen worden gebruikt als dit is toegestaan in een niet-getrainde status. Dit is geen volledige lijst en mag alleen worden gebruikt als waarschuwingspunt.

  • Risico: het verlenen van de beheerdersbevoegdheden van de gebruiker om JEA te omzeilen

    Voorbeeld:

    Add-LocalGroupMember -Member 'CONTOSO\jdoe' -Group 'Administrators'
    

    Verwante opdrachten:

    • Add-ADGroupMember
    • Add-LocalGroupMember
    • net.exe
    • dsadd.exe
  • Risico: willekeurige code uitvoeren, zoals malware, exploits of aangepaste scripts om beveiligingen te omzeilen

    Voorbeeld:

    Start-Process -FilePath '\\san\share\malware.exe'
    

    Verwante opdrachten:

    • Start-Process
    • New-Service
    • Invoke-Item
    • Invoke-WmiMethod
    • Invoke-CimMethod
    • Invoke-Expression
    • Invoke-Command
    • New-ScheduledTask
    • Register-ScheduledJob

Een functiebestand maken

U kunt een nieuw PowerShell-functiemogelijkheidsbestand maken met de cmdlet New-PSRoleCapabilityFile .

New-PSRoleCapabilityFile -Path .\MyFirstJEARole.psrc

U moet het gemaakte functiebestand bewerken om alleen de opdrachten toe te staan die vereist zijn voor de rol. De Help-documentatie van PowerShell bevat verschillende voorbeelden van hoe u het bestand kunt configureren.

PowerShell-cmdlets en -functies toestaan

Als u wilt toestaan dat gebruikers PowerShell-cmdlets of -functies uitvoeren, voegt u de cmdlet of functienaam toe aan de velden VisibleCmdlets of VisibleFunctions . Als u niet zeker weet of een opdracht een cmdlet of functie is, kunt u de eigenschap CommandType uitvoeren Get-Command <name> en controleren in de uitvoer.

VisibleCmdlets = @('Restart-Computer', 'Get-NetIPAddress')

Soms is het bereik van een specifieke cmdlet of functie te breed voor de behoeften van uw gebruikers. Een DNS-beheerder heeft bijvoorbeeld alleen toegang nodig om de DNS-service opnieuw op te starten. In omgevingen met meerdere tenants hebben tenants toegang tot selfservicebeheerprogramma's. Tenants moeten worden beperkt tot het beheren van hun eigen resources. In deze gevallen kunt u beperken welke parameters worden weergegeven vanuit de cmdlet of functie.

VisibleCmdlets = @{
    Name       = 'Restart-Computer'
    Parameters = @{ Name = 'Name' }
}

In meer geavanceerde scenario's moet u mogelijk ook de waarden beperken die een gebruiker kan gebruiken met deze parameters. Met functiemogelijkheden kunt u een set waarden of een normaal expressiepatroon definiëren waarmee wordt bepaald welke invoer is toegestaan.

VisibleCmdlets = @(
    @{
        Name       = 'Restart-Service'
        Parameters = @{ Name = 'Name'; ValidateSet = @('Dns', 'Spooler') }
    }
    @{
        Name       = 'Start-Website'
        Parameters = @{ Name = 'Name'; ValidatePattern = 'HR_*' }
    }
)

Notitie

De algemene PowerShell-parameters zijn altijd toegestaan, zelfs als u de beschikbare parameters beperkt. U moet ze niet expliciet vermelden in het veld Parameters.

In de onderstaande lijst worden de verschillende manieren beschreven waarop u een zichtbare cmdlet of functie kunt aanpassen. U kunt een van de onderstaande combineren in het veld VisibleCmdlets .

  • Use case: Hiermee staat u toe dat de gebruiker zonder beperkingen op de parameters kan worden uitgevoerd My-Func .

    @{ Name = 'My-Func' }
    
  • Use case: Hiermee staat u de gebruiker toe om uit te voeren My-Func vanuit de module MyModule zonder enige beperkingen voor de parameters.

    @{ Name = 'MyModule\My-Func' }
    
  • Use case: Hiermee staat u de gebruiker toe om een cmdlet of functie uit te voeren met het werkwoord My.

    @{ Name = 'My-*' }
    
  • Use case: Hiermee staat u de gebruiker toe om een cmdlet of functie uit te voeren met het zelfstandig naamwoord Func.

    @{ Name = '*-Func' }
    
  • Use case: Hiermee staat u toe dat de gebruiker kan worden uitgevoerd My-Func met de Param1 en Param2 parameters. Elke waarde kan worden opgegeven aan de parameters.

    @{ Name = 'My-Func'; Parameters = @{ Name = 'Param1'}, @{ Name = 'Param2' }}
    
  • Use case: Hiermee staat u toe dat de gebruiker wordt uitgevoerd My-Func met de Param1 parameter. Alleen Value1 en Value2 kan worden opgegeven aan de parameter.

    @{
        Name       = 'My-Func'
        Parameters = @{ Name = 'Param1'; ValidateSet = @('Value1', 'Value2') }
    }
    
  • Use case: Hiermee staat u toe dat de gebruiker wordt uitgevoerd My-Func met de Param1 parameter. Elke waarde die begint met contoso , kan worden opgegeven aan de parameter.

    @{
        Name       = 'My-Func'
        Parameters = @{ Name = 'Param1'; ValidatePattern = 'contoso.*' }
    }
    

Waarschuwing

Voor aanbevolen beveiligingsprocedures is het niet raadzaam jokertekens te gebruiken bij het definiëren van zichtbare cmdlets of functies. In plaats daarvan moet u elke vertrouwde opdracht expliciet vermelden om ervoor te zorgen dat er geen andere opdrachten met hetzelfde naamgevingsschema onbedoeld zijn geautoriseerd.

U kunt zowel een ValidatePattern - als ValidateSet niet toepassen op dezelfde cmdlet of functie.

Als u dit doet, overschrijft ValidatePattern de ValidateSet.

Bekijk deze Hey, Scripting Guy!-post en de referentie-inhoud van De Reguliere Expressies van PowerShell voor meer informatie over ValidatePattern.

Externe opdrachten en PowerShell-scripts toestaan

Als u wilt toestaan dat gebruikers uitvoerbare bestanden en PowerShell-scripts (.ps1) uitvoeren in een JEA-sessie, moet u het volledige pad toevoegen aan elk programma in het veld VisibleExternalCommands .

VisibleExternalCommands = @(
    'C:\Windows\System32\whoami.exe'
    'C:\Program Files\Contoso\Scripts\UpdateITSoftware.ps1'
)

Gebruik waar mogelijk PowerShell-cmdlets of functie-equivalenten voor externe uitvoerbare bestanden die u autoriseert, omdat u controle hebt over de parameters die zijn toegestaan met PowerShell-cmdlets en -functies.

Met veel uitvoerbare bestanden kunt u de huidige status lezen en deze vervolgens wijzigen door verschillende parameters op te geven.

Denk bijvoorbeeld aan de rol van een bestandsserverbeheerder die netwerkshares beheert die worden gehost op een systeem. Een manier om shares te beheren is om te gebruiken net share. Het toestaan net.exe is echter gevaarlijk omdat de gebruiker de opdracht kan gebruiken om beheerdersbevoegdheden te verkrijgen met de opdracht net group Administrators unprivilegedjeauser /add. Een veiligere optie is om de Get-SmbShare-cmdlet toe te staan, die hetzelfde resultaat bereikt, maar een veel beperkter bereik heeft.

Wanneer u externe opdrachten beschikbaar maakt voor gebruikers in een JEA-sessie, geeft u altijd het volledige pad naar het uitvoerbare bestand op. Dit voorkomt de uitvoering van vergelijkbare benoemde en mogelijk schadelijke programma's die zich elders op het systeem bevinden.

Toegang tot PowerShell-providers toestaan

Standaard zijn er geen PowerShell-providers beschikbaar in JEA-sessies. Dit vermindert het risico dat gevoelige informatie en configuratie-instellingen worden vrijgegeven aan de verbindende gebruiker.

Indien nodig kunt u toegang tot de PowerShell-providers toestaan met behulp van de VisibleProviders opdracht. Voer de opdracht uit Get-PSProvidervoor een volledige lijst met providers.

VisibleProviders = 'Registry'

Voor eenvoudige taken waarvoor toegang tot het bestandssysteem, register, certificaatarchief of andere gevoelige providers is vereist, kunt u een aangepaste functie schrijven die namens de gebruiker met de provider werkt. De functies, cmdlets en externe programma's die beschikbaar zijn in een JEA-sessie, zijn niet onderhevig aan dezelfde beperkingen als JEA. Ze hebben standaard toegang tot elke provider. Overweeg ook het gebruik van het gebruikersstation wanneer gebruikers bestanden naar of van een JEA-eindpunt moeten kopiëren.

Aangepaste functies maken

U kunt aangepaste functies maken in een functiemogelijkheidsbestand om complexe taken voor uw eindgebruikers te vereenvoudigen. Aangepaste functies zijn ook handig wanneer u geavanceerde validatielogica nodig hebt voor cmdlet-parameterwaarden. U kunt eenvoudige functies schrijven in het veld FunctionDefinitions :

VisibleFunctions = 'Get-TopProcess'

FunctionDefinitions = @{
    Name        = 'Get-TopProcess'
    ScriptBlock = {
        param($Count = 10)

        Get-Process |
            Sort-Object -Property CPU -Descending |
            Microsoft.PowerShell.Utility\Select-Object -First $Count
    }
}

Belangrijk

Vergeet niet om de naam van uw aangepaste functies toe te voegen aan het veld VisibleFunctions , zodat ze kunnen worden uitgevoerd door de JEA-gebruikers.

De hoofdtekst (scriptblok) van aangepaste functies wordt uitgevoerd in de standaardtaalmodus voor het systeem en is niet onderhevig aan taalbeperkingen van JEA. Dit betekent dat functies toegang hebben tot het bestandssysteem en het register en opdrachten uitvoeren die niet zichtbaar zijn gemaakt in het functiebestand voor rollen. Zorg ervoor dat u geen willekeurige code uitvoert wanneer u parameters gebruikt. Vermijd invoer van piping-gebruikers rechtstreeks in cmdlets zoals Invoke-Expression.

In het bovenstaande voorbeeld ziet u dat de FQMN (Fully Qualified Module Name) Microsoft.PowerShell.Utility\Select-Object is gebruikt in plaats van de afkorting Select-Object. Functies die zijn gedefinieerd in rolmogelijkheidsbestanden, zijn nog steeds onderhevig aan het bereik van JEA-sessies, waaronder de proxyfuncties die JEA maakt om bestaande opdrachten te beperken.

Select-Object Standaard is dit een beperkte cmdlet in alle JEA-sessies die de selectie van willekeurige eigenschappen voor objecten niet toestaat. Als u de niet-getrainde Select-Object functies wilt gebruiken, moet u expliciet de volledige implementatie aanvragen met behulp van de FQMN. Elke beperkte cmdlet in een JEA-sessie heeft dezelfde beperkingen wanneer deze vanuit een functie wordt aangeroepen. Zie about_Command_Precedence voor meer informatie.

Als u verschillende aangepaste functies schrijft, is het handiger om ze in een PowerShell-scriptmodule te plaatsen. U maakt deze functies zichtbaar in de JEA-sessie met behulp van het veld VisibleFunctions , zoals u zou doen met ingebouwde modules en modules van derden.

Als de tabvoltooiing goed werkt in JEA-sessies, moet u de ingebouwde functie tabexpansion2 opnemen in de lijst VisibleFunctions .

De functiemogelijkheden beschikbaar maken voor een configuratie

Vóór PowerShell 6 moet voor PowerShell een functiemogelijkheidsbestand worden opgeslagen in een RoleCapabilities map in een PowerShell-module. De module kan worden opgeslagen in elke map die is opgenomen in de $env:PSModulePath omgevingsvariabele, maar u moet deze niet plaatsen in $env:SystemRoot\System32 een map waarin niet-vertrouwde gebruikers de bestanden kunnen wijzigen.

In het volgende voorbeeld wordt een PowerShell-scriptmodule met de naam ContosoJEA gemaakt in het $env:ProgramFiles pad om het bestand met functiemogelijkheden te hosten.

# Create a folder for the module
$modulePath = Join-Path $env:ProgramFiles "WindowsPowerShell\Modules\ContosoJEA"
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.
$rootModulePath = Join-Path $modulePath "ContosoJEAFunctions.psm1"
$moduleManifestPath = Join-Path $modulePath "ContosoJEA.psd1"
New-Item -ItemType File -Path $RootModulePath
New-ModuleManifest -Path $moduleManifestPath -RootModule "ContosoJEAFunctions.psm1"

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

Zie Een PowerShell-module begrijpen voor meer informatie over PowerShell-modules.

Vanaf PowerShell 6 is de eigenschap RoleDefinitions toegevoegd aan het sessieconfiguratiebestand. Met deze eigenschap kunt u de locatie opgeven van een rolconfiguratiebestand voor uw roldefinitie. Zie de voorbeelden in New-PSSessionConfigurationFile.

Functiemogelijkheden bijwerken

U kunt een functiefunctiebestand bewerken om de instellingen op elk gewenst moment bij te werken. Nieuwe JEA-sessies die zijn gestart nadat de functiefunctie is bijgewerkt, weerspiegelen de herziene mogelijkheden.

Daarom is het beheren van de toegang tot de map met functiemogelijkheden zo belangrijk. Alleen zeer vertrouwde beheerders mogen rolmogelijkheidsbestanden wijzigen. Als een niet-vertrouwde gebruiker rolmogelijkheidsbestanden kan wijzigen, kan deze eenvoudig toegang krijgen tot cmdlets waarmee ze hun bevoegdheden kunnen verhogen.

Beheerders die de toegang tot de functiemogelijkheden willen vergrendelen, moeten ervoor zorgen dat lokaal systeem alleen-lezentoegang heeft tot de functiemogelijkhedenbestanden en modules bevat.

Hoe rolmogelijkheden worden samengevoegd

Gebruikers krijgen toegang tot alle overeenkomende rolmogelijkheden in het sessieconfiguratiebestand wanneer ze een JEA-sessie invoeren. JEA probeert de gebruiker de meest missieve set opdrachten te geven die zijn toegestaan door een van de rollen.

VisibleCmdlets en VisibleFunctions

De meest complexe samenvoeglogica is van invloed op cmdlets en functies, die hun parameters en parameterwaarden kunnen beperken in JEA.

De regels zijn als volgt:

  1. Als een cmdlet slechts zichtbaar wordt gemaakt in één rol, is deze zichtbaar voor de gebruiker met eventuele toepasselijke parameterbeperkingen.
  2. Als een cmdlet zichtbaar wordt gemaakt in meer dan één rol en elke rol dezelfde beperkingen heeft voor de cmdlet, is de cmdlet zichtbaar voor de gebruiker met deze beperkingen.
  3. Als een cmdlet zichtbaar wordt gemaakt in meer dan één rol en elke rol een andere set parameters toestaat, zijn de cmdlet en alle parameters die voor elke rol zijn gedefinieerd, zichtbaar voor de gebruiker. Als één rol geen beperkingen heeft voor de parameters, zijn alle parameters toegestaan.
  4. Als één rol een validatieset of validatiepatroon definieert voor een cmdlet-parameter en de andere rol de parameter toestaat, maar de parameterwaarden niet beperkt, wordt de validatieset of het patroon genegeerd.
  5. Als een validatieset is gedefinieerd voor dezelfde cmdlet-parameter in meer dan één rol, zijn alle waarden uit alle validatiesets toegestaan.
  6. Als een validatiepatroon is gedefinieerd voor dezelfde cmdlet-parameter in meer dan één rol, zijn alle waarden die overeenkomen met een van de patronen toegestaan.
  7. Als een validatieset is gedefinieerd in een of meer rollen en een validatiepatroon wordt gedefinieerd in een andere rol voor dezelfde cmdlet-parameter, wordt de validatieset genegeerd en is regel (6) van toepassing op de resterende validatiepatronen.

Hieronder ziet u een voorbeeld van hoe rollen worden samengevoegd volgens deze regels:

# Role A Visible Cmdlets
$roleA = @{
    VisibleCmdlets = @(
        'Get-Service'
         @{
            Name       = 'Restart-Service'
            Parameters = @{ Name = 'DisplayName'; ValidateSet = 'DNS Client' }
        }
    )
}

# Role B Visible Cmdlets
$roleB = @{
    VisibleCmdlets = @(
        @{
            Name       = 'Get-Service';
            Parameters = @{ Name = 'DisplayName'; ValidatePattern = 'DNS.*' }
        }
        @{
            Name       = 'Restart-Service'
            Parameters = @{ Name = 'DisplayName'; ValidateSet = 'DNS Server' }
        }
    )
}

# Resulting permissions for a user who belongs to both role A and B
# - The constraint in role B for the DisplayName parameter on Get-Service
#   is ignored because of rule #4
# - The ValidateSets for Restart-Service are merged because both roles use
#   ValidateSet on the same parameter per rule #5
$mergedAandB = @{
    VisibleCmdlets = @(
        'Get-Service'
        @{
            Name = 'Restart-Service';
            Parameters = @{
                Name = 'DisplayName'
                ValidateSet = 'DNS Client', 'DNS Server'
            }
        }
    )
}

VisibleExternalCommands, VisibleAliases, VisibleProviders, ScriptsToProcess

Alle andere velden in het functiemogelijkheidsbestand worden toegevoegd aan een cumulatieve set toegestane externe opdrachten, aliassen, providers en opstartscripts. Elke opdracht, alias, provider of script die beschikbaar is in één rolmogelijkheid, is beschikbaar voor de JEA-gebruiker.

Zorg ervoor dat de gecombineerde set providers van de ene functiemogelijkheid en cmdlets/functies/opdrachten van een andere niet toestaan dat gebruikers onbedoeld toegang hebben tot systeembronnen. Als de ene rol bijvoorbeeld de Remove-Item cmdlet toestaat en een andere de FileSystem provider toestaat, loopt u het risico dat een JEA-gebruiker willekeurige bestanden op uw computer verwijdert. Meer informatie over het identificeren van de effectieve machtigingen van gebruikers vindt u in het ARTIKEL CONTROLE-JEA .

Volgende stappen

Een sessieconfiguratiebestand maken