Managed Service Account (MSA) là loại tài khoản Active Directory đặc biệt có thể dùng để chạy an toàn dịch vụ, ứng dụng và tác vụ được lên lịch. Ý tưởng cơ bản là mật khẩu cho các tài khoản này hoàn toàn được quản lý bởi Active Directory. Một mật khẩu phức tạp với độ dài 240 ký tự được tự động tạo cho chúng, tự động thay đổi (mặc định cứ 30 ngày). Chỉ Kerberos được dùng để xác thực (không có vấn đề bảo mật NTLM), đăng nhập tương tác không được phép, mật khẩu không ai biết và không lưu trên hệ thống cục bộ (bạn không thể trích xuất mật khẩu từ tiến trình hệ thống LSASS bằng mimikatz hoặc công cụ tương tự). Cách này, để khởi động dịch vụ hoặc tác vụ không giám sát, bạn không cần tạo người dùng dịch vụ riêng trong AD và quản lý mật khẩu của họ.
Managed Service Accounts được giới thiệu trong Windows Server 2008 R2 (loại đối tượng msDS-ManagedServiceAccount). Hạn chế chính của chúng là tài khoản như vậy chỉ có thể dùng trên một server (không thể dùng trong dịch vụ cluster và NLB). Do đó, Windows Server 2012 giới thiệu Group Managed Service Accounts/gMSA (loại msDS-GroupManagedServiceAccount). Tài khoản gMSA có thể dùng đồng thời trên nhiều host.
Hãy xem xét tính năng sử dụng MSA và gMSA để khởi động dịch vụ và tác vụ trên server và trạm làm việc trong Active Directory.
Yêu cầu để sử dụng tài khoản dịch vụ MSA/gMSA:
| Managed Service Account | Group Managed Service Account | |
| AD domain and forest functional level | Windows Server 2008 R2 hoặc mới hơn | Windows Server 2012 hoặc mới hơn |
| KDC | Domain controller với Microsoft Key Distribution Service (KdsSvc) được bật | |
| PowerShell | Để tạo và quản lý tài khoản dịch vụ AD, bạn cần cài module Active Directory cho Windows PowerShell | |
| .Net Framework | .NET Framework 3.5 hoặc mới hơn phải cài trên server | |
| Phiên bản Windows được hỗ trợ | Windows 7/Windows Server 2008 R2 hoặc mới hơn | Windows Server 2012/Windows 8 hoặc mới hơn |
Tạo Key Distribution Service (KDS) Key
Trước khi bắt đầu tạo tài khoản MSA/gMSA, bạn phải thực hiện thao tác một lần và tạo KDS root key. Để làm vậy, chạy lệnh PowerShell sau trên domain controller (Microsoft Key Distribution Services phải được cài và chạy):
Add-KdsRootKey –EffectiveImmediately
Trong trường hợp này, key được tạo và có sẵn sau 10 giờ khi replication AD kết thúc.
Mẹo. Để dùng key ngay lập tức trong môi trường test, bạn có thể chạy lệnh này:
Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))
Đảm bảo KDS root key đã được tạo thành công:
Get-KdsRootKey
Dùng lệnh để kiểm tra KDS key:
Test-KdsRootKey -KeyId (Get-KdsRootKey).KeyId
Cách tạo Managed MSA Account trong Active Directory
Để tạo tài khoản MSA được quản lý mới trong AD, dùng lệnh:
New-ADServiceAccount -Name msaMunSrv1 –RestrictToSingleComputer
Mặc định, MSA và gMSA được tạo trong container CN=Managed Service Accounts, nhưng bạn có thể đổi OU dùng tham số Path.
Liên kết tài khoản dịch vụ MSA với máy tính đích:
$Identity = Get-ADComputer -identity mun-srv01
Add-ADComputerServiceAccount -Identity $identity -ServiceAccount msaMunSrv1
Nhắc lại, bạn chỉ có thể dùng tài khoản MSA trên một host AD.
Mở bảng điều khiển ADUC (Active Directory Users and Computers) và đảm bảo tài khoản mới loại msDS-ManagedServiceAccount đã xuất hiện trong container Managed Service Accounts (OU).
Container AD này bị ẩn mặc định. Để thấy nó, bật Advanced Features trong menu View của snap-in.
Bạn có thể lấy thông tin tài khoản MSA bằng lệnh:
Get-ADServiceAccount msaMunSrv1
Tạo Group Managed Service Account (gMSA) trong Active Directory
Trước khi tạo tài khoản gMSA, tạo nhóm bảo mật miền và thêm server vào đó sẽ được phép dùng mật khẩu cho tài khoản dịch vụ nhóm này. Cách dễ nhất tạo và điền nhóm là dùng PowerShell:
New-ADGroup grMunSQL1 -path 'OU=Groups,OU=Munich,OU=DE,dc=woshub,DC=com' -GroupScope Global -PassThru –Verbose
Add-AdGroupMember -Identity grMunSQL1 -Members mun-sql01$, mun-sql02$, mun-sql03$
Để tạo Group Managed Service Account (gMSA), dùng lệnh:
New-ADServiceAccount -name gmsaMunSQL1 -DNSHostName gmsaMunSQL1.woshub.com -PrincipalsAllowedToRetrieveManagedPassword grMunSQL1 –verbose
Tài khoản gMSA cũng được tạo mặc định trong OU Managed Service Accounts.
Cài đặt Group Managed Service Account trên Windows
Để dùng tài khoản dịch vụ MSA/gMSA trên server hoặc trạm làm việc đích, bạn trước hết cần cài module Active Directory PowerShell:
Add-WindowsFeature RSAT-AD-PowerShell
Cài tài khoản dịch vụ MSA (gMSA) trên server:
Install-ADServiceAccount -Identity gmsaMunSQL1
Kiểm tra xem tài khoản dịch vụ được cài đúng chưa:
Test-ADServiceAccount gmsaMunSQL1
Nếu lệnh trả về True, mọi thứ được cấu hình đúng.
Nếu lệnh trả về False, rất có thể tài khoản MSA không được cài trên server hoặc máy tính này không có quyền dùng nó:
WARNING: Test failed for Managed Service Account gmsaMunSQL1. If standalone Managed Service Account, the account is linked to another computer object in the Active Directory. If group Managed Service Account, either this computer does not have permission to use the group MSA or this computer does not support all the Kerberos encryption types required for the gMSA.
Bạn không thể dùng RunAs tiêu chuẩn để xác minh dịch vụ và script của bạn có thể chạy dưới tài khoản dịch vụ MSA. Dùng công cụ PsExec thay thế (chúng tôi đã chỉ cách dùng psexec để chạy command prompt thay mặt NT Authority\System).
- Mở command prompt với quyền administrator;
- Chạy lệnh:
PsExec64.exe -i -u woshub\gmsaMunSQL1$ -p ~ cmd.exeThay mật khẩu bằng ~. Nghĩa là mật khẩu phải được lấy từ AD. - Trong cửa sổ cmd mở ra, chạy lệnh
whoamiđể đảm bảo console chạy dưới tài khoản gMSA; - Xác minh script, chương trình, hoặc dịch vụ chạy đúng dưới Managed Service Account.
Bây giờ chỉ còn cấu hình dịch vụ Windows cần thiết, tác vụ task scheduler, IIS pool, v.v., để chạy dưới user MSA/gMSA.
Cách chạy Windows Service dưới Managed Service Account?
Bây giờ bạn có thể cấu hình dịch vụ Windows cần thiết chạy dưới tài khoản MSA/gMSA.
- Mở bảng điều khiển quản lý dịch vụ (
services.msc); - Mở thuộc tính dịch vụ cần thiết và đi đến tab "Log On";
- Chọn tùy chọn This account và nhập tên tài khoản MSA. Đảm bảo thêm ký hiệu $ ở cuối tên tài khoản (bạn không cần nhập mật khẩu tài khoản);
- Tài khoản dịch vụ MSA sẽ tự động được cấp quyền Log On As a Service;
- Sau khi lưu thay đổi, dịch vụ phải được khởi động lại.
Để chạy dịch vụ phức tạp với gMSA, kiểm tra tài liệu xem có hỗ trợ không. Hiện gMSA được hỗ trợ trong SQL Server, IIS, AD LDS, Exchange Server.
Chạy Scheduled Task với Managed Service Account/gMSA
Bạn có thể cấu hình Windows Task Scheduler chạy job dưới tài khoản dịch vụ gMSA. Điều này tiện lợi vì mật khẩu cho tài khoản gMSA không lưu trong script, bạn không cần mã hóa hoặc bảo vệ chúng. Khi mật khẩu thay đổi, bạn không phải cấu hình lại tác vụ.
Để cấp quyền cho tài khoản MSA/gMSA, chỉ cần thêm nó vào nhóm bảo mật cần thiết. Ví dụ, vào nhóm Administrators cục bộ, Domain Admins, DNS Admins, v.v.
Bạn có thể cấu hình tác vụ chạy dưới tài khoản gMSA dùng PowerShell. Ví dụ, script sau sẽ tạo tác vụ được lên lịch mới chạy script PowerShell mỗi ngày lúc 11:00 pm để backup database:
$action = New-ScheduledTaskAction -Execute powershell.exe -Argument "-file C:\PS\Scripts\DBBackup.ps1 -executionpolicy bypass -NoProfile"
$trigger = New-ScheduledTaskTrigger -At 23:00 -Daily
$principal = New-ScheduledTaskPrincipal -UserID woshub\gmsaMunSQL1$ -LogonType Password
Register-ScheduledTask DBBackup –Action $action –Trigger $trigger –Principal $principal
Mẹo. Để chạy tác vụ được lên lịch, bạn cần cấp cho tài khoản gMSA quyền "Log on as a batch job".
Tham số '-LogonType Password' chỉ định mật khẩu cho tài khoản gMSA này sẽ được lấy từ domain controller.
Tìm hiểu thêm về quản lý scheduled tasks với PowerShell.
Bạn cũng có thể tạo scheduled job với cài đặt mong muốn dùng taskschd.msc GUI. Sau đó bạn có thể cấu hình lại nó dùng công cụ schtasks.exe để chạy dưới managed service account:
schtasks /Change /TN BackupDB /RU "woshub\gmsaMunSQL1$" /RP ""