PowerShell JEA(Just Enough Administration)란?
JEA(Just Enough Administration)는 PowerShell 5.0부터 제공되는 기능으로, PowerShell로 관리할 수 있는 모든 대상에 대해 관리 권한을 위임할 수 있게 해줍니다. JEA의 핵심 목적은 권한 최소화입니다. 서버나 서비스(AD, Exchange, SharePoint 등)의 관리자 권한을 부여하지 않으면서도, 관리자가 아닌 사용자에게 특정 관리 작업을 수행할 수 있는 권한을 안전하게 부여할 수 있습니다. 또한 어떤 사용자가 어떤 cmdlet, 함수, PowerShell 스크립트를 관리자 권한으로 실행할 수 있는지 지정하고, 모든 작업 내역을 로그로 기록할 수 있습니다(PowerShell 명령 기록과 유사한 방식).
PowerShell JEA 구현 방법
관리자는 사용자가 실행할 수 있는 명령이 포함된 PowerShell 세션 구성 파일을 서버에 생성합니다. 이 파일을 기반으로 JEA 엔드포인트가 만들어지며, 사용자는 해당 엔드포인트에 연결해 자신에게 허용된 명령이나 프로그램을 실행할 수 있습니다.
이 글에서는 관리자가 아닌 사용자에게 도메인 컨트롤러 재부팅 권한과 DNS, AD DS 서비스 재시작 권한을 부여하는 예제를 살펴보겠습니다.
이 방식을 사용하면 사용자에게 도메인 컨트롤러 RDP 접근 권한을 부여하거나, AD에서 관리 권한을 위임하거나, Windows 서비스 권한 및 서버 재시작 권한을 별도로 설정할 필요가 없습니다. 모든 제한 사항은 Just Enough Administration 구성에서 일괄 관리됩니다.
1단계: PowerShell 세션 구성 파일(.pssc) 생성
먼저 PowerShell 세션 구성 파일(*.pssc)을 생성합니다. 도메인 컨트롤러에서 다음 명령을 실행합니다:
New-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
생성된 PSSC 파일을 메모장으로 엽니다. PSSC 파일은 누가 이 JEA 엔드포인트에 연결할 수 있는지, 그리고 JEA 세션의 명령이 어떤 계정으로 실행될지를 정의합니다.
다음 항목들을 수정합니다:
- SessionType을 Default에서 RestrictedRemoteServer로 변경합니다. 이 모드에서는 Clear-Host, Exit-PSSession, Get-Command, Get-FormatData, Get-Help, Measure-Object, Out-Default, Select-Object 등 제한된 cmdlet만 사용할 수 있습니다.
- TranscriptDirectory 매개변수에 로그를 기록할 폴더를 지정합니다(사전 생성 필요). 모든 JEA 사용자 작업이 여기에 기록됩니다:
TranscriptDirectory = C:\PS\JEA_logs - RunAsVirtualAccount 옵션을 사용하면 가상 관리자 계정(로컬 관리자 또는 도메인 관리자 그룹 멤버)으로 명령을 실행할 수 있습니다:
RunAsVirtualAccount = $true
네트워크 리소스에 접근해야 하는 경우 그룹 관리 서비스 계정(gMSA)을 사용할 수도 있습니다: GroupManagedServiceAccount = 'woshub\gMSAJEAUser'
RoleDefinitions 지시문에서는 PowerShell 세션에 연결할 수 있는 AD 보안 그룹과 JEA 역할 이름(나중에 생성할 PSRC 파일 이름과 일치해야 함)을 지정합니다.
예를 들면 다음과 같습니다:
RoleDefinitions = @{'woshub.com\HelpDesk' = @{ RoleCapabilities = 'HelpDesk_admins' }}세션 구성 파일을 저장합니다.
진행하기 전에 구성 파일에 오류가 없는지 반드시 확인합니다:
Test-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
2단계: 역할 기능 파일(.psrc) 생성
JEA 구성 파일을 저장할 새 디렉터리를 생성합니다:
New-Item -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities' -ItemType Directory
PSRC 파일은 반드시 해당 모듈의 RoleCapabilities 하위 폴더에 위치해야 합니다.
그런 다음 역할 설명이 담긴 PSRC 구성 파일을 생성합니다(PSSC 구성에서 지정한 파일 이름을 사용합니다):
New-PSRoleCapabilityFile -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities\HelpDesk_admins.psrc'
PSRC 파일은 현재 JEA 세션에서 수행할 수 있는 작업을 정의합니다. VisibleCmdlets 지시문에서 특정 사용자 그룹이 사용할 수 있는 cmdlet(및 유효한 매개변수)을 지정할 수 있으며, VisibleExternalCommands 옵션에서는 실행이 허용된 외부 명령과 EXE 파일을 지정할 수 있습니다.
예를 들어 다음 구성은 HelpDesk 사용자가 shutdown 명령이나 Restart-Computer cmdlet으로 도메인 컨트롤러를 재부팅하고, Restart-Service cmdlet으로 DNS 서버 및 Active Directory 도메인 서비스를 재시작할 수 있도록 허용합니다:
VisibleCmdlets = 'Restart-Computer', @{ Name = 'Restart-Service'; Parameters = @{ Name = 'Name'; ValidateSet = 'DNS', 'NTDS' }}
VisibleExternalCommands = 'c:\windows\system32\shutdown.exe'PSRC 파일을 저장합니다.
3단계: 세션 구성 등록 및 WinRM 재시작
이제 PSSC 파일에 대한 새 PSSession 구성을 등록합니다:
Register-PSSessionConfiguration -Name testHelpDesk -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
그리고 WinRM 서비스를 재시작합니다:
Restart-Service WinRM
등록된 JEA 엔드포인트 목록은 다음 명령으로 확인할 수 있습니다:
Get-PSSessionConfiguration | ft name
JEA 구성 테스트하기
새로운 JEA 구성이 어떻게 작동하는지 확인해 보겠습니다. 구성 파일에 지정된 보안 그룹에 속한 사용자 계정으로 생성된 JEA 엔드포인트에 연결할 수 있습니다. PowerShell Remoting으로 도메인 컨트롤러에 연결합니다(이때 JEA 엔드포인트 이름을 반드시 지정해야 합니다):
Enter-PSSession -ComputerName dc01 -ConfigurationName testHelpDesk
PowerShell 세션에서 사용 가능한 cmdlet 목록을 확인합니다:
Get-Command
실행 결과, Restart-Service와 Restart-Computer를 포함한 소수의 명령만 사용할 수 있는 것을 확인할 수 있습니다. 즉, 사용자는 허용된 작업만 수행할 수 있습니다.
DNS 서비스를 재시작해 보겠습니다:
Restart-Service dns
서비스가 성공적으로 재시작되었습니다. 명령은 도메인 관리자 권한을 가진 가상 계정으로 실행됩니다.
반면 JEA 구성 파일에 정의되지 않은 다른 서비스를 재시작하려고 하면 다음과 같은 오류 메시지가 표시됩니다:
Cannot validate argument on parameter 'Name'. The argument "spooler" does not belong to the set "DNS,NTDS" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again. + CategoryInfo : InvalidData: (:) [Restart-Service], ParameterBindingValidationException
JEA PowerShell 세션에서 수행된 모든 사용자 작업 기록은 C:\PS\JEA_logs 폴더의 파일에 저장되므로, 언제든 감사 및 추적이 가능합니다.
결론
이처럼 PowerShell JEA를 활용하면 사용자에게 관리자 권한으로 특정 cmdlet, 스크립트 또는 프로그램을 실행할 수 있는 세분화된 접근 권한을 부여할 수 있습니다. 최소 권한 원칙(Principle of Least Privilege)을 준수하면서도 헬프데스크 운영 등의 업무 효율성을 크게 높일 수 있는 강력한 보안 솔루션입니다.