세분화된 암호 정책(Fine-Grained Password Policies, FGPP)을 사용하면 특정 사용자나 그룹에 대해 여러 개의 암호 정책을 만들 수 있습니다. Windows Server 2008 버전의 Active Directory부터 여러 암호 정책을 사용할 수 있게 되었습니다. 이전 버전의 AD에서는 도메인당 하나의 암호 정책(기본 도메인 정책(Default Domain Policy) 사용)만 만들 수 있었습니다.
이 글에서는 Active Directory 도메인에서 여러 개의 암호 설정 개체(Password Setting Object, PSO)를 만들고 구성하는 방법을 소개합니다.
세분화된 암호 정책(FGPP)의 개념
세분화된 암호 정책을 사용하면 관리자가 AD 도메인 내에 여러 개의 사용자 지정 암호 설정 개체(PSO)를 만들 수 있습니다. PSO에서는 암호 요구 사항(길이, 복잡성, 기록)과 계정 잠금 옵션을 설정할 수 있습니다. PSO 정책은 특정 사용자나 그룹에 할당할 수 있지만, OU와 같은 Active Directory 컨테이너에는 할당할 수 없습니다. PSO가 사용자에게 할당되면 해당 사용자에게는 더 이상 기본 도메인 정책 GPO의 암호 정책 설정이 적용되지 않습니다.
예를 들어 FGPP 정책을 활용하면 관리자 계정, 서비스 계정, 또는 VPN이나 DirectAccess를 통해 외부에서 도메인 리소스에 접근하는 사용자 계정에 대해 암호 길이와 복잡성 요구 사항을 강화할 수 있습니다.
도메인에서 여러 FGPP 암호 정책을 사용하기 위한 기본 요구 사항은 다음과 같습니다:
- 도메인 기능 수준이 Windows Server 2008 이상이어야 합니다.
- 암호 정책은 사용자 또는 글로벌(Global) 보안 그룹(!)에만 할당할 수 있습니다.
- FGPP는 전체적으로 적용됩니다(GPO에 일부 암호 설정을 지정하고 나머지는 FGPP로 지정하는 방식은 불가능합니다).
Active Directory에서 암호 설정 정책(PSO)을 만드는 방법
Windows Server 2012 이상에서는 Active Directory 관리 센터(ADAC) 콘솔의 그래픽 인터페이스를 통해 세분화된 암호 정책을 만들고 편집할 수 있습니다.
이 버전의 AD에는 삭제된 AD 개체를 복원할 수 있는 Active Directory 휴지통과 gMSA(그룹 관리 서비스 계정) 같은 기능도 포함되어 있습니다.
이 예제에서는 Domain Admins 그룹에 별도의 암호 정책을 만들어 할당하는 방법을 보여 드리겠습니다.
Active Directory 관리 센터(dsac.msc)를 시작하고 트리 보기로 전환한 후 System 컨테이너를 확장합니다. Password Settings Container를 찾아 마우스 오른쪽 버튼으로 클릭하고 New -> Password Settings를 선택합니다.

암호 정책의 이름을 지정합니다(예제에서는 Password Policy for Domain Admins). 이후 암호 최소 길이와 복잡성, 암호 기록에 저장되는 암호 수, 잠금 설정, 암호 변경 주기 등의 설정을 구성합니다.
각 PSO 매개변수(msDS-PasswordSettings 클래스)는 별도의 AD 특성으로 설명됩니다:
- msDS-LockoutDuration
- msDS-LockoutObservationWindow
- msDS-LockoutThreshold
- msDS-MaximumPasswordAge
- msDS-MinimumPasswordAge
- msDS-MinimumPasswordLength
- msDS-PasswordComplexityEnabled
- msDS-PasswordHistoryLength
- msDS-PasswordReversibleEncryptionEnabled
- msDS-PasswordSettingsPrecedence
Precedence(우선 순위) 특성에 주목하세요. 이 특성은 현재 암호 정책의 우선 순위를 결정합니다. 하나의 개체에 여러 FGPP 정책이 할당된 경우, Precedence 값이 가장 낮은 정책이 적용됩니다.
참고:
- 사용자에게 동일한 Precedence 값을 가진 두 개의 정책이 할당된 경우, GUID가 더 낮은 정책이 적용됩니다.
- 사용자에게 여러 정책이 할당되어 있고, 하나는 AD 보안 그룹을 통해 활성화되었으며 다른 하나는 사용자 계정에 직접 할당된 경우, 계정에 직접 할당된 정책이 적용됩니다.
그런 다음 Direct Applies To 섹션에 그룹이나 사용자를 추가하여 정책을 적용합니다(예제에서는 Domain Admins). 개별 사용자보다는 그룹에 PSO 정책을 적용하는 것이 좋습니다. 정책을 저장합니다.

