Die Grundidee
- Auf dem zu konfigurierenden Host muss ein Zertifikat installiert sein (mit privatem Schlüssel).
- Wenn Sie den lokalen Konfigurationsmanager (LCM) des Zielknotens einrichten, müssen Sie den Fingerabdruck dieses Zertifikats angeben. Dies teilt dem LCM mit, welches lokale Zertifikat (oder genauer der private Schlüssel des Zertifikats) zum Entschlüsseln des Berechtigungsnachweises verwendet wird.
- Ihre DSC-Konfiguration muss auf eine Datei verweisen, die nur das Zertifikat (öffentlicher Schlüssel) desselben Zertifikats enthält. Dies erfolgt in den Konfigurationsdaten, sodass Sie für jeden Knoten ein anderes Zertifikat angeben können, wenn Sie für jeden Knoten dieselbe Konfiguration verwenden möchten.
- Wenn das MOF generiert wird, wird der öffentliche Schlüssel von dem Computer verwendet, der das MOF generiert, um den Berechtigungsnachweis zu verschlüsseln .
- Wenn das LCM auf dem Zielknoten die Konfiguration vom Pull-Server abruft (in MOF-Form), verwendet es den privaten Schlüssel des durch den Fingerabdruck identifizierten Zertifikats, um das Anmeldeinformationsobjekt zu entschlüsseln .
In einigen Details
Der öffentliche Schlüssel kann nicht zum Entschlüsseln verwendet werden, und Sie geben den privaten Schlüssel weder für die Konfigurationsgenerierung noch für Verteilungsmaschinen frei.
Es hört sich so an, als würden Sie den Workflow so betrachten, als ob für alle Anmeldeinformationen ein einziges Zertifikat verwendet wird. Sie könnten das tun, aber ich denke, die Idee ist, dass jeder Knoten sein eigenes Schlüsselpaar hat.
"Durchschnittliche Benutzer", die ich als nicht administrative Benutzer bezeichne, können den privaten Schlüssel eines Zertifikats nicht exportieren (es sei denn, Ihnen wurden die Berechtigungen erteilt), und da Sie diesen Schlüssel nicht verschieben, besteht nur eine geringe Chance es wird ausgesetzt. Wenn die Benutzer Administratoren sind, haben sie natürlich Zugriff.
Es ist viel wahrscheinlicher, dass das Speichern von Anmeldeinformationen für Klartext in einer Konfiguration verfügbar gemacht wird, unabhängig davon, ob es sich um die unverarbeitete Powershell-Konfiguration oder das generierte MOF handelt. Wenn es unverschlüsselt ist, müssen Sie Folgendes sichern:
- Der Dateisystem- / Netzwerkfreigabespeicherort, an dem die Konfiguration gespeichert ist
- Die fs / share, in der die generierten MOFs gespeichert sind
- Die fs / share, in der Sie die MOFs auf dem Pull-Server speichern
- Stellen Sie sicher, dass der Pull-Server über SSL ausgeführt wird (Sie sollten dies trotzdem tun).
- Stellen Sie sicher, dass auf dem Pull-Server eine Authentifizierung vorhanden ist. Andernfalls kann bei jeder anonymen Abfrage eine Konfiguration mit offengelegten Anmeldeinformationen abgerufen werden.
Ich denke, die sicheren Anmeldeinformationen in DSC sind ziemlich gut gemacht, aber es ist eine Tortur, sich zunächst damit einzurichten.
AD PKI erleichtert dies
Wenn Sie Enterprise PKI in Ihrer AD-Umgebung verwenden, besteht eine gute Chance, dass jeder Computer für die automatische Registrierung bei der Zertifizierungsstelle eingerichtet ist, sodass er bereits über ein maschinenspezifisches Zertifikat verfügt, das sich selbst erneuert. Es verfügt über die erforderlichen Einstellungen für diesen Zweck.
Wie ich das umsetze
Da das Tooling derzeit für DSC so einfach ist, erstellen Sie wahrscheinlich Ihren eigenen Workflow zum Generieren von Konfigurationen und Schreiben von Skripten, um die Unterstützung zu unterstützen.
In meinem Fall habe ich separate Skripte zum Generieren des LCM-Meta-MOF und zum Generieren der tatsächlichen Konfiguration des Knotens, sodass meine Schritte zum Sichern der Anmeldeinformationen auf beide aufgeteilt sind.
Im LCM-Generierungsskript frage ich die Zertifizierungsstelle nach der Domäne ab, um das Zertifikat zu finden, das dem Hostnamen des zu konfigurierenden Computers entspricht. Ich rufe das Zertifikat ab (die Zertifizierungsstelle verfügt nicht über den privaten Schlüssel, sondern nur über den öffentlichen) und speichere es zur späteren Verwendung in einem Pfad. Das Meta-MOF wird so konfiguriert, dass es den Fingerabdruck des Zertifikats verwendet.
Im Knotenkonfigurationsskript habe ich die Konfigurationsdaten so eingestellt, dass sie die Zertifizierungsdatei verwenden (wieder nur öffentlicher Schlüssel). Wenn das MOF generiert wird, werden die Anmeldeinformationen mit diesem Zertifikat verschlüsselt und können nur mit dem privaten Schlüssel auf dem bestimmten Knoten entschlüsselt werden.
Referenz
Ich habe oben auf meine eigenen Erfahrungen verwiesen, aber dieser Artikel war eine große Hilfe auf dem Weg:
https://devblogs.microsoft.com/powershell/want-to-secure-credentials-in-windows-powershell-desired-state- Aufbau
Ich musste einige der Löcher selbst ausfüllen. Eine Sache, die in den Beispielen zu beachten ist, ist, dass sie die Thumprint
in der Knotenkonfiguration bereitstellen . Dies ist für die Knotenkonfiguration nicht erforderlich. Sie generieren lediglich die Konfiguration und die LCM-Metakonfiguration gleichzeitig und verwenden die Konfigurationsdaten, um den Fingerabdruck für die Verwendung dort zu speichern.
Dieser letzte Absatz mag verwirrend sein, ist aber im Kontext des Artikels sinnvoller. Wenn Sie nicht beide Konfigurationen gleichzeitig generieren, erscheint ihr Beispiel seltsam. Ich habe es getestet; Thumbprint
ist in den Konfigurationsdaten zum Verschlüsseln von Anmeldeinformationen nicht erforderlich. CertificateFile
ist jedoch erforderlich und muss in den Konfigurationsdaten enthalten sein. Wenn Sie also zuvor keine Konfigurationsdaten verwendet haben, sind Sie dies jetzt.