Jak mogę wstępnie podpisać certyfikaty lalek?

26

Puppet wymaga certyfikatów między zarządzanym klientem (puppet) a serwerem (puppetmaster). Możesz uruchomić ręcznie na kliencie, a następnie przejść na serwer, aby podpisać certyfikat, ale jak zautomatyzować ten proces dla klastrów / maszyn w chmurze?

Straż Przednia
źródło
1
Jednym z problemów z przypadkowymi przypadkami jest ponowne użycie nazwy hosta. Automatyczne podpisywanie nie rozwiąże tego. Mam ten sam problem.
Joel K

Odpowiedzi:

28

Na serwerze (puppetmaster) uruchom:

puppetca --generate <NAME>

Następnie skopiuj następujące dane z serwera na klienta:

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

Jeśli chcesz się zalogować <NAME>jako coś innego niż nazwa hosta, użyj:

puppetd --fqdn=<NAME>

I dodaj do /etc/puppet/puppet.conf, jeśli uruchamiasz demona

[puppetd]
certname=<NAME>
Straż Przednia
źródło
To bardzo przydatne, dzięki. Zastanawiałem się nad tym sam.
Jon Topper,
1
Nowa komenda jest puppet cert --generate <NAME>zobaczyć serverfault.com/a/457364/71452
c33s
6

Jeśli masz bazę danych hosta, możesz użyć funkcji automatycznego podpisywania. W swoim puppet.confpliku [puppetmasterd]dodaj:

autosign = /path/to/autosign.conf

Następnie użyj crontab, aby wygenerować ten plik. Plik autosign jest tylko listą hostów do autosignu, kiedy po raz pierwszy łączą się z puppetmaster. Używam LDAP do konfigurowania moich hostów lalek, więc mój cron wygląda następująco:

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

Jestem pewien, że osoby korzystające z iClassify mogłyby napisać zapytanie, aby zrobić to samo.

Oczywiście musisz mieć zaufanie do sieci. Używam tego na EC2. Mój serwer puppetmaster należy do grupy, która zezwala tylko na połączenia z innych zaufanych grup. Nie poleciłbym tego robić, jeśli twój puppetmaster jest otwarty na Internet.

Gary Richardson
źródło
6

Prosta odpowiedź: automatycznie podpisuj nowe wnioski. Jest to oczywiście niebezpieczne, ponieważ ślepo ufasz każdemu systemowi, który łączy się z twoim puppetmasterem, co jest celem wymagającym ręcznego podpisywania.

[puppetmasterd]
autosign = true

Możesz także określić fałsz i plik, który ma być używany do określania, które klucze należy podpisać.

Zobacz informacje o konfiguracji na wiki Puppet.

Inną opcją jest użycie narzędzia takiego jak Capistrano , w którym określasz węzeł puppetmaster i tworzysz węzły instancji klienta, aw zadaniu:

  • Utwórz węzeł instancji, powiedzmy za pomocą interfejsu API EC2 z Ruby.
  • Uruchom puppetd na instancji, łącząc się z serwerem.
  • Uruchom puppetca --sign dla żądania instancji (ponieważ znamy nazwę instancji podaną w bicie tworzenia powyżej).
  • Uruchom puppetd ponownie w instancji, tym razem pomyślnie nawiązując połączenie po podpisaniu certyfikatu.
jtimberman
źródło
Uwaga: jeśli używasz Puppet 2.6 lub nowszej, [puppetmasterd]nagłówek sekcji powinien być teraz [master]. Więcej informacji można znaleźć na docs.puppetlabs.com/guides/tools.html .
MrLore,
4

Na serwerze (puppetmaster) uruchom:

puppetca --generate <NAME>

Następnie skopiuj następujące dane z serwera na klienta:

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

Jeśli chcesz mieć coś innego niż nazwę hosta, użyj:

puppetd --fqdn=<NAME>

I dodaj do /etc/puppet/puppet.conf, jeśli uruchamiasz demona

[puppetd]
certname=<NAME>
Straż Przednia
źródło
Wydaje mi się to bardziej skomplikowane. Instalujesz marionetkę na kliencie, generuje certyfikat i wysyła go do mastera w celu podpisania. Gdy podpiszesz go na wzorcu, klient zacznie działać przy następnym uruchomieniu. Wymaga to mniej kroków. Jeśli naprawdę chcesz zapisać nawet ten krok, możesz uruchomić zadanie cron, które działa w następujący sposób: dla hosta w $ (puppetca --list); do puppetca --sign $ host; gotowe
David Pashley,
1
Jest to w porządku, jeśli masz jedną lub dwie maszyny, ale kiedy uruchamiasz i zatrzymujesz maszyny w chmurze, nie chcesz tego robić ręcznie, mogę uruchomić maszynę podstawową, uruchomić skrypt, który się uruchamia i ustawia wszystko poprzez marionetkę bez konieczności logowania się do mistrza marionetek.
Ranguard