관리 서비스 계정(Managed Service Account, MSA)은 Windows 서비스, 애플리케이션, 예약 작업을 안전하게 실행하기 위해 설계된 특수한 유형의 Active Directory 계정입니다. 핵심 아이디어는 이러한 계정의 암호를 Active Directory가 완전히 관리한다는 점입니다. AD는 240자 길이의 복잡한 암호를 자동으로 생성하며, 기본적으로 30일마다 자동으로 변경합니다.
MSA 계정은 다음과 같은 보안상 이점을 제공합니다.
- 인증에 Kerberos만 사용하므로 NTLM 관련 보안 취약점이 없습니다.
- 대화형 로그온(interactive logon)이 허용되지 않습니다.
- 암호를 아무도 알 수 없으며 로컬 시스템에 저장되지 않아 mimikatz 같은 도구로 LSASS 프로세스에서 암호를 추출할 수 없습니다.
이 덕분에 서비스나 무인 작업을 실행하기 위해 AD에서 개별 서비스 사용자를 만들고 암호를 관리할 필요가 없어집니다.
MSA와 gMSA의 차이점
관리 서비스 계정(MSA)은 Windows Server 2008 R2에서 처음 도입되었으며(개체 유형 msDS-ManagedServiceAccount), 가장 큰 제약은 하나의 서버에서만 사용할 수 있다는 점입니다. 따라서 클러스터나 NLB 환경에서는 사용할 수 없습니다.
이러한 한계를 해결하기 위해 Windows Server 2012에서 그룹 관리 서비스 계정(Group Managed Service Account, gMSA)(유형 msDS-GroupManagedServiceAccount)이 도입되었습니다. gMSA는 여러 호스트에서 동시에 사용할 수 있습니다.
MSA/gMSA 사용 요구 사항
| 관리 서비스 계정(MSA) | 그룹 관리 서비스 계정(gMSA) | |
| AD 도메인 및 포리스트 기능 수준 | Windows Server 2008 R2 이상 | Windows Server 2012 이상 |
| KDC | Microsoft 키 배포 서비스(KdsSvc)가 활성화된 도메인 컨트롤러 | |
| PowerShell | AD 서비스 계정을 생성하고 관리하려면 Windows PowerShell용 Active Directory 모듈 필요 | |
| .NET Framework | 서버에 .NET Framework 3.5 이상 설치 | — |
| 지원되는 Windows 버전 | Windows 7 / Windows Server 2008 R2 이상 | Windows Server 2012 / Windows 8 이상 |
KDS(키 배포 서비스) 루트 키 생성
MSA/gMSA 계정을 만들기 전에 한 번만 수행하면 되는 작업으로 KDS 루트 키를 생성해야 합니다. 도메인 컨트롤러에서(Microsoft 키 배포 서비스가 설치되어 실행 중이어야 함) 다음 PowerShell 명령을 실행합니다.
Add-KdsRootKey –EffectiveImmediately
이 경우 키가 생성되고 AD 복제가 완료된 후 약 10시간 뒤에 사용 가능해집니다.
팁: 테스트 환경에서 즉시 키를 사용하려면 아래 명령을 실행하세요.Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))
KDS 루트 키가 성공적으로 생성되었는지 확인합니다.Get-KdsRootKey
다음 명령으로 KDS 키를 검증할 수 있습니다.
Test-KdsRootKey -KeyId (Get-KdsRootKey).KeyId
Active Directory에서 MSA 계정 생성 방법
AD에서 새로운 MSA 관리 계정을 만들려면 다음 명령을 사용합니다.
New-ADServiceAccount -Name msaMunSrv1 –RestrictToSingleComputer
기본적으로 MSA와 gMSA는 CN=Managed Service Accounts 컨테이너에 생성되지만, Path 매개변수로 OU를 변경할 수 있습니다.
MSA 서비스 계정을 대상 컴퓨터에 연결합니다.
$Identity = Get-ADComputer -identity mun-srv01
Add-ADComputerServiceAccount -Identity $identity -ServiceAccount msaMunSrv1
참고로 MSA 계정은 하나의 AD 호스트에서만 사용할 수 있습니다.
ADUC(Active Directory 사용자 및 컴퓨터) 콘솔을 열어 Managed Service Accounts 컨테이너(OU)에 msDS-ManagedServiceAccount 유형의 새 계정이 나타났는지 확인합니다.
이 AD 컨테이너는 기본적으로 숨겨져 있습니다. 보려면 스냅인의 보기(View) 메뉴에서 고급 기능(Advanced Features)을 활성화하세요.
다음 명령으로 MSA 계정 정보를 조회할 수 있습니다.
Get-ADServiceAccount msaMunSrv1
Active Directory에서 gMSA(그룹 관리 서비스 계정) 생성
gMSA 계정을 만들기 전에 먼저 도메인 보안 그룹을 생성하고, 이 그룹 서비스 계정의 암호를 사용할 수 있는 서버들을 그룹에 추가합니다. 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$
그런 다음 다음 명령으로 gMSA를 생성합니다.
New-ADServiceAccount -name gmsaMunSQL1 -DNSHostName gmsaMunSQL1.woshub.com -PrincipalsAllowedToRetrieveManagedPassword grMunSQL1 –verbose
gMSA 계정 역시 기본적으로 Managed Service Accounts OU에 생성됩니다.
Windows에 그룹 관리 서비스 계정 설치
대상 서버나 워크스테이션에서 MSA/gMSA 서비스 계정을 사용하려면 먼저 Active Directory PowerShell 모듈을 설치해야 합니다.
Add-WindowsFeature RSAT-AD-PowerShell
서버에 MSA(gMSA) 서비스 계정을 설치합니다.
Install-ADServiceAccount -Identity gmsaMunSQL1
서비스 계정이 올바르게 설치되었는지 확인합니다.
Test-ADServiceAccount gmsaMunSQL1
명령이 True를 반환하면 정상적으로 구성된 것입니다. 반대로 False가 반환되면 MSA 계정이 해당 서버에 설치되지 않았거나, 이 컴퓨터에 계정 사용 권한이 없을 가능성이 높습니다.
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.
표준 RunAs로는 서비스와 스크립트가 MSA 계정으로 실행될 수 있는지 확인할 수 없습니다. 대신 PsExec 도구를 사용하세요.
- 관리자 권한으로 명령 프롬프트를 엽니다.
- 다음 명령을 실행합니다:
PsExec64.exe -i -u woshub\gmsaMunSQL1$ -p ~ cmd.exe— 암호 자리에 ~를 입력하면 암호를 AD에서 가져오라는 의미가 됩니다. - 열린 cmd 창에서
whoami명령을 실행하여 콘솔이 gMSA 계정으로 실행 중인지 확인합니다. - 스크립트, 프로그램 또는 서비스가 관리 서비스 계정으로 정상 동작하는지 검증합니다.
이후에는 필요한 Windows 서비스, 작업 스케줄러 작업, IIS 애플리케이션 풀 등을 MSA/gMSA 사용자로 실행하도록 설정하면 됩니다.
관리 서비스 계정으로 Windows 서비스 실행 방법
이제 필요한 Windows 서비스를 MSA/gMSA 계정으로 실행하도록 구성할 수 있습니다.
- 서비스 관리 콘솔(
services.msc)을 엽니다. - 대상 서비스의 속성을 열고 로그온(Log On) 탭으로 이동합니다.
- 이 계정(This account) 옵션을 선택하고 MSA 계정 이름을 입력합니다. 계정 이름 끝에 반드시 $ 기호를 붙여야 하며, 암호는 입력하지 않아도 됩니다.
- MSA 서비스 계정에는 서비스로 로그온(Log On As a Service) 권한이 자동으로 부여됩니다.
- 변경 사항을 저장한 후 서비스를 다시 시작합니다.
gMSA로 복잡한 서비스를 실행하려면 해당 소프트웨어가 gMSA를 지원하는지 문서를 확인하세요. 현재 SQL Server, IIS, AD LDS, Exchange Server 등이 gMSA를 지원합니다.
관리 서비스 계정/gMSA로 예약 작업 실행
Windows 작업 스케줄러를 구성하여 gMSA 서비스 계정으로 작업을 실행할 수 있습니다. gMSA 계정의 암호는 스크립트에 저장되지 않으므로 암호를 암호화하거나 보호할 필요가 없고, 암호가 변경되어도 작업을 다시 구성할 필요가 없다는 점이 매우 편리합니다.
MSA/gMSA 계정에 권한을 부여하려면 적절한 보안 그룹에 추가하기만 하면 됩니다. 예를 들어 로컬 Administrators 그룹, Domain Admins, DNS Admins 등에 추가할 수 있습니다.
PowerShell로 gMSA 계정으로 실행되는 작업을 구성할 수 있습니다. 다음 스크립트는 매일 밤 11시에 데이터베이스를 백업하는 PowerShell 스크립트를 실행하는 새 예약 작업을 생성합니다.
$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
팁: 예약 작업을 실행하려면 gMSA 계정에 일괄 작업으로 로그온(Log on as a batch job) 권한을 부여해야 합니다.
-LogonType Password 인수는 이 gMSA 계정의 암호를 도메인 컨트롤러에서 가져오도록 지정합니다.
또한 taskschd.msc GUI로 원하는 설정의 예약 작업을 만든 후, schtasks.exe 도구로 재구성하여 관리 서비스 계정으로 실행되게 할 수도 있습니다.
schtasks /Change /TN BackupDB /RU "woshub\gmsaMunSQL1$" /RP ""