Foreman-Katello, administrador de ciclos de vida de servidores III

Buenos días | tardes | noches, en esta entrada os enseñaré a agregar y administrar módulos de Puppet, a instalar, configurar y ejecutar los plugins OpenScap y Remote Execution de Foreman y por último, a recibir los informes o notificaciones que nos facilita, por defecto, Foreman-Katello.

Como habréis observado durante la instalación de Katello, éste nos instalará en el servidor Puppet Server y Puppet Agent. Estos son necesarios para poder mantener y administrar la configuración de los servidores que agreguemos. Ello se hace mediante los módulos de Puppet.

Agregar/Editar módulos de puppet

Podemos ver qué modulos tenemos actualmente importados en Foreman-Katello si nos desplazamos a Configure > Classes.

k1

En esta sección, podremos editar, agregar o eliminar tantos módulos como querámos pero tenemos que tener en cuenta que, a mayor cantidad de módulos agregados, mayor tiempo de carga a la hora de importar nuevos.

Para agregar, actualizar o eliminar módulos, clickamos sobre el botón Import environments from <dominio>, tras una breve carga, nos enseñará qué módulos/entornos están pendiente de alguna acción.

k2.PNG

Una vez tenemos nuestros entornos/módulos, podemos asignarlos a los Host Groups que queramos para así tenerlos debidamente organizados e implementados.

Plugins de Foreman

Foreman dispone de muchos plugins, uno de ellos es el que ya hemos instalado en la entrada Foreman-Katello, administrador de ciclos de vida de servidores. Podemos visualizar qué plugins son los más populares o, en cambio, visualizar todos los plugins disponibles actualmente.

En esta entrada os enseñaré a instalar los que a mi me han resultado más interesantes, aunque siempre es cuestión de gustos, ¿verdad?

OpenScap

Comenzamos con OpenScap, un plugin que nos permite conocer el estado de vulnerabilidad actual de nuestros servidores. 

Para comenzar con su instalación, actualizamos los repositorios y los actualizamos:

yum check-update && yum update -y

Instalamos el plugin:

yum install -y tfm-rubygem-foreman_openscap.noarch rubygem-smart_proxy_openscap.noarch

Migramos y ‘sembramos’ (aplicamos) los cambios en la BBDD, finalmente reiniciamos el servicio de Apache:

foreman-rake db:migrate
foreman-rake db:seed
systemctl restart httpd

Por último, instalamos el módulo de puppet del plugin:

puppet module install theforeman-foreman_scap_client

Para verificar que se ha instalado correctamente el plugin, podremos observar que nos aparece sus secciones en Host > Compliance

k3

Necesitaremos importar el modulo recién instalado

k4.PNG

OpenScap tiene creado por defecto los Scap Contents creados por la comunidad, por lo que si queremos obtenerlos debemos de importarlos a la base de datos:

foreman-rake foreman_openscap:bulk_upload:default

NOTA: Si al importar los Scap Content por defecto os notifica con el siguiente aviso:

## SCAP content is invalid: No proxy with OpenSCAP feature was found. ##

No os preocupéis, reiniciad katello, iros a Infrastructure > Vuestro smart-proxy > Services > Desplegad el menú Actions > Refresh y os añadirá correctamente el plugin

k5.PNG

Re-importáis los Scap Contents y ya no os aparecerá el aviso. Si todo va correctamente, deberéis ver un aviso como el siguiente:

Saved /usr/share/xml/scap/ssg/content/ssg-rhel6-ds.xml as Red Hat rhel6 default content

Continuando con OpenScap, primero deberemos de crear un Scap Content (en caso de no tener ninguno creado/importado), para ello le damos a Upload New SCAP Content y subimos el nuestro.

Procedemos a crear las Policies, nos vamos a Host > Policies > New Policy. Le definimos un nombre así como su descripción, en la siguiente ventana de configuración le definimos la siguiente configuración

k6

Dónde:

  • SCAP Content: fichero de OpenScap importado.
  • XCCDF Profile: perfil del Scap Content a usar.

La programación, ubicaciones, organizaciones y Host Groups es a gusto de cada uno, en mi caso definiré:

  • Schedule: el día 15 de cada mes.
  • Locations: todas las existentes.
  • Organizations: todas las existentes.
  • Host Groups: Development

Seguidamente asignaremos esta Policy a los clientes que elijamos, para ello nos vamos a Host > All hosts > Seleccionamos los deseados > Desplegamos el menú Select Action > Pulsamos sobre Assign Compliance Policy

k7.PNG

Ahora, si nos vamos a la máquina, deberemos editar el campo para que el proxy de OpenScap a utilizar sea nuestro servidor:

k9.PNG