이제 이 암호 정책은 Domain Admins 그룹의 모든 구성원에게 적용됩니다.
Active Directory 사용자 및 컴퓨터 콘솔(dsa.msc)을 시작하고(고급 기능 옵션 활성화 필요) Domain Admins 그룹에 속한 사용자의 속성을 엽니다. 특성 편집기(Attribute Editor) 탭으로 이동하여 필터 필드에서 Constructed 옵션을 선택합니다.
msDS-ResultantPSO 사용자 특성을 찾습니다. 이 특성은 해당 사용자에게 적용된 암호 정책을 보여줍니다(CN=Password Policy for Domain Admin,CN=Password Settings Container,CN=System,DC=woshub,DC=com).

dsget 도구를 사용해서도 사용자의 현재 PSO 정책을 확인할 수 있습니다:
dsget user "CN=Max,OU=Admins,DC=woshub,DC=com" –effectivepso

PowerShell을 사용한 세분화된 암호 정책(PSO) 구성
PowerShell을 사용하여 PSO 암호 정책을 관리할 수 있습니다(컴퓨터에 Active Directory PowerShell 모듈이 설치되어 있어야 합니다).
New-ADFineGrainedPasswordPolicy cmdlet을 사용하면 새 PSO를 만들 수 있습니다:
New-ADFineGrainedPasswordPolicy -Name "Admin PSO Policy" -Precedence 10 -ComplexityEnabled $true -Description "Domain password policy for admins" -DisplayName "Admin PSO Policy" -LockoutDuration "0.20:00:00" -LockoutObservationWindow "0.00:30:00" -LockoutThreshold 6 -MaxPasswordAge "12.00:00:00" -MinPasswordAge "1.00:00:00" -MinPasswordLength 8 -PasswordHistoryCount 12 -ReversibleEncryptionEnabled $false
이제 다음 명령으로 사용자 그룹에 암호 정책을 할당할 수 있습니다:
Add-ADFineGrainedPasswordPolicySubject "Admin PSO Policy" -Subjects "Domain Admins"

PSO 정책 설정을 변경하려면:
Set-ADFineGrainedPasswordPolicy "Admin PSO Policy" -PasswordHistoryCount:"12"
도메인의 모든 FGPP 정책 목록을 조회하려면:
Get-ADFineGrainedPasswordPolicy -Filter *

Get-ADUserResultantPasswordPolicy 명령을 사용하면 특정 사용자에게 적용되는 최종 암호 정책을 확인할 수 있습니다.
Get-ADUserResultantPasswordPolicy -Identity jsmith

사용자에게 적용되는 PSO 이름은 Name 필드에 표시됩니다.
Get-ADGroup cmdlet을 사용하면 Active Directory 그룹에 할당된 PSO 정책 목록을 표시할 수 있습니다:
Get-ADGroup "Domain Admins" -properties * | Select-Object msDS-PSOApplied
기본 도메인 정책 GPO의 기본 암호 정책 설정을 확인하려면 다음 명령을 실행합니다:
Get-ADDefaultDomainPasswordPolicy
마지막으로 한 가지 유의할 점이 있습니다. 세분화된 암호 정책을 사용하더라도 사용자들은 여전히 P@ssw0rd, Pa$$w0rd 같은 취약한 암호를 사용할 수 있습니다. 따라서 도메인 내 사용자 암호 중 취약한 암호를 주기적으로 감사하는 것을 권장합니다.