¿Cómo puedo firmar previamente los certificados de títeres?

26

Puppet requiere certificados entre el cliente (puppet) que se administra y el servidor (puppetmaster). Puede ejecutar manualmente en el cliente y luego ir al servidor para firmar el certificado, pero ¿cómo automatiza este proceso para clústeres / máquinas en la nube?

Ranguard
fuente
1
Un problema de caso de esquina es cuando reutiliza un nombre de host. La firma automática no resolverá eso. Estoy teniendo este mismo problema.
Joel K

Respuestas:

28

En el servidor (puppetmaster) ejecute:

puppetca --generate <NAME>

Luego copie lo siguiente del servidor en el cliente:

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

Si desea firmar <NAME>como algo diferente al nombre de host, use:

puppetd --fqdn=<NAME>

Y agregue a /etc/puppet/puppet.conf si ejecuta el demonio

[puppetd]
certname=<NAME>
Ranguard
fuente
Eso es realmente útil, gracias. Había estado desconcertando sobre eso yo mismo.
Jon Topper
1
el nuevo comando es puppet cert --generate <NAME>ver serverfault.com/a/457364/71452
c33s el
6

Si tiene una base de datos de host, puede usar la función de firma automática. En su puppet.confarchivo, en el [puppetmasterd], agregue:

autosign = /path/to/autosign.conf

Luego use un crontab para generar este archivo. El archivo de firma automática es solo una lista de hosts para firmar automáticamente cuando se conectan por primera vez al puppetmaster. Uso LDAP para configurar mis hosts de marionetas, por lo que mi cron se ve así:

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

Estoy seguro de que las personas que usan iClassify podrían escribir una consulta para hacer lo mismo.

Por supuesto, debe confiar en la red. Yo uso esto en EC2. Mi servidor puppetmaster está en un grupo que solo permite conexiones de otros grupos de confianza. No recomendaría hacer esto si tu puppetmaster está abierto a internet.

Gary Richardson
fuente
6

Respuesta simple: firmar automáticamente nuevas solicitudes. Por supuesto, esto es peligroso porque confías ciegamente en cualquier sistema que se conecte a tu puppetmaster, que es el propósito de requerir la firma manual.

[puppetmasterd]
autosign = true

También puede especificar falso y un archivo para determinar qué claves firmar.

Vea la referencia de configuración en el wiki de Puppet.

Otra opción es usar una herramienta como Capistrano , donde especifica el nodo puppetmaster y crea los nodos de instancia del cliente, y en la tarea:

  • Cree el nodo de instancia, digamos con la API de EC2 con Ruby.
  • Ejecute puppetd en la instancia, conectándose al servidor.
  • Ejecute puppetca --sign para la solicitud de la instancia (ya que sabemos el nombre de la instancia tal como se proporcionó en el bit de creación anterior).
  • Vuelva a ejecutar puppetd en la instancia, esta vez conectándose correctamente cuando se firme el certificado.
jtimberman
fuente
Nota: Si está utilizando Puppet 2.6 o superior, el [puppetmasterd]encabezado de la sección ahora debería ser [master]. Consulte docs.puppetlabs.com/guides/tools.html para obtener más información.
MrLore
4

En el servidor (puppetmaster) ejecute:

puppetca --generate <NAME>

Luego copie lo siguiente del servidor en el cliente:

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

Si desea tener como algo diferente al nombre de host use:

puppetd --fqdn=<NAME>

Y agregue a /etc/puppet/puppet.conf si ejecuta el demonio

[puppetd]
certname=<NAME>
Ranguard
fuente
Esto me parece más complicado. Instala una marioneta en el cliente, genera un certificado y lo envía al maestro para su firma. Cuando lo firme en el maestro, el cliente comenzará a funcionar la próxima vez que se ejecute. Esto implica menos pasos. Si realmente desea guardar incluso este paso, puede ejecutar un trabajo cron que haga algo como: para host en $ (puppetca --list); do puppetca --sign $ host; hecho
David Pashley
1
Esto está bien si tiene una o dos máquinas, pero cuando está iniciando y deteniendo máquinas en la nube no desea tener que hacer esto manualmente, puedo iniciar una máquina base, ejecutar un script que entra y configura todo a través de la marioneta sin tener que iniciar sesión en el maestro de marionetas.
Ranguard 05 de