ฟีเจอร์ Just Enough Administration (JEA) พร้อมใช้งานตั้งแต่ PowerShell เวอร์ชัน 5.0 ขึ้นไป และช่วยให้คุณมอบสิทธิ์ผู้ดูแลระบบให้กับทุกสิ่งที่คุณสามารถจัดการด้วย PowerShell ได้ วัตถุประสงค์หลักของ PowerShell JEA คือการจำกัดสิทธิ์ JEA ช่วยให้คุณมอบสิทธิ์ผู้ใช้ที่ไม่ใช่แอดมินให้ทำงานบริหารเฉพาะเจาะจงได้ โดยไม่ต้องให้สิทธิ์แอดมินของเซิร์ฟเวอร์หรือบริการ (AD, Exchange, SharePoint ฯลฯ) โดยใช้ JEA คุณสามารถกำหนดได้ว่าผู้ใช้คนไหนสามารถรัน Cmdlet, ฟังก์ชัน หรือสคริปต์ PowerShell เฉพาะเจาะจงด้วยสิทธิ์แอดมิน และบันทึกการกระทำทั้งหมด (คล้ายกับประวัติคำสั่ง PowerShell)
วิธีการนำ PowerShell Just Enough Administration ไปใช้
ผู้ดูแลระบบสร้างไฟล์การกำหนดค่าเซสชัน PowerShell (*.pssc) บนเซิร์ฟเวอร์ที่มีคำสั่งที่ผู้ใช้สามารถรันได้ จากไฟล์เหล่านี้ จะสร้าง JEA Endpoint ที่ผู้ใช้สามารถเชื่อมต่อและรันคำสั่งหรือโปรแกรมใดๆ ที่มีให้ใช้งานได้
ที่นี่เราจะแสดงตัวอย่างการให้สิทธิ์ผู้ใช้ที่ไม่ใช่แอดมินให้รีบูตโดเมนคอนโทรลเลอร์ และรีสตาร์ทบริการ DNS และ ADDS บนมัน
1. สร้างไฟล์การกำหนดค่าเซสชัน PowerShell (*.pssc)
รันคำสั่งนี้บนโดเมนคอนโทรลเลอร์ของคุณ:
New-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
เปิดไฟล์ PSSC ด้วย Notepad ไฟล์ PSSC กำหนดว่าใครสามารถเชื่อมต่อกับ JEA Endpoint นี้ได้ และภายใต้บัญชีใดที่คำสั่งในเซสชัน JEA จะทำงาน
2. แก้ไขค่าต่อไปนี้ในไฟล์ PSSC
- SessionType จาก Default เป็น RestrictedRemoteServer โหมดนี้อนุญาตให้ใช้ PowerShell Cmdlet ต่อไปนี้: Clear-Host, Exit-PSSession, Get-Command, Get-FormatData, Get-Help, Measure-Object, Out-Default หรือ Select-Object
- ระบุโฟลเดอร์ (สร้างขึ้น) ในพารามิเตอร์ TranscriptDirectory ที่นี่จะบันทึกการกระทำทั้งหมดของผู้ใช้ JEA:
TranscriptDirectory = C:\PS\JEA_logs - ตัวเลือก RunAsVirtualAccount อนุญาตให้รันคำสั่งภายใต้บัญชีแอดมินเสมือน (เป็นสมาชิกของกลุ่ม Administrator ท้องถิ่นหรือ Domain Administrator):
RunAsVirtualAccount = $true
คุณสามารถใช้ Group Managed Service Account (gMSA) เพื่อเข้าถึงทรัพยากรเครือข่าย: GroupManagedServiceAccount = 'woshub\gMSAJEAUser'
ในคำสั่ง RoleDefinitions ให้ระบุกลุ่มความปลอดภัย AD ที่ได้รับอนุญาตให้เชื่อมต่อกับเซสชัน PowerShell และชื่อบทบาท JEA (ต้องตรงกับชื่อไฟล์ PSRC ที่เราจะสร้างต่อไป)
ตัวอย่าง:
RoleDefinitions = @{'woshub.com\HelpDesk' = @{ RoleCapabilities = 'HelpDesk_admins' }}
3. ตรวจสอบไฟล์การกำหนดค่า
ก่อนดำเนินการต่อ ตรวจสอบว่าไม่มีข้อผิดพลาดในไฟล์การกำหนดค่า:
Test-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
4. สร้างไฟล์การกำหนดค่าบทบาท PSRC
สร้างไดเรกทอรีใหม่เพื่อเก็บไฟล์การกำหนดค่า JEA:
New-Item -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities' -ItemType Directory
สร้างไฟล์การกำหนดค่า PSRC พร้อมคำอธิบายบทบาท (ใช้ชื่อไฟล์จากการกำหนดค่า PSSC ข้างต้น)
New-PSRoleCapabilityFile -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities\HelpDesk_admins.psrc'
ไฟล์ PSRC ระบุว่าสิ่งที่ได้รับอนุญาตให้ทำในเซสชัน JEA ปัจจุบัน ในคำสั่ง VisibleCmdlets คุณสามารถระบุ Cmdlet (และพารามิเตอร์ที่ถูกต้อง) ที่อนุญาตให้กลุ่มผู้ใช้ใช้งานได้
ในตัวเลือก VisibleExternalCommands คุณสามารถระบุคำสั่งภายนอกและไฟล์ EXE ที่อนุญาตให้รันได้
ตัวอย่างการกำหนดค่าที่อนุญาตให้ผู้ใช้ HelpDesk รีสตาร์ทโดเมนคอนโทรลเลอร์ด้วยคำสั่ง shutdown หรือ Cmdlet Restart-Computer รวมถึงรีสตาร์ทบริการ DNSServer และ Active Directory Domain Services โดยใช้ Cmdlet Restart-Service:
VisibleCmdlets = 'Restart-Computer', @{ Name = 'Restart-Service'; Parameters = @{ Name = 'Name'; ValidateSet = 'DNS', 'NTDS' }}
VisibleExternalCommands = 'c:\windows\system32\shutdown.exe'
5. ลงทะเบียนการกำหนดค่าเซสชัน PSSession ใหม่
Register-PSSessionConfiguration –Name testHelpDesk -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
และรีสตาร์ท WinRM:
Restart-Service WinRM
6. ทดสอบการทำงานของ JEA
คุณสามารถเชื่อมต่อกับ JEA Endpoint ที่สร้างขึ้นภายใต้บัญชีผู้ใช้จากกลุ่มความปลอดภัยที่ระบุในไฟล์การกำหนดค่า เชื่อมต่อกับโดเมนคอนโทรลเลอร์โดยใช้ PowerShell Remoting (คุณต้องระบุชื่อ JEA Endpoint):
Enter-PSSession -ComputerName dc01 -ConfigurationName testHelpDesk
ดูรายการ Cmdlet ที่มีอยู่ในเซสชัน PowerShell ของคุณ:
Get-Command
ลองรีสตาร์ทบริการ DNS:
Restart-Service DNS
บริการถูกรีสตาร์ทสำเร็จ (คำสั่งรันภายใต้ผู้ใช้ที่มีสิทธิ์ Domain Admin)
หากคุณพยายามรีสตาร์ทบริการอื่นที่ไม่ได้ระบุในไฟล์การกำหนดค่า JEA จะปรากฏข้อความข้อผิดพลาด:
Cannot validate argument on parameter 'Name'. The argument "spooler" does not belong to the set "DNS,NTDS" specified by the ValidateSet attribute.
ประวัติการกระทำทั้งหมดของผู้ใช้ในเซสชัน PowerShell JEA จะถูกบันทึกลงในไฟล์ที่ C:\PS\JEA_logs
ดังนั้น JEA ช่วยให้คุณมอบสิทธิ์เข้าถึงให้ผู้ใช้เพื่อรัน Cmdlet, สคริปต์ หรือโปรแกรม PowerShell เฉพาะเจาะจงในฐานะผู้ดูแลระบบได้อย่างละเอียด