Last active
September 11, 2023 08:44
-
-
Save rebrec/5d4088656763d2eee894e7488648c414 to your computer and use it in GitHub Desktop.
Configuration de Just Enough Administration (JEA) sur une machine membre d'un domaine Active Directory
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Testé avec Powershell 5.1 | |
# Documentation disponible : # https://learn.microsoft.com/en-us/powershell/scripting/learn/remoting/jea/overview?view=powershell-7.3 | |
# Réalise les opérations suivantes | |
# - crée sur une machine membre d'un domaine AD un endpoint JEA, une session avec un role affecté à celle-ci | |
# - autorise un utilisateur du domaine à accéder à ce rôle (au travers de cette session) | |
# - l'autorisation se fait via la création d'un groupe local auquel on pourra ajouter d'autres membres | |
# - les cmdlets autorisés sont ceux par défaut, il faudra étider le fichier de configuration (voir commentaires plus bas) | |
######## Elements à paramétrer | |
$AllowedUsername = "<DOMAIN>\<Utilisateur>" | |
$SessionName = "TestSession" | |
$Role = "RoleDeTest" | |
$JEAModule = "JEAModule" | |
$TranscriptFolder = 'C:\TRANSCRIPT' | |
$JEA_ROOT = "C:\JEA" | |
$LOCAL_GROUP_NAME = "JEA_TECH" | |
######## | |
# Création d'un groupe local qui servira pour attribuer un rôle à notre utilisateur du domaine de test | |
New-LocalGroup -Name "$LOCAL_GROUP_NAME" -ErrorAction SilentlyContinue | |
# Ajout de l'utilisateur du domaine à ce groupe | |
Add-LocalGroupMember -Group "$LOCAL_GROUP_NAME" -Member "$AllowedUsername" -ErrorAction SilentlyContinue | |
$RoleCapabilitiesFolder= "$env:ProgramFiles\WindowsPowerShell\Modules\$ModuleName\RoleCapabilities" | |
# La définition de rôles doit se trouver dans le sous dossier "RoleCapabilities" d'un module powershell | |
# Création d'un module : | |
New-ModuleManifest -Path "$env:ProgramFiles\WindowsPowerShell\Modules\$ModuleName.psd1" | |
# Création des dossiers | |
New-Item -Path "$JEA_ROOT" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null | |
New-Item -Path "$RoleCapabilitiesFolder" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null | |
New-Item -Path "$TranscriptFolder" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null | |
$RoleCapabilityFile = "$RoleCapabilitiesFolder\$Role.psrc" | |
$SessionConfigurationFile = "$JEA_ROOT\$SessionName.pssc" | |
# Paramètres de sessions utilisables | |
#RunAsVirtualAccount = $true | |
#RunAsVirtualAccountGroups = 'NetworkOperator', 'NetworkAuditor' | |
# Exemple d'utilisation de GMSA pour accéder à des services réseau | |
# with the sAMAccountName of 'MyJEAGMSA'a | |
#GroupManagedServiceAccount = 'Domain\MyJEAGMSA' | |
$roles = @{ | |
#'DOMAIN\Group01' = @{ RoleCapabilities = 'REMOVE_VM_TEST' } | |
"$($env:COMPUTERNAME)\JEA_TECH" = @{ RoleCapabilities = $Role } | |
} | |
$parameters = @{ | |
SessionType = 'RestrictedRemoteServer' | |
Path = $SessionConfigurationFile | |
RunAsVirtualAccount = $true | |
TranscriptDirectory = $TranscriptFolder | |
RoleDefinitions = $roles | |
} | |
New-PSSessionConfigurationFile @parameters | |
# Désinscrit la session (au cas où elle aurait été créée précédemment) | |
Unregister-PSSessionConfiguration -Name $SessionName -Force -ErrorAction SilentlyContinue | Out-Null | |
# Enregistrement de la session : positionne automatiquement les ACL adéquat sur l'endpoint WinRM associé | |
Register-PSSessionConfiguration -Path $ConfigurationFile -Name $SessionName -Force | |
# Edition du fichier de configuration manuellement | |
# Attribution de cmdlets / scripts / exécutables autorisés a être appelés | |
# Détails concernant le contenu de ce fichier : | |
# https://learn.microsoft.com/en-us/powershell/scripting/learn/remoting/jea/role-capabilities?view=powershell-7.3#allowing-powershell-cmdlets-and-functions | |
Notepad $RoleCapabilityFile | |
<# | |
####### Diagnostique | |
# Vérifier les rôles définis pour une session | |
Get-PSSessionConfiguration -Name $SessionName | Select-Object RoleDefinitions | |
# Vérifier les ACLs positionnées sur l'endpoint WinRM de la sesssion (une modification nécessitera le redémarrage du service WinRM) | |
Get-PSSessionConfiguration -Name $SessionName | Select-Object Permission | |
# Vérification de la liste des accès d'un utilisateur | |
Get-PSSessionCapability -ConfigurationName "$SessionName" -Username 'Domaine\Utilisateur1' | |
#> | |
<# | |
######## Utilisation à distance | |
# Creation d'une PSSession avec notre compte utilisateur courant (on pourra utiliser le paramètre -Credential | |
# si on souhaite utiliser des informations d'identification alternatives | |
$jeaSession = New-PSSession -ComputerName "JEA_HOSTNAME" -ConfigurationName "JEA_SESSION_NAME" | |
# Import de tous les cmdlets de la session distante en leur ajoutant le préfixe 'JEA' | |
Import-PSSession -Session $jeaSession -Prefix 'JEA' | |
# Exécution du cmdlet "Get-Command" sur le point de terminaison JEA en utilisant le cmdlet importé (proxy) | |
Get-JEACommand | |
#> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment