Come posso pre-firmare i certificati fantoccio?


26

Puppet richiede certificati tra il client (puppet) gestito e il server (puppetmaster). È possibile eseguire manualmente sul client e quindi accedere al server per firmare il certificato, ma come si automatizza questo processo per cluster / macchine cloud?


1
Un problema angolare è il riutilizzo di un nome host. La firma automatica non lo risolverà. Sto riscontrando lo stesso problema.
Joel K,

Risposte:


28

Sul server (burattinaio) eseguire:

puppetca --generate <NAME>

Quindi copia quanto segue dal server sul client:

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

Se desideri firmare <NAME>come qualcosa di diverso dal nome host, usa:

puppetd --fqdn=<NAME>

E aggiungi a /etc/puppet/puppet.conf se esegui il demone

[puppetd]
certname=<NAME>

È davvero utile, grazie. Lo stavo sconcertando da solo.
Jon Topper,

1
il nuovo comando è puppet cert --generate <NAME>vedere serverfault.com/a/457364/71452
c33s

6

Se si dispone di un database host, è possibile utilizzare la funzione di firma automatica. Nel tuo puppet.conffile, in [puppetmasterd], aggiungi:

autosign = /path/to/autosign.conf

Quindi utilizzare un crontab per generare questo file. Il file di firma automatica è solo un elenco di host da firmare automaticamente quando si connettono per la prima volta al burattinaio. Uso LDAP per configurare i miei host delle marionette, quindi il mio cron sembra:

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

Sono sicuro che le persone che usano iClassify sarebbero in grado di scrivere una query per fare lo stesso.

Certo, devi avere un po 'di fiducia nella rete. Lo uso su EC2. Il mio server puppetmaster fa parte di un gruppo che consente solo connessioni da altri gruppi fidati. Non consiglierei di farlo se il tuo burattinaio è aperto su Internet.


6

Risposta semplice: firma automaticamente nuove richieste. Questo ovviamente è pericoloso perché ti stai fidando ciecamente di qualsiasi sistema che si collega al tuo burattinaio, che è lo scopo per richiedere la firma manuale.

[puppetmasterd]
autosign = true

È possibile specificare false e un file da utilizzare per determinare anche quali chiavi firmare.

Vedi il riferimento alla configurazione sul wiki Puppet.

Un'altra opzione è quella di utilizzare uno strumento come Capistrano , in cui si specifica il nodo puppetmaster e si creano i nodi dell'istanza client e nell'attività:

  • Crea il nodo dell'istanza, ad esempio con l'API di EC2 con Ruby.
  • Esegui puppetd sull'istanza, connettendoti al server.
  • Esegui puppetca - firma per la richiesta dell'istanza (poiché conosciamo il nome dell'istanza così come è stato dato nel bit di creazione sopra).
  • Eseguire di nuovo puppetd sull'istanza, questa volta connettendosi correttamente quando il certificato viene firmato.

Nota: se stai usando Puppet 2.6 o successivo, l' [puppetmasterd]intestazione della sezione dovrebbe essere ora [master]. Consulta docs.puppetlabs.com/guides/tools.html per ulteriori informazioni.
MrLore,

4

Sul server (burattinaio) eseguire:

puppetca --generate <NAME>

Quindi copia quanto segue dal server sul client:

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

Se si desidera avere come qualcosa di diverso dal nome host utilizzare:

puppetd --fqdn=<NAME>

E aggiungi a /etc/puppet/puppet.conf se esegui il demone

[puppetd]
certname=<NAME>

Questo mi sembra più complicato. Installi il pupazzo sul client, genera un certificato e lo invia al master per la firma. Quando lo firmi sul master, il client inizierà a funzionare alla successiva esecuzione. Ciò comporta meno passaggi. Se vuoi davvero salvare anche questo passaggio, puoi eseguire un cron job che fa qualcosa del tipo: per host in $ (puppetca --list); do puppetca --sign $ host; fatto
David Pashley il

1
Questo va bene se hai una o due macchine, ma quando avvii e fermi macchine nel cloud non vuoi farlo manualmente, posso avviare una macchina di base, eseguire uno script che va e imposta tutto tramite burattino senza dover accedere al burattinaio.
Ranguard,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.