Tính năng Just Enough Administration (JEA) có sẵn từ PowerShell phiên bản 5.0 và cho phép bạn ủy quyền quản trị cho bất cứ thứ gì bạn có thể quản lý bằng PowerShell. Mục đích chính của PowerShell JEA là giới hạn đặc quyền. JEA cho phép bạn cấp quyền cho người dùng không phải admin để thực hiện các tác vụ quản trị cụ thể mà không cần cấp quyền quản trị máy chủ hoặc dịch vụ (AD, Exchange, SharePoint, v.v.). Sử dụng JEA, bạn có thể thiết lập người dùng nào có thể chạy các cmdlet, hàm hoặc script PowerShell cụ thể với đặc quyền admin và ghi lại tất cả hành động (tương tự lịch sử lệnh PowerShell).
Cách Triển Khai PowerShell Just Enough Administration?
Quản trị viên tạo file cấu hình phiên PowerShell (*.pssc) trên máy chủ chứa các lệnh mà người dùng có thể chạy. Dựa trên các file này, một endpoint JEA được tạo mà người dùng có thể kết nối và thực thi bất kỳ lệnh hoặc chương trình nào có sẵn cho họ.
Ở đây, chúng tôi sẽ ví dụ cách cấp quyền cho người dùng không phải admin để khởi động lại bộ điều khiển miền, và khởi động lại dịch vụ DNS và ADDS trên nó.
Trong trường hợp này, bạn không cần cấp quyền truy cập RDP vào bộ điều khiển miền cho người dùng, ủy quyền đặc quyền quản trị trong AD, gán quyền trên dịch vụ Windows, hoặc khởi động lại máy chủ theo các hướng dẫn. Tất cả các hạn chế cần thiết được thiết lập trong cấu hình Just Enough Administration.
Trước hết, tạo file cấu hình phiên PowerShell (*.pssc). Để làm điều đó, hãy chạy lệnh này trên bộ điều khiển miền của bạn:
New-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
Mở file PSSC bằng Notepad.
File PSSC thiết lập ai có thể kết nối đến endpoint JEA này và dưới tài khoản nào các lệnh trong phiên JEA sẽ chạy.
Sửa đổi các giá trị sau:
- SessionType từ Default thành RestrictedRemoteServer. Chế độ này cho phép sử dụng các cmdlet PowerShell sau: Clear-Host, Exit-PSSession, Get-Command, Get-FormatData, Get-Help, Measure-Object, Out-Default hoặc Select-Object.
- Chỉ định một thư mục (tạo nó) trong tham số TranscriptDirectory. Tại đây, bạn sẽ ghi nhật ký tất cả hành động của người dùng JEA:
TranscriptDirectory = C:\PS\JEA_logs - Tùy chọn RunAsVirtualAccount cho phép chạy lệnh dưới tài khoản quản trị ảo (thành viên của nhóm Administrator cục bộ hoặc Domain Administrator):
RunAsVirtualAccount = $true
Bạn có thể sử dụng tài khoản dịch vụ được quản lý theo nhóm (gMSA) để truy cập tài nguyên mạng: GroupManagedServiceAccount = 'woshub\gMSAJEAUser'
Trong chỉ thị RoleDefinitions, hãy chỉ định nhóm bảo mật AD được phép kết nối với phiên PowerShell và tên vai trò JEA (nó phải khớp với tên file PSRC mà chúng ta sẽ tạo sau).
Ví dụ:
RoleDefinitions = @{‘woshub.com\HelpDesk' = @{ RoleCapabilities = 'HelpDesk_admins' }}
Lưu file cấu hình phiên.
Trước khi tiến hành, hãy đảm bảo không có lỗi trong file cấu hình:
Test-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
Tạo thư mục mới để lưu file cấu hình JEA, ví dụ:
New-Item -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities ' -ItemType Directory
File PSRC phải luôn nằm trong thư mục con RoleCapabilities của module tương ứng.
Sau đó, tạo file cấu hình PSRC với mô tả vai trò (sử dụng tên file từ cấu hình PSSC ở trên).
New-PSRoleCapabilityFile -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities\HelpDesk_admins.psrc'
File PSRC chỉ định những gì được phép làm trong phiên JEA hiện tại. Trong chỉ thị VisibleCmdlets, bạn có thể chỉ định các cmdlet (và các tham số hợp lệ của chúng) được phép sử dụng cho nhóm người dùng nhất định.
Trong tùy chọn VisibleExternalCommands, bạn có thể chỉ định các lệnh bên ngoài và file EXE được phép chạy.
Ví dụ, cấu hình sau cho phép người dùng HelpDesk khởi động lại bộ điều khiển miền bằng lệnh shutdown hoặc cmdlet Restart-Computer, cũng như khởi động lại DNSServer và Dịch Vụ Miền Active Directory bằng cmdlet Restart-Service.
VisibleCmdlets = 'Restart-Computer', @{ Name = 'Restart-Service'; Parameters = @{ Name = 'Name'; ValidateSet = 'DNS', 'NTDS' }}
VisibleExternalCommands = 'c:\windows\system32\shutdown.exe'
Lưu file PSRC của bạn.
Sau đó đăng ký cấu hình PSSession mới cho file PSSC của bạn:
Register-PSSessionConfiguration –Name testHelpDesk -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'
và khởi động lại WinRM:
Restart-Service WinRM
Bạn có thể liệt kê các endpoint JEA có sẵn:
Get-PSSessionConfiguration|ft name
Hãy xem cấu hình Just-Enough-Administration (JEA) mới của chúng ta hoạt động như thế nào. Bạn có thể kết nối đến endpoint JEA đã tạo dưới tài khoản người dùng từ nhóm bảo mật được chỉ định trong file cấu hình. Kết nối đến bộ điều khiển miền bằng PowerShell Remoting (bạn phải chỉ định tên endpoint JEA):
Enter-PSSession -ComputerName dc01 -ConfigurationName testHelpDesk
Xem danh sách cmdlet có sẵn trong phiên PowerShell của bạn:
Get-Command
Như bạn thấy, một số lượng nhỏ lệnh có sẵn, bao gồm Restart-Service và Restart-Computer. Người dùng chỉ có thể làm những gì được phép.
Thử khởi động lại dịch vụ DNS:
Restart-Computer dns
Dịch vụ đã được khởi động lại thành công (lệnh chạy dưới tài khoản đặc quyền với quyền domain admin).
Nếu bạn thử khởi động lại bất kỳ dịch vụ nào khác không được mô tả trong file cấu hình JEA, thông báo lỗi sau sẽ xuất hiện:
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
Lịch sử tất cả hành động của người dùng trong phiên PowerShell JEA được ghi vào các file trong C:\PS\JEA_logs.
Vậy, JEA cho phép bạn cấp quyền chi tiết cho người dùng để chạy các cmdlet, script hoặc chương trình PowerShell cụ thể với tư cách quản trị viên.