Frage Wie kann ich Puppenzertifikate vorschreiben?


Marionette benötigt Zertifikate zwischen dem verwalteten Client (Puppet) und dem Server (Puppetmaster). Sie können manuell auf dem Client ausführen und dann auf den Server gehen, um das Zertifikat zu signieren, aber wie automatisieren Sie diesen Prozess für Cluster / Cloud-Maschinen?


25
2017-10-02 16:32


Ursprung


Ein Problem mit der Ecke besteht darin, dass Sie einen Hostnamen erneut verwenden. Autosigning löst das nicht. Ich habe das gleiche Problem. - Joel K


Antworten:


Auf dem Server (Puppetmaster):

puppetca --generate <NAME>

Kopieren Sie dann Folgendes vom Server auf den Client:

/var/lib/puppet/ssl/certs/<NAME>.pem
/var/lib/puppet/ssl/certs/ca.pem
/var/lib/puppet/ssl/private_keys/<NAME>.pem

Wenn Sie unterschreiben möchten <NAME> als etwas anderes als den Hostnamen verwenden:

puppetd --fqdn=<NAME>

Und fügen Sie zu /etc/puppet/puppet.conf hinzu, wenn Sie den Daemon ausführen

[puppetd]
certname=<NAME>

28
2017-10-02 16:32



Das ist wirklich nützlich, danke. Ich hatte selbst darüber rätseln müssen. - Jon Topper
neuer Befehl ist puppet cert --generate <NAME> sehen serverfault.com/a/457364/71452 - c33s


Einfache Antwort: Neue Anfragen automatisch signieren. Dies ist natürlich gefährlich, da Sie blindlings jedem System vertrauen, das mit Ihrem Puppenspieler verbunden ist, was der Grund für das manuelle Signieren ist.

[puppetmasterd]
autosign = true

Sie können false und eine Datei angeben, um zu bestimmen, welche Schlüssel ebenfalls zu signieren sind.

Siehe die Konfigurationsreferenz auf dem Puppet Wiki.

Eine andere Möglichkeit ist ein Werkzeug wie Capistrano, wo Sie den Puppetmaster-Knoten angeben und die Clientinstanzknoten erstellen, und in der Task:

  • Erstellen Sie den Instanzknoten, sagen Sie mit EC2's API mit Ruby.
  • Führen Sie puppetd für die Instanz aus und stellen Sie eine Verbindung zum Server her.
  • Führen Sie puppetca --zeichen für die Anfrage der Instanz aus (da wir den Instanznamen kennen, wie er oben im Erstellungsbit angegeben wurde).
  • Führen Sie erneut puppetd auf der Instanz aus, wobei Sie dieses Mal erfolgreich eine Verbindung herstellen, da das Zertifikat signiert ist.

7
2018-06-04 07:09



Hinweis: Wenn Sie Puppet 2.6 oder höher verwenden, wird die [puppetmasterd] Abschnittsüberschrift sollte jetzt sein [master]. Sehen docs.puppetlabs.com/guides/tools.html für mehr Informationen. - MrLore


Wenn Sie eine Host-Datenbank haben, können Sie die Auto-Sign-Funktion verwenden. In deiner puppet.conf Datei, in der [puppetmasterd], hinzufügen:

autosign = /path/to/autosign.conf

Verwenden Sie dann eine Crontab, um diese Datei zu generieren. Die Autosign-Datei ist nur eine Liste der zu signierenden Hosts, wenn sie sich zum ersten Mal mit dem Puppetmaster verbinden. Ich benutze LDAP, um meine Puppet-Hosts zu konfigurieren, also sieht mein Cron so aus:

* * * * * root /usr/bin/ldapsearch -x '(objectClass=puppetClient)' cn | /bin/grep ^cn | /bin/sed 's!^cn: !!' > /etc/puppet/autosign.conf

Ich bin mir sicher, dass Leute, die iClassify verwenden, in der Lage sein werden, eine Abfrage zu schreiben, um dasselbe zu tun.

Natürlich müssen Sie dem Netzwerk vertrauen. Ich benutze das auf EC2. Mein Puppetmaster-Server gehört zu einer Gruppe, die nur Verbindungen von anderen vertrauenswürdigen Gruppen zulässt. Ich würde das nicht empfehlen, wenn dein Puppenspieler offen für das Internet ist.


6
2017-10-16 00:06





Auf dem Server (Puppetmaster):

puppetca --generate <NAME>

Kopieren Sie dann Folgendes vom Server auf den Client:

/var/lib/puppet/ssl/certs/<NAME>.pem
/var/lib/puppet/ssl/certs/ca.pem
/var/lib/puppet/ssl/private_keys/<NAME>.pem

Wenn du als etwas anderes als den Hostnamen haben willst benutze:

puppetd --fqdn=<NAME>

Und fügen Sie zu /etc/puppet/puppet.conf hinzu, wenn Sie den Daemon ausführen

[puppetd]
certname=<NAME>

4
2018-06-04 06:32



Das erscheint mir nur komplizierter. Sie installieren Puppet auf dem Client, es generiert ein Zertifikat und sendet es zum Signieren an den Master. Wenn Sie es auf dem Master signieren, wird der Client bei der nächsten Ausführung gestartet. Dies beinhaltet weniger Schritte. Wenn Sie diesen Schritt wirklich speichern möchten, können Sie einen Cron-Job ausführen, der so etwas wie folgt ausführt: for host in $ (puppetca --list); do puppetca --zeichen $ host; erledigt - David Pashley
Das ist in Ordnung, wenn Sie eine oder zwei Maschinen haben, aber wenn Sie Maschinen in der Cloud starten und stoppen, müssen Sie dies nicht manuell tun. Ich kann eine Basismaschine starten, ein Skript ausführen, das alles eingibt und einrichtet über Marionette, ohne sich beim Marionettenmeister anmelden zu müssen. - Ranguard