Deberemos de editar los parametros de la clase de puppet del plugin, para ello nos vamos a Configure > Classes > foreman_scap_client > Navegamos a la pestaña Smart Class Parameter y sobreescribimos las dos últimas, éstas correspondientes al servidor y al puerto que utiliza.

k8

Ahora, desde la consola del cliente, instalamos el cliente de OpenScap y lanzamos un test del agente de puppet:

# yum install -y https://yum.theforeman.org/plugins/1.19/el7/x86_64/rubygem-foreman_scap_client-0.3.0-2.el7.noarch.rpm
# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for cliente3.lab.org
Info: Applying configuration version '1553106587'
Notice: /Stage[main]/Foreman_scap_client/File[foreman_scap_client]/ensure: defined content as '{md5}be5454b1af10b8bfc165267739dc1f86'
Notice: Applied catalog in 0.15 seconds

Con esto podremos lanzar nuestro primer reporte de forma manual (aunque se habrá creado una tarea de cron para que se ejecute según nuestra programación al crear el Policy)

foreman_scap_client 1
File /var/lib/openscap/content/3e1654fd14a5352d65294db555710bfda5cad1a942209e2d787ea7940035616e.xml is missing. Downloading it from proxy.
Download SCAP content xml from: https://katello.lab.org:9090/compliance/policies/1/content/3e1654fd14a5352d65294db555710bfda5cad1a942209e2d787ea7940035616e
DEBUG: running: oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_C2S --results-arf /tmp/d20190320-4083-1tbyazo/results.xml /var/lib/openscap/content/3e1654fd14a5352d65294db555710bfda5cad1a942209e2d787ea7940035616e.xml

Al terminar, podemos ver el informe que sube a nuestro servidor yendo a Hosts > Policies > Pulsamos sobre el nombre del Policy y veremos los informes de las máquinas a las que se les ha pasado nuestro Scap Content

k10.PNG

Si pulsamos sobre View Report visualizaremos un informe más detallado.

Procedemos con la instalación y configuración de Remote Execution.

Remote Execution Plugin

Al igual que OpenScap y que Katello, REP es un plugin que nos permite ejecutar comandos o scripts a los resultados de los filtros de búsquedas que le definimos a la hora de configurar la tarea.

Con OpenScap utilizamos la instalación manual, ahora con REP, os enseñaré la instalación automática:

foreman-installer --enable-foreman-plugin-remote-execution --enable-foreman-proxy-plugin-remote-execution-ssh
Resetting puppet server version param...
Installing Done [100%] [............................]
Success!
* Katello is running at https://katello.lab.org
* To install an additional Foreman proxy on separate machine continue by running:
foreman-proxy-certs-generate --foreman-proxy-fqdn "$FOREMAN_PROXY" --certs-tar "/root/$FOREMAN_PROXY-certs.tar"
The full log is at /var/log/foreman-installer/katello.log

Con el plugin ya instalado, nos vamos a la interfaz web de Katello > Hosts > Templates > Job Templates, aquí veremos los que la instalación trae por defecto.

k11.PNG

Ahora debemos propagar la clave pública de ssh del usuario foreman-proxy a todos los clientes a los que nos queremos ‘conectar’ para poder ejecutar en ellos cualquier acción con REP. Configuramos el cliente lanzando el siguiente comando:

ssh-copy-id -i /usr/share/foreman-proxy/.ssh/id_rsa_foreman_proxy.pub <usuario>@<ip / hostname>

Verificamos que el usuario está definido para lanzar comandos sin necesidad de contraseña con visudo. Deberá aparecer una linea parecida a esta:

usuario ALL=(ALL) NOPASSWD: ALL

Comprobamos que con dicho usuario en el cliente podemos realizar acciones de root. Un ejemplo sería lanzar yum check-update sin sudo.

Procedemos a crear nuestro primer job, nos vamos a Hosts > Job Templates > New Job Template. Si necesitáis ayuda para comprender mejor cómo funcionan los Job Templates del plugin Remote Execution, os recomiendo que le echéis un vistazo a su documentación oficial

Por mi parte, crearé un job para suscribir los servidores a Katello de forma remota, quedando así en mi job, la pestaña de Template:

k13.PNG

Dónde:

  • Name: nombre del Job
  • Default: Si queremos que nuestro Job sea un Job Template por defecto de Katello.

Y así la pestaña de Job:

k14.PNG

