Dieser Blog beschreibt, wie man mittels eines Azure Automation Accounts lokale Computer konfigurieren kann. Die Informationen habe ich vorwiegend von dieser Seite,
https://docs.microsoft.com/en-us/azure/automation/automation-dsc-overview
Jedoch auf das Wesentliche für die Einbindung lokaler Server beschränkt.
Voraussetzungen
Man braucht ein Azure Automation Konto. Die Anleitung wie man so eines anlegt findet man hier.
Serverseitig müssen die lokalen Computer Windows Management Framework (WMF) 5.x haben (am Besten gleich 5.1 installieren), dieses findet man hier.
Auch der Computer auf dem man die Konfigs erzeugt (Managementcomputer) muss WMF 5.x installiert haben.
Der DSC Endpunkt
Jedes Azure Automation Konto hat automatisch einen DSC Endpoint. Im Azure Automation Menü sieht man den wie unten.
Die drei Menüpunkte stehen für:
DSC Nodes: Computer die diesem DSC-Konfigurationsserver zugeordnet sind
DSC Configurations: Konfigurationen, die zur Anwendung zur Verfügung stehen
DSC Node Configurations: Verknüpfungen Node/Configurations um die Konfiguration zu überwachen.
Der DSC Service ist von dem Moment an, wo der Azure Automation Account eingerichtet ist von außen erreichbar und hört bei Azure Services in Westeuropa auf:
https://we-agentservice-prod-1.azure-automation.net
Dies funktioniert aber nur dann, wenn man es mit einem Account und einem Registration Key verknüpft wird, aber dazu später mehr.
Eine Konfiguration erstellen
Als Übung wollen wir auf unseren Zielsystemen einen Registry Key eintragen und dort forcieren.
Wir legen also auf unserem Managementcomputer eine Datei mit dem Namen SecurePowerShellEnvironment.ps1 an.
Finales Ziel ist es, eine sichere PowerShell Umgebung zu konfigurieren, deshalb der Name, aber beginnen wir mal langsam mit einem einzelnen Registry Key.
Die Struktur der Datei sieht dann so aus:
1 2 3 4 5 6 7 8 9 10 11 12 |
Configuration DSCConfigurationName { Import-DSCResource -module PSDesiredStateConfiguration Node NodeConfigurationName { Ressource RessourceConfigName { ConfigWert = "Wert" } } } |
Die Zeile mit Import-Module wird benötigt, um das Modul zu laden welches die Resource „Registry“ enthält.
Der Dateiname unserer .ps1 Datei ist nur zufällig identisch mit dem DSCConfigurationName, ich dachte mir das ist dann einfacher zu verwalten.
Wir wollen also nun:
- eine DSC Configuration in Azure DSC anlegen mit dem Namen: SecurePowerShellEnvironment
- einen NodeNamen vergeben : ServerOSRole
- auf den TargetNodes einen Registry Wert forcieren: „HKEY_LOCAL_MACHINE\SOFTWARE\PowerShell Usergroup Austria“ mit dem
Wert „DSCTest“ Inhalt „Works“ vom Datentyp „String“
Die fertige Datei sieht somit folgendermaßen aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Configuration SecurePowerShellEnvironment { # Load necessary Module Import-DSCResource -module PSDesiredStateConfiguration # Dedicate to Servers and call them ServerOSRole Node ServerOSRole { #Set a Test-entry in the registry Registry PowerShellUserGroupEntry { Ensure = "Present" Key = "HKEY_LOCAL_MACHINE\SOFTWARE\PowerShell Usergroup Austria" ValueName = "DSCTest" ValueData = "Works" ValueType = "String" } } } |
Konfiguration in Azure DSC einspielen und aktivieren
Nach dem abspeichern der Datei SecurePowerShellEnvironment.ps1 kann man diese nun in Azure DSC einspielen. Dazu geht man im Azure-Portal auf:
und clickt auf
Danach erscheint das Auswahlfenster in dem man eine PS1 Datei hochladen kann.
Nach Auswahl unserer Datei OK klicken,
und die Configuration ist hochgeladen.
Nun fehlt noch ein Schritt, und zwar das kompilieren in eine MOF Datei, denn vorher ist die Configuration nicht verwendbar.
Wenn dies ausgeführt wurde, sollte ein erfolgreicher Compile-Job unter der Configuration erscheinen.
Nun haben wir den Azure-DSC-seitigen Teil der Vorbereitungen abgeschlossen. Der nächste Schritt ist es die lokalen Server zu konfigurieren.
Lokale Server mit dem Azure DSC Dienst verbinden
Der Local Configuraqtion Manager (LCM) aller lokalen Server (oder Server die in einer anderen Cloud als Azure oder AWS stehen) müssen konfiguriert werden, um den Azure DSC Host als Pull-Server zu akzeptieren. Für die anderen beiden Optionen hat Azure Menüoptionen die hier erklärt sind.
Für die Konfiguration des LCM gibt es das CMDLet Set-DSCLocalConfigurationManager mit dem Parameter -Path, welches auf eine MOF Datei zeigen muss, und genau die konfigurieren wir jetzt.
Wir nennen diese Konfiguration MetaConfig. Die Metaconfig wird grundsätzlich ähnlich wie eine DSC Config gebaut, aber mit ein paar Feinheiten:(Beispiel unten)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[DscLocalConfigurationManager()] #Damit man weiß es geht um den LCM Configuration DscMetaConfigs { Settings { RefreshFrequencyMins = "" RefreshMode = "" ConfigurationMode = "" AllowModuleOverwrite = "" RebootNodeIfNeeded = "" ActionAfterReboot = "" ConfigurationModeFrequencyMins = "" } ReportServerWeb AzureAutomationDSC { ServerUrl = "" RegistrationKey = "" } } |
Man sagt also dem LCM von wo er sich Daten holen soll und gibt noch ein paar Konfigurationsdaten mit. Wir wollen jetzt folgendes einstellen.
Einer unserer Server mit dem Namen „esflovian.thegalaxy.local“ soll die vorhin erstellte Configuration „SecurePowerShellEnvironment“ erhalten und DSC soll diese Configuration auch forcieren.
Dazu laden wir uns zuerst das Beispiel von der Docs Seite herunter.
Dann brauchen wir noch die DSC Pullserver RegistrieungsURL und einen Key. Beides findet man im Azure Portal im Automation Account unter „Keys“
Wir brauchen den Primary Key und die URL.
In der heruntergeladenen Meta-Config .ps1 Datei fügen wir diese Werte ganz unten bei den Parametern ein.
1 2 3 |
RegistrationUrl = 'https://we-agentservice-prod-1.azure-automation.net/accounts/000000000000000000'; RegistrationKey = '000000000000000ynmuV2iWc021+KLe0000000000000000000000000000000'; |
Gleich darunter fügen wir den Namen des Rechners ein den wir mit DSC steuern wollen (Falls es mehrere Rechner sein sollen, diese mit Beistrich trennen).
1 |
ComputerName = @('esflovian.thegalaxy.local'); |
Dieser Name wird dann auch der Name des MOF Files sein und muss beim Befehl Set-DSCLocalConfigurationManager verwendet werden.
Zuletzt wollen wir dass die Konfiguration forciert wird und ändern den Parameter ConfigurationMode auf AutoCorrect.
1 |
ConfigurationMode = 'ApplyAndAutoCorrect'; |
Jetzt das Script ausführen, am Ende steht der Befehl „DscMetaConfigs @Params“ welcher die MOF Datei
.\DSCMetaconfigs\esflovian.thegalaxy.local.meta.mof
anlegt.
Jetzt müssen wir nur noch dem LCM von Esflovian diese Konfiguration „verpassen“. Dazu eine PowerShell Session als Admin starten, der auch auf dem Zielsystem lokaler Admin ist und folgenden Befehl eingeben.
1 |
Set-DscLocalConfigurationManager -path C:\DSC\Metaconfig\DscMetaConfigs -ComputerName esflovian.thegalaxy.local |
Im Pfad muss der Ort eingegeben werden an dem die mof Datei liegt. Der Computername muss identisch mit dem Namen sein der in der Konfiguration angegeben ist.
Nach ein paar Minuten sollte im Azure Portal unter DSC Nodes der Computer und die NodeConfiguration erscheinen.
Konfiguration testen
Azure DSC hat ja den Vorteil die Aktualität der Configuration im Portal anzuzeigen (Status „Compliant“) . Jetzt schauen wir mal nach ob die Registry wirklich geändert wurde.
Aus unserer Admin Powershell session verbinden wir uns mit der Maschine und durchsuchen die Registry nach dem neuen Key
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Enter-PSSession -Computername Esflovian Get-Item HKLM:\SOFTWARE\po* Hive: HKEY_LOCAL_MACHINE\Software Name Property ---- -------- Policies PowerShell Usergroup Austria DSCTest : Works |
Wenn dieses Ergebnis gezeigt wird ist die erste Konfiguration gelungen!
Viel Spaß beim Nachbilden wünscht Roman