<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Tiering on Lukas Blog - Time for some coffee</title>
        <link>https://theadmincafe.ch/tags/tiering/</link>
        <description>Recent content in Tiering on Lukas Blog - Time for some coffee</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Thu, 06 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://theadmincafe.ch/tags/tiering/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>ADTierKit: Automatic AD-Tiering</title>
        <link>https://theadmincafe.ch/p/adtierkit-active-directory-tiering/</link>
        <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://theadmincafe.ch/p/adtierkit-active-directory-tiering/</guid>
        <description>&lt;img src="https://theadmincafe.ch/p/adtierkit-active-directory-tiering/cover.png" alt="Featured image of post ADTierKit: Automatic AD-Tiering" /&gt;&lt;p&gt;I&amp;rsquo;ve built AD tier models by hand more than once, and every time it&amp;rsquo;s the same grind. OUs, role groups, access groups, nesting them correctly, delegation, logon restriction GPOs, LAPS, silos. Hundreds of objects, all of them slightly tedious, all of them easy to get subtly wrong.&lt;/p&gt;
&lt;p&gt;I went looking for something to take that off my hands. There are decent projects out there, but nothing that felt simple enough to just pick up and run. Either it was huge, or it wanted a specific setup, or I&amp;rsquo;d have spent longer understanding it than doing the work myself.&lt;/p&gt;
&lt;p&gt;So I wrote my own. It&amp;rsquo;s called ADTierKit.&lt;/p&gt;
&lt;h2 id=&#34;what-it-is&#34;&gt;What it is
&lt;/h2&gt;&lt;p&gt;One PowerShell script and one JSON file. Copy both onto a DC, run the script, answer some questions.&lt;/p&gt;
&lt;p&gt;The wizard asks about your naming convention and resolves the patterns as you type, so you see real object names before you commit to anything:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://theadmincafe.ch/p/adtierkit-active-directory-tiering/wizard.png&#34;
	width=&#34;930&#34;
	height=&#34;975&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;The wizard asking for domain, tier count and naming patterns&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;95&#34;
		data-flex-basis=&#34;228px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Then it shows you the whole thing before it touches the directory. Every OU, every group with a note on what it&amp;rsquo;s for, the accounts, the GPOs.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://theadmincafe.ch/p/adtierkit-active-directory-tiering/wizard-preview.png&#34;
	width=&#34;1082&#34;
	height=&#34;1135&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Preview of every object before anything is written&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;95&#34;
		data-flex-basis=&#34;228px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Say yes and you get the scaffolding: the OU tree, role and access groups per tier nested AGDLP style, delegation so each tier admin manages their own branch, logon restriction GPOs, Windows LAPS with a separate decryption principal per tier, Kerberos authentication policy silos, SACL auditing, plus a few domain-wide bits like &lt;code&gt;ms-DS-MachineAccountQuota&lt;/code&gt; set to zero.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://theadmincafe.ch/p/adtierkit-active-directory-tiering/result-aduc.png&#34;
	width=&#34;688&#34;
	height=&#34;806&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;The resulting OU structure in Active Directory Users and Computers&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;85&#34;
		data-flex-basis=&#34;204px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;three-things-i-care-about&#34;&gt;Three things I care about
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;It plans first.&lt;/strong&gt; &lt;code&gt;-Mode Deploy&lt;/code&gt; shows you what it would do and changes nothing. You need &lt;code&gt;-Apply&lt;/code&gt; before a single object gets written. A mistyped command line can&amp;rsquo;t touch your directory.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s idempotent.&lt;/strong&gt; Run it again against a domain that&amp;rsquo;s already set up:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created: 0 | Updated: 0 | Already compliant: 205 | Failed: 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Every stage recognises its own work, so the report only ever shows you what actually changed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It keeps things current.&lt;/strong&gt; This is the part I actually wrote it for. Deployment is a one-off, membership isn&amp;rsquo;t. Move a server into a tier OU and it doesn&amp;rsquo;t join the authentication silo. Nothing in AD tells you. &lt;code&gt;-Mode Sync&lt;/code&gt; re-runs just the membership bits, and &lt;code&gt;-Mode InstallTask&lt;/code&gt; puts that on a daily schedule.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also &lt;code&gt;-Mode Audit&lt;/code&gt;, which is read-only and grades what it finds by severity, and spits out a self-contained HTML report you can email to someone.&lt;/p&gt;
&lt;h2 id=&#34;one-warning-worth-repeating&#34;&gt;One warning worth repeating
&lt;/h2&gt;&lt;p&gt;Logon rights are tattooed. Once a restriction has applied, unlinking the GPO does &lt;strong&gt;not&lt;/strong&gt; give the right back. The entry sits in the machine&amp;rsquo;s local security database and survives reboots. You fix it with &lt;code&gt;secedit&lt;/code&gt;, locally, which means you need to already be on the box.&lt;/p&gt;
&lt;p&gt;I found that out the way you&amp;rsquo;d expect, on a lab DC, late in the evening.&lt;/p&gt;
&lt;p&gt;So now the tool checks before it writes. If a deny group would take away logon rights from the account running the deployment, or from the built-in Administrator, on a machine you&amp;rsquo;d need in order to undo it, the GPO stage doesn&amp;rsquo;t run and it tells you exactly which policy and which group. There&amp;rsquo;s a second script for recovery too, in case someone gets there anyway.&lt;/p&gt;
&lt;h2 id=&#34;where-it-stands&#34;&gt;Where it stands
&lt;/h2&gt;&lt;p&gt;Lab-tested end to end against a Server 2025 domain, all modes, and the tier separation checked in both directions with real accounts. Not production-tested, no automated test suite, no second pair of eyes on the code yet. Treat it accordingly and take a snapshot first.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also not a hardening suite. No AppLocker, no BitLocker baselines. It builds the tier boundary and keeps it correct, and that&amp;rsquo;s the whole scope.&lt;/p&gt;
&lt;p&gt;The full documentation lives in the repo — every stage, the configuration reference, the rollout order I&amp;rsquo;d recommend, and what to do if it does lock you out:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Nobrac/ADTierKit&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;github.com/Nobrac/ADTierKit&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MIT licensed. If you use it, I&amp;rsquo;d like to hear how it went.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
