How to Set Up Active Directory Tiered Administration on Windows Server 2012 R2

The Microsoft Active Directory Tiered Administration model is a security architecture that separates administrative accounts and systems into three tiers to prevent credential theft attacks from escalating across the entire environment. Tier 0 contains the most critical assets — Domain Controllers, PKI servers, and AD FS — and is managed only by Tier 0 administrators. Tier 1 contains member servers and is managed by Tier 1 admins who have no rights in Tier 0. Tier 2 contains workstations, managed by Tier 2 admins with no server rights. This guide implements the tiered model on Windows Server 2012 R2 using Group Policy, authentication policies, and Active Directory design.

Prerequisites

– Windows Server 2012 R2 Active Directory domain
– Domain and Forest Functional Level at Windows Server 2012 R2 (for Authentication Policies)
– Administrative Tier 0 credentials during setup
– Understanding of existing administrative accounts and their current privileges
– PowerShell 4.0 with ActiveDirectory module

Step 1: Design the Tier OU Structure

Create a dedicated OU structure under which tier-specific objects are managed. This structure is the foundation of the entire model:

Import-Module ActiveDirectory
$domain = (Get-ADDomain).DistinguishedName

# Create the Admin hierarchy
$tierOUs = @(
    "OU=Admin,$domain",
    "OU=Tier0,OU=Admin,$domain",
    "OU=Tier1,OU=Admin,$domain",
    "OU=Tier2,OU=Admin,$domain",
    "OU=Accounts,OU=Tier0,OU=Admin,$domain",
    "OU=Groups,OU=Tier0,OU=Admin,$domain",
    "OU=Workstations,OU=Tier0,OU=Admin,$domain",
    "OU=Accounts,OU=Tier1,OU=Admin,$domain",
    "OU=Groups,OU=Tier1,OU=Admin,$domain",
    "OU=Servers,OU=Tier1,OU=Admin,$domain",
    "OU=Accounts,OU=Tier2,OU=Admin,$domain",
    "OU=Groups,OU=Tier2,OU=Admin,$domain",
    "OU=Workstations,OU=Tier2,OU=Admin,$domain"
)

