개요
Just Enough Administration(JEA)은 PowerShell로 관리되는 모든 것에 최소 권한 원칙(Principle of Least Privilege)을 적용하는 보안 기술이다. 83–88장에서 배운 PowerShell Remoting이 “누구나 원격으로 전체 관리자 권한을 행사할 수 있게” 만드는 기반이었다면, JEA는 그 원격 접근을 “이 사람은 딱 이 명령들만 실행할 수 있다"는 좁은 창구로 제한한다. Part 14(보안과 자격 증명)의 마지막 챕터로서, 지금까지 다룬 자격 증명(100장)·권한(101장)·서명(102장)·언어 모드(103장)·비밀 관리(104장)가 결합돼 만들어내는 실전 보안 아키텍처가 바로 JEA다.
정신 모델은 “일반 원격 세션이 건물 전체 마스터키를 내주는 것이라면, JEA 세션은 딱 필요한 방 몇 개만 열리는 카드키를 내주는 것"이라는 것이다. DNS 관리자가 도메인 관리자 그룹에 속하지 않고도 DNS 서비스만 재시작할 수 있게 하는 것이 대표적인 예다.
사용법
| |
종류
| 구성 요소 | 역할 |
|---|---|
역할 기능(Role Capability) 파일(.psrc) | 특정 역할이 실행할 수 있는 cmdlet·함수·외부 명령 목록 정의 |
세션 구성(Session Configuration) 파일(.pssc) | 어떤 사용자가 어떤 역할 기능을 갖는지 매핑, 103장의 언어 모드(NoLanguage)를 지정 |
| 가상 계정(Virtual Account) / 그룹 관리형 서비스 계정 | JEA 세션 안에서만 임시로 관리자 권한을 부여, 세션 종료 시 소멸 |
| 트랜스크립트·로그 | 69장에서 배운 Start-Transcript처럼 JEA 세션 안의 모든 명령을 자동 기록 |
예시
| |
주의사항·함정
JEA는 별도의 새 명령어 세트가 아니라 84–86장에서 배운 세션 진입점에 거는 제약이다: Enter-PSSession/Invoke-Command 자체의 문법은 그대로이고, -ConfigurationName으로 어떤 세션 구성(JEA 엔드포인트)에 연결할지만 달라진다. “JEA를 쓴다"는 것은 새 도구를 배우는 것이 아니라, 이미 아는 도구를 제한된 문으로 통과시키는 것에 가깝다.
JEA 세션은 파일 시스템이나 다른 시스템 리소스에 직접 접근할 수 없다: 103장에서 다룬 NoLanguage 모드를 기반으로 하기 때문에, 사용자는 역할 기능에 명시적으로 나열된 명령만 실행할 수 있고 임의의 API·스크립트 블록·파일 시스템 탐색은 차단된다. 이 제약을 모르고 JEA 세션 안에서 평소처럼 자유롭게 스크립트를 작성하려 하면 대부분 막힌다 — 이것이 JEA의 버그가 아니라 설계 목적이다.
가상 계정을 쓰면 사용자는 비관리자 자격 증명으로 접속해도 세션 안에서는 관리자 권한 명령이 동작한다: 이 특성이 JEA의 핵심 가치다 — DNS 관리자가 굳이 도메인 관리자 그룹에 속하지 않아도, JEA 세션 안에서만 임시로 상승된 권한으로 DNS 서비스를 재시작할 수 있다. 권한 상승이 세션 종료와 함께 사라지므로, 그 계정이 탈취돼도 피해 범위가 역할 기능에 정의된 범위로 제한된다.
역할 기능·세션 구성 설계 자체가 별도의 전문성을 요구한다: JEA를 도입하려면 “이 역할이 정확히 어떤 명령까지 필요한가"를 세밀하게 분석해 .psrc/.pssc 파일을 작성해야 한다. 필요한 명령을 빠뜨리면 업무가 안 되고, 너무 넓게 허용하면 최소 권한 원칙이 무의미해진다 — 이 설계·검토 과정이 JEA 도입의 실질적인 비용이다.
이식성: Linux의 sudo와 sudoers 파일에서 특정 사용자에게 특정 명령만 허용하는 설정이 개념적으로 가장 가깝다. 다만 JEA는 명령 단위 제한에 더해 언어 모드 제약(임의 스크립팅 차단)과 가상 계정(임시 권한 상승)까지 통합한 훨씬 포괄적인 프레임워크라는 점에서 sudoers보다 범위가 넓다. CMD에는 이런 세밀한 위임 관리 개념이 없다.
![Featured image of post [PowerShell] 105. Just Enough Administration(JEA) 개요](/post/powershell/just-enough-administration-jea-overview-powershell/wordcloud_hu_b398af1b6e41a7ca.webp)
![[PowerShell] 103. Constrained Language Mode와 실행 정책 심화](/post/powershell/constrained-language-mode-execution-policy-powershell/wordcloud_hu_1f478e5deaa8aac5.webp)
![[PowerShell] 104. Microsoft.PowerShell.SecretManagement](/post/powershell/secretmanagement-module-powershell/wordcloud_hu_cde55587e5be8c5d.webp)
![[PowerShell] 105. Just Enough Administration(JEA) 개요](/post/powershell/just-enough-administration-jea-overview-powershell/wordcloud_hu_ddb65b570beeaaa7.webp)
![[PowerShell] 106. DSC 개념과 아키텍처](/post/powershell/dsc-concept-architecture-powershell/wordcloud_hu_cac3a4999bb273a4.webp)
![[PowerShell] 107. DSC 구성(Configuration) 작성과 적용](/post/powershell/dsc-configuration-write-apply-powershell/wordcloud_hu_a3e68be2f0f53bee.webp)
![[PowerShell] 00. 과정 개요와 커리큘럼](/post/powershell/getting-started-powershell/wordcloud_hu_15979a96cd2a594f.webp)
![[PowerShell] 100. Get-Credential과 PSCredential 객체](/post/powershell/get-credential-pscredential-object-powershell/wordcloud_hu_e8db052a57f9c242.webp)
![[PowerShell] 101. Get-Acl/Set-Acl — 접근 제어 목록](/post/powershell/get-set-acl-access-control-powershell/wordcloud_hu_ff2983faad053cab.webp)
![[PowerShell] 102. Set-AuthenticodeSignature — 스크립트 코드 서명](/post/powershell/set-authenticodesignature-code-signing-powershell/wordcloud_hu_4d09ca64a3b3f852.webp)