Dónde:

  • Job Category: Categoría a la que pertenece el Job que crearemos.
  • Description Format: formato que aparecerá cuando se ejecute el job.
  • Provider type: tipo de ejecutor, en nuestro caso solo tenemos configurado SSH.
  • Timeout to kill: tiempo de espera hasta que el job pare su ejecución.
  • Template input:
    • Name: Nombre del cuadro de texto dónde indicaremos a que Activation key deben suscribirse los servidores.
    • Required: Checkbox que nos permitirá marcar esta opción como requerida.
    • Input Type: opción que nos permite dejar al usuario definir el contenido de la variable.
    • Options: opciones por defecto que, en caso de dejar el cuadro de texto vacío, tomará.
    • Description: Descripción que aparecerá en la ejecución del job.
  • Effective user:
    • Value: usuario con el que se ejecutará el job (se podrá indicar cuando vayamos a lanzarlo)
    • Current User: tomará el usuario con la sesión iniciada en Katello, es decir, quién lanza el job.
    • Overridable: si estas opciones son sobreescribibles.

NOTA: En la pestaña Help encontraréis más información sobre Ruby (lenguaje en el que se definen las variables del job)

Guardamos y lanzamos el job presionando el botón Run que veréis a la derecha del nombre del job.

k15.PNG

Dónde:

  • Job Category: Categoría del job que vamos a lanzar
  • Job Template: Plantilla del job a lanzar (el que acabamos de crear)
  • Bookmark: filtro de búsqueda que hemos almacenado para no tener que volver a escribirla, en mi caso lo dejará vacío.
  • Search Query: filtro de búsqueda que aplicaré para que el job se aplique a todos sus resultados. En mi caso defino un filtro de búsqueda para una sola máquina.
  • Resolves to: Pulsamos sobre refresh para actualizar la lista de máquinas resultantes del filtro de búsqueda.
  • Activation Key: variable que definimos en la creación del job, en mi caso declaro la llave de activación Development.
  • Effective user: usuario que hemos configurado para que ejecute comandos de root sin necesidad de introducir su contraseña.

Dejando los demás campos tal y como nos lo rellena el Job, lo lanzamos y aparecerá esta interfaz:

k16.PNG

Si pulsamos sobre la máquina que aparece en la lista de Hosts, nos llevará a la ejecución del job en vivo

k12

Cuando termine, Katello nos notificará de si ha ido bien o de si algún paso ha fallado. En mi caso, todo se ejecutó correctamente:

ka17.PNG

Con esto, ya podemos empezar a lanzar jobs a todas las máquinas que tengamos en Katello.

Por último, configuraremos Katello para poder recibir notificaciones por email de cualquier cambio o errores encontrados en los servidores que Katello identifique.

Notificaciones por email

Esta configuración es sencilla y no requiere de ningún plugin a instalar. Para activar las notificaciones por correo (en mi caso a mi cuenta de gmail), nos vamos a /etc/foreman/ y creamos el fichero de configuración (en la instalación no lo crea):

touch email.yml

Editamos el fichero y lo definimos con la siguiente configuración:

[root@katello foreman]# cat email.yaml
production:
delivery_method: :smtp
smtp_settings:
address: smtp.gmail.com
port: 465
domain: lab.org
authentication: :none

Guardamos el fichero y le definimos correctamente su grupo propietario:

chgrp foreman email.yml

Nos vamos a la configuración de nuestra cuenta en la interfaz web de Katello

k17.PNG

En el cuadro de texto del correo ( mail ), definimos al que queramos recibir las notificaciones de Katello, en mi caso defino mi cuenta de gmail.

Nos desplazamos a la pestaña Email Preferences y le damos al botón verde para testear el envío de correo:

k18.PNG

Comprobamos que efectivamente, nos ha llegado el correo (si no lo veis en vuestra bandeja de entrada, mirad en la bandeja de spam)

k19

Ya solo nos queda definir qué notificaciones nos llegarán. En mi caso las defino así:

k20.PNG

Estas notificaciones nos avisarán de manera diaria, semanal, mensualmente o cuando suscribamos servidores de:

  • Audit summary: resumen de auditoría
  • Compliance policy summary: resumen del nivel de securiazión de nuestros servidores
  • Config error state: cuando un servidor dé error de configuración por algún módulo de puppet, de software o incluso de hardware.
  • Config summary: resumen de las últimas configuraciones realizadas a los servidores.
  • Host built: Si desplegamos servidores por aprovisionamiento mediante Katello.
  • Host errata advisory: cuando una nueva errata es encontrada y puede aplicarse a un servidor.
  • Promote errata: cuando una errata ha de ser aplicada a un servidor.
  • Sync errata: cuando se encuentra nueva errata en los repositorios

 

Y con esto terminamos las entradas de Foreman-Katello. Si tenéis alguna duda sobre cualquier apartado de las tres publicaciones, preguntadme y os la resolveré lo antes posible.

Espero que os haya gustado, qué hayáis aprendido sobre esta gran herramienta y sus plugins y sobre todo, que al igual que yo, os hayáis entusiasmado con todas las posibilidades que Foreman-Katello nos ofrece.

Un saludo y hasta la siguiente entrada!

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.