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 een belangrijk proces. Gebruikers toegang geven tot te weinig cmdlets en functies kunnen verhinderen dat ze hun werk doen. Als u toegang tot te veel cmdlets en functies toestaat, kunnen gebruikers meer doen dan u hebt bedoeld en uw beveiligingshouding verzwakt.

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 het gebruik van opdrachtregelprogramma's bij naar PowerShell-equivalenten, indien mogelijk, 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 lijst 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 is vereist voor het succes van gebruikers in een JEA-sessie, wordt vaak uitgevoerd met verhoogde bevoegdheden.

De volgende tabel 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 Voorbeeld Verwante opdrachten
De beheerdersbevoegdheden van de gebruiker verlenen om JEA te omzeilen Add-LocalGroupMember -Member 'CONTOSO\jdoe' -Group 'Administrators' Add-ADGroupMember, Add-LocalGroupMember, net.exe, dsadd.exe
Willekeurige code uitvoeren, zoals malware, aanvallen of aangepaste scripts om beveiligingen te omzeilen Start-Process -FilePath '\\san\share\malware.exe' 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-functiebestand maken met de cmdlet New-PSRoleCapabilityFile .

New-PSRoleCapabilityFile -Path .\MyFirstJEARole.psrc

Het resulterende functiebestand moet worden bewerkt om de opdrachten toe te staan die vereist zijn voor de rol. De Help-documentatie voor 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 met deze parameters kan gebruiken. Met functiemogelijkheden kunt u een set waarden of een reguliere 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 deze niet expliciet vermelden in het veld Parameters.

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

Voorbeeld Gebruiksvoorbeeld
'My-Func' of @{ Name = 'My-Func' } Hiermee kan de gebruiker zonder beperkingen op de parameters worden uitgevoerd My-Func .
'MyModule\My-Func' Hiermee kan de gebruiker zonder beperkingen van de parameters vanuit de module MyModule worden uitgevoerdMy-Func.
'My-*' Hiermee kan de gebruiker een cmdlet of functie uitvoeren met het werkwoord My.
'*-Func' Hiermee kan de gebruiker een cmdlet of functie uitvoeren met het zelfstandig naamwoord Func.
@{ Name = 'My-Func'; Parameters = @{ Name = 'Param1'}, @{ Name = 'Param2' }} Hiermee kan de gebruiker worden uitgevoerd My-Func met de Param1 en Param2 parameters. Elke waarde kan aan de parameters worden opgegeven.
@{ Name = 'My-Func'; Parameters = @{ Name = 'Param1'; ValidateSet = 'Value1', 'Value2' }} Hiermee kan de gebruiker worden uitgevoerd My-Func met de Param1 parameter. Alleen "Value1" en "Value2" kunnen worden opgegeven aan de parameter.
@{ Name = 'My-Func'; Parameters = @{ Name = 'Param1'; ValidatePattern = 'contoso.*' }} Hiermee kan de gebruiker worden uitgevoerd My-Func met de Param1 parameter. Elke waarde die begint met 'contoso' kan worden opgegeven aan de parameter.

Waarschuwing

Voor aanbevolen beveiligingsprocedures wordt het niet aanbevolen om 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 die hetzelfde naamgevingsschema delen 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.

Voor meer informatie over ValidatePattern bekijkt u deze Hey, Scripting Guy! post en de reguliere PowerShell Expressions-inhoud .

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'

Als u waar mogelijk PowerShell-cmdlets of functie-equivalenten wilt gebruiken 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 door te gebruiken net share. Het toestaan van net.exe is echter gevaarlijk omdat de gebruiker de opdracht kan gebruiken om beheerdersbevoegdheden te verkrijgen met net group Administrators unprivilegedjeauser /add. Een veiligere optie is om Get-SmbShare toe te staan, waardoor hetzelfde resultaat wordt 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. Hiermee voorkomt u de uitvoering van vergelijkbare benoemde en mogelijk schadelijke programma's die zich ergens anders 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 openbaar worden gemaakt voor de verbinding makende 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 overwegen om een aangepaste functie te 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 bij het kopiëren van bestanden naar of van een JEA-eindpunt.

Aangepaste functies maken

U kunt aangepaste functies maken in een functiebestand 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 deze 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 de taalbeperkingen van JEA. Dit betekent dat functies toegang hebben tot het bestandssysteem en het register en opdrachten kunnen uitvoeren die niet zichtbaar zijn gemaakt in het functiebestand voor rollen. Zorg ervoor dat u geen willekeurige code uitvoert wanneer u parameters gebruikt. Vermijd het rechtstreeks sluisen van gebruikersinvoer 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 functiemogelijkhedenbestanden, 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 toestaan. 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 deze 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 powerShell een functiebestand vinden dat moet worden opgeslagen in een Map RoleCapabilities 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 voor het hosten van het functiemogelijkhedenbestand.

# 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.
New-Item -ItemType File -Path (Join-Path $modulePath "ContosoJEAFunctions.psm1")
New-ModuleManifest -Path (Join-Path $modulePath "ContosoJEA.psd1") -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 Informatie over een PowerShell-module 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. Alle 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, kunnen ze zichzelf eenvoudig toegang geven tot cmdlets waarmee ze hun bevoegdheden kunnen verhogen.

Voor beheerders die de toegang tot de functiemogelijkheden willen vergrendelen, moet u ervoor zorgen dat lokaal systeem leestoegang heeft tot de functiemogelijkhedenbestanden en modules bevat.

Hoe rolmogelijkheden worden samengevoegd

Gebruikers krijgen toegang tot alle overeenkomende functiemogelijkheden in het sessieconfiguratiebestand wanneer ze een JEA-sessie invoeren. JEA probeert de gebruiker de meest permissieve 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 beperkt kunnen hebben in JEA.

De regels zijn als volgt:

  1. Als een cmdlet alleen zichtbaar is 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 met één rol een validatieset of validatiepatroon voor een cmdlet-parameter wordt gedefinieerd en de andere rol 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 van 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 functiebestand voor rollen 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 gebruiker geen onbedoelde toegang tot systeembronnen toestaat. Als de ene rol bijvoorbeeld de Remove-Item cmdlet toestaat en de 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 JEA-artikel over controle .

Volgende stappen

Een sessieconfiguratiebestand maken