foreach ($ou in $tierOUs) {
    $name   = ($ou -split ',')[0] -replace 'OU=',''
    $parent = $ou -replace "^OU=$name,",''
    try {
        New-ADOrganizationalUnit -Name $name -Path $parent `
            -ProtectedFromAccidentalDeletion $true
        Write-Host "Created: $ou" -ForegroundColor Green
    } catch {
        Write-Warning "Skipped (exists?): $ou"
    }
}

Step 2: Create Tiered Administrative Accounts

Each administrator gets three separate accounts — one per tier they operate in — with no account spanning tiers:

# Create Tier 0 admin account for an administrator
function New-TieredAdminAccount {
    param(
        [string]$AdminName,    # e.g., "John Smith"
        [string]$Username,     # e.g., "jsmith"
        [int]$Tier
    )

    $tierOU = "OU=Accounts,OU=Tier$Tier,OU=Admin,$((Get-ADDomain).DistinguishedName)"
    $tierPrefix = "T${Tier}_"
    $samAccount = "$tierPrefix$Username"
    $upn = "$samAccount@$((Get-ADDomain).DNSRoot)"
    $pwd = ConvertTo-SecureString "$(New-Guid)Aa1!" -AsPlainText -Force

    New-ADUser -Name "$AdminName (Tier $Tier)" `
        -GivenName $AdminName.Split()[0] `
        -Surname  $AdminName.Split()[1] `
        -SamAccountName $samAccount `
        -UserPrincipalName $upn `
        -AccountPassword $pwd `
        -ChangePasswordAtLogon $true `
        -Enabled $true `
        -Path $tierOU `
        -Description "Tier $Tier administrative account for $AdminName"

    Write-Host "Created Tier $Tier account: $samAccount" -ForegroundColor Green
    return $samAccount
}

# Create accounts for sysadmin "jsmith"
New-TieredAdminAccount -AdminName "John Smith" -Username "jsmith" -Tier 0  # Domain admin work
New-TieredAdminAccount -AdminName "John Smith" -Username "jsmith" -Tier 1  # Server admin work
New-TieredAdminAccount -AdminName "John Smith" -Username "jsmith" -Tier 2  # Workstation support

# Create matching groups
New-ADGroup -Name "Tier0-Admins" -GroupScope Global -GroupCategory Security `
    -Path "OU=Groups,OU=Tier0,OU=Admin,$((Get-ADDomain).DistinguishedName)"
New-ADGroup -Name "Tier1-ServerAdmins" -GroupScope Global -GroupCategory Security `
    -Path "OU=Groups,OU=Tier1,OU=Admin,$((Get-ADDomain).DistinguishedName)"
New-ADGroup -Name "Tier2-DesktopSupport" -GroupScope Global -GroupCategory Security `
    -Path "OU=Groups,OU=Tier2,OU=Admin,$((Get-ADDomain).DistinguishedName)"

# Add accounts to appropriate groups
Add-ADGroupMember -Identity "Tier0-Admins"        -Members "T0_jsmith"
Add-ADGroupMember -Identity "Tier1-ServerAdmins"  -Members "T1_jsmith"
Add-ADGroupMember -Identity "Tier2-DesktopSupport"-Members "T2_jsmith"

Step 3: Configure Group Policy to Enforce Tier Restrictions

Use the Deny log on locally and Deny access to this computer from network policies to prevent cross-tier credential use. This is the technical enforcement mechanism:

# The following GPO settings must be configured through Group Policy Management Console
# or via GPO templates. Here are the required policy settings:

# GPO: "Tier 0 - Admin Workstation Restrictions"
# Applied to: OU=Workstations,OU=Tier0,OU=Admin
# Settings:
#   Computer Configuration > Windows Settings > Security Settings > Local Policies > User Rights Assignment
#   - "Deny log on locally":              Add Tier1-ServerAdmins, Tier2-DesktopSupport
#   - "Deny log on through Remote Desktop": Add Tier1-ServerAdmins, Tier2-DesktopSupport
#   - "Allow log on locally":             Add Tier0-Admins only
#   - "Allow log on through Remote Desktop": Add Tier0-Admins only

# GPO: "Tier 1 - Server Restrictions"
# Applied to: OU=Servers,OU=Tier1,OU=Admin AND all server OUs
# Settings:
#   - "Deny log on locally":              Add Tier0-Admins, Tier2-DesktopSupport
#   - "Allow log on through RDS":         Add Tier1-ServerAdmins only

# GPO: "Tier 2 - Workstation Restrictions"
# Applied to: Workstation OUs
# Settings:
#   - "Deny log on locally":              Add Tier0-Admins, Tier1-ServerAdmins
#   - "Allow log on locally":             Add Tier2-DesktopSupport only

# Use PowerShell to create and link GPOs
Import-Module GroupPolicy

$tier0GPO = New-GPO -Name "Tier0-Admin Workstation Restrictions" -Domain "corp.local"
New-GPLink -Name "Tier0-Admin Workstation Restrictions" `
    -Target "OU=Workstations,OU=Tier0,OU=Admin,DC=corp,DC=local" `
    -LinkEnabled Yes

Write-Host "GPO created and linked. Configure User Rights Assignment in GPMC." -ForegroundColor Yellow

Step 4: Configure Authentication Policy Silos (Windows Server 2012 R2)

Windows Server 2012 R2 at DFL 2012 R2 introduces Authentication Policy Silos, which restrict where privileged accounts can authenticate using Kerberos armoring:

Import-Module ActiveDirectory

# Create an Authentication Policy for Tier 0
# This restricts T0 accounts to only authenticate FROM Tier 0 devices
New-ADAuthenticationPolicy -Name "Tier0-RestrictedAuthentication" `
    -Description "Restricts Tier0 accounts to Tier0 devices only" `
    -UserAllowedToAuthenticateFrom @"
        O:SYG:SYD:(XA;OICI;CR;;;WD;(@USER.ad://ext/AuthenticationSilo == "Tier0Silo"))
    "@ `
    -Enforce $true

# Create an Authentication Policy Silo
New-ADAuthenticationPolicySilo -Name "Tier0Silo" `
    -Description "Tier 0 privileged access silo" `
    -UserAuthenticationPolicy "Tier0-RestrictedAuthentication" `
    -ComputerAuthenticationPolicy "Tier0-RestrictedAuthentication" `
    -Enforce $true

# Assign Tier 0 admin accounts to the silo
$tier0Accounts = Get-ADUser -SearchBase "OU=Accounts,OU=Tier0,OU=Admin,DC=corp,DC=local" -Filter *
foreach ($account in $tier0Accounts) {
    Grant-ADAuthenticationPolicySiloAccess -Identity "Tier0Silo" -Account $account
    Set-ADUser -Identity $account -AuthenticationPolicySilo "Tier0Silo"
    Write-Host "Assigned $($account.SamAccountName) to Tier0Silo"
}

# Assign Tier 0 computers (PAWs) to the silo
$tier0Computers = Get-ADComputer -SearchBase "OU=Workstations,OU=Tier0,OU=Admin,DC=corp,DC=local" -Filter *
foreach ($computer in $tier0Computers) {
    Grant-ADAuthenticationPolicySiloAccess -Identity "Tier0Silo" -Account $computer
    Set-ADComputer -Identity $computer -AuthenticationPolicySilo "Tier0Silo"
}

Step 5: Privileged Access Workstations (PAWs)

Tier 0 administration should only be performed from dedicated Privileged Access Workstations — hardened systems that have no internet access and are used only for administrative tasks:

# Create a PAW baseline GPO
$pawGPO = New-GPO -Name "PAW-SecurityBaseline"

# Key PAW security settings to configure via GPMC:
# 1. No internet access (firewall rules blocking outbound HTTP/HTTPS to non-Microsoft sites)
# 2. AppLocker: allow only signed, authorized applications
# 3. Credential Guard: enabled (requires UEFI, Secure Boot)
# 4. Windows Defender: enabled, cloud protection on
# 5. No email client, no Office suite
# 6. AutoRun disabled
# 7. USB storage disabled (except authorized devices)
# 8. BitLocker enabled on OS drive
# 9. Local admin account disabled
# 10. WinRM restricted to management subnet only

# Apply to Tier 0 PAW OU
New-GPLink -Name "PAW-SecurityBaseline" `
    -Target "OU=Workstations,OU=Tier0,OU=Admin,DC=corp,DC=local" -LinkEnabled Yes

# Configure AppLocker via PowerShell
$pawGPO | Set-GPRegistryValue -Key "HKLMSOFTWAREPoliciesMicrosoftWindowsSrpV2" `
    -ValueName "EnforcementMode" -Type DWord -Value 1  # Enforce mode

Step 6: Monitoring and Alerting for Tier Violations

# Enable Advanced Audit Policy for logon events on all tier systems
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Special Logon" /success:enable
auditpol /set /subcategory:"Account Logon" /success:enable /failure:enable

# Create a PowerShell script to detect cross-tier logon violations
# Monitor Security Event ID 4624 (successful logon) for T0 accounts on non-T0 systems
$tier0AccountSAMs = Get-ADUser -SearchBase "OU=Accounts,OU=Tier0,OU=Admin,DC=corp,DC=local" `
    -Filter * | Select-Object -ExpandProperty SamAccountName

# This would be run against collected Windows Security events (e.g., via SIEM)
Get-WinEvent -ComputerName "dc01" -FilterHashtable @{
    LogName   = 'Security'
    Id        = 4624
    StartTime = (Get-Date).AddHours(-1)
} | Where-Object {
    $_.Properties[5].Value -in $tier0AccountSAMs -and
    $_.Properties[11].Value -notlike "*T0_PAW*"
} | ForEach-Object {
    Write-Warning "TIER VIOLATION: T0 account $($_.Properties[5].Value) logged on to $($_.MachineName)"
}

Verification

# Verify tier structure
Write-Host "=== Tiered Administration Verification ===" -ForegroundColor Cyan

# Count accounts per tier
foreach ($tier in 0,1,2) {
    $count = (Get-ADUser -SearchBase "OU=Accounts,OU=Tier$tier,OU=Admin,DC=corp,DC=local" -Filter *).Count
    Write-Host "Tier $tier accounts: $count"
}

# Verify authentication policy silos
Get-ADAuthenticationPolicySilo | Format-Table Name, Enforce

# Verify no Tier 0 account is a member of lower-tier groups
$t0Accounts = Get-ADUser -SearchBase "OU=Accounts,OU=Tier0,OU=Admin,DC=corp,DC=local" -Filter *
$t1Group    = Get-ADGroup "Tier1-ServerAdmins"
$crossTier  = $t0Accounts | Where-Object {
    (Get-ADGroupMember $t1Group -Recursive).SamAccountName -contains $_.SamAccountName
}
if ($crossTier) {
    Write-Warning "Cross-tier membership detected: $($crossTier.SamAccountName)"
} else {
    Write-Host "No cross-tier membership violations detected" -ForegroundColor Green
}

Summary

Active Directory Tiered Administration on Windows Server 2012 R2 fundamentally changes the attack surface for credential theft. By segregating accounts into Tier 0 (AD/DC), Tier 1 (servers), and Tier 2 (workstations), configuring deny-logon GPOs across tier boundaries, implementing Authentication Policy Silos, deploying hardened PAWs for Tier 0 work, and monitoring for tier violations, you build an architecture where compromising a Tier 2 workstation cannot yield credentials that work against a Domain Controller. This model, combined with regular reviews and least-privilege group membership, is the most effective defense against lateral movement and privilege escalation in Active Directory environments.