Powershell DSC Push Configuration Part 2 : Add host to domain and Secure password in MOF-file

In de vorige blog heb ik laten zien hoe je een simpele DSC push configuratie kunt runnen op je lokale computer.

In deze blog gaan we een stap verder en gaan we de host lid maken van een active directory domein en hiervoor hebben we natuurlijk credentials nodig. DSC slaat het wachtwoord default op in je MOF file als leesbare tekst. Hier heb al iets over geschreven in mijn vorige blog. Hoe we dit kunnen voorkomen laat ik zien in deze blog door gebruik te maken van een certificaat.

Goed, maar eerst gaan we de server lid maken van het domein en laat ik zien dat het wachtwoord echt leesbaar in de MOF file staat.

We gaan verder met het het script uit de vorige blog.

Het eerste dat we nu gaan aanpassen is de voorbereiding om de MOF file überhaupt te kunnen maken. Voor het toevoegen van de host aan het domein gaan we namelijk gebruik maken van 2 nieuwe resources.
Deze kunnen we downloaden uit de PSGallery maar hiervoor moeten we eerst de package provider NuGet Installeren.
Daarna kunnen we de resource xComputermanagement (voor de domain join) en xNetworking (voor het instellen van je fixed ipadres) installeren. Ik heb dit samengevoegd in onderstaande functie. Als je geen internet verbinding hebt dan kun je de resources/modules downloaden op een host die wel verbonden is en kun je de deze vervolgens kopiëren van en naar C:\Program Files\WindowsPowerShell\Modules.


Let op : Mocht je de foutmelding zoals hieronder krijgen dan heb je powershell niet als administrator geopend!


Heb je powershell wel als administrator geopend dan krijg je het volgende :


De server is nu voorbereid. We hebben de juiste modules, kunnen eventueel ook ander modules/resources downloaden en we hebben de folders die lokaal nodig zijn om de MOF file in op te slaan.

De DSC configuratie
In de DSC configuratie uit het vorige blog maakte we alleen een folder en een subfolder. In de DSC configuratie hieronder heb ik deze aangepast.
In eerste instantie importeren d.m.v. import-DscResource de benodigde resources (Deze moeten daarom dus aanwezig zijn op je computer).
Vervolgens passen we de ip-settings aan, voegen we aan de host file de domeinnamen toe zodat deze vindbaar zijn tijdens de domain join. (De Host-file kun je vinden in c:\windows\system32\drivers\etc).
De domain join voeren we uit en tot slot zetten we als extra de pagefile op automanaged en zorgen we ervoor dat de WUAUSRV service is gestart. Niet alles is nodig voor de domain join natuurlijk , maar dan heb je een voorbeeld wat je nog meer kunt toevoegen .

In de DSC configuratie hierboven zie je trouwens overal $node staan. Dit is een variabelen array die we tijdens het maken van de MOF file meesturen. Deze waardes slaan we op in $Configdata . Bv bij $node.domainname zal dan de waarde “d2cit.it” worden ingevuld.
De $configdata zie je hieronder. Hierin beschrijf je je variabelen.

Deze worden als variabelen $domainCredential geladen tijdens het runnen van het script.Op het toevoegen van de domain credentials na hebben we alles nu klaar en kunnen we de MOF file gaan maken . Deze worden als variabelen $domainCredential geladen tijdens het runnen van het script.
Ik heb deze niet aan de $Configdata toegevoegd maar omdat ze in de juiste scope staan werkt het op deze manier ook. We creëren de MOF file en starten de configuratie.

Als we nu de MOF file gaan openen dan zul je zien dat het wachtwoord erin staat. OEPS!!!!!! Dit is niet echt secure voor een productie omgeving natuurlijk.

Hoe kunnen we dit oplossen?
Door gebruik te maken van bv een certificaat (Ik gebruik een SelfSignedCertificate)  kunnen we dit wachtwoord hashen. Om dit in te bouwen in ons huidige script gaan we de  volgende stappen uitvoeren.

  1. aanmaken extra folder in c:\dsc om het certificaat in op te slaan. (C:\dsc\cert)
  2. aanmaken SelfSignedCertificate  ( als deze nog niet bestaat )
  3. aanpassen Local Configuration Manager (LCM). Dit doen we d.m.v. een DSC configuratie waarbij we de LCM vertellen wat het certificaat id is.

Als dit is gedaan moeten we alleen de MOF file van configurehost vertellen welk certificaat hij moet gebruiken.
Dit doen we met wat aanpassingen aan de $configdata. We geven daarin wat extra variabelen mee. Zie hieronder.

Als we nu de MOF file opnieuw aanmaken dan zult je zien dat  het wachtwoord als een hash in MOF file staat. We kunnen de configuratie nu veilig gebruiken en de host aan het domein toevoegen


 Download het script :
or check on github :     and secure push :