mondoo.client
Rol Ansible del Paquete Mondoo
Descripción
Este rol instala cnquery
y cnspec
en servidores Linux y Windows.
Lo que hace:
- Instala los binarios firmados de
cnquery
ycnspec
- Registra
cnquery
ycnspec
con la Plataforma Mondoo - Habilita el servicio
cnspec
en Linux y Windows
Es compatible con:
- Amazon Linux
- Debian
- Red Hat Enterprise Linux y derivados (CentOS/AlmaLinux/Rocky Linux)
- SUSE y openSUSE
- Ubuntu
- Windows 10, 11, 2016, 2019, 2022
El rol está publicado en Ansible Galaxy: Rol Mondoo/Client.
Requisitos
- Ansible > 2.5
Variables del Rol
Nombre | Valor Predeterminado | Descripción |
---|---|---|
registration_token_retrieval |
manual |
manual requiere configurar ``registration_token` |
registration_token |
n/a | establecer manualmente el Token de Registro de la Plataforma Mondoo que se utiliza para registrar cnquery y cnspec |
force_registration |
false | fuerza la re-registro en cada ejecución |
Dependencias
Este rol no tiene dependencias de roles.
Ejemplo: Aplicar Playbook de Ansible a instancia de Linux en Amazon EC2
Este playbook muestra cómo usar el rol del Paquete Mondoo para instalar cnquery
y cnspec
en varias instancias:
- Crea un nuevo inventario
hosts
. Agrega tu host al grupo.
[linux_hosts]
54.172.7.243 ansible_user=ec2-user
- Crea un
playbook.yml
y cambia elregistration_token
:
---
- hosts: linux_hosts
become: yes
roles:
- role: ansible-mondoo # si se usa desde galaxy: mondoo.client
vars:
registration_token: "cámbialo"
Además, soportamos las siguientes variables:
variable | descripción |
---|---|
force_registration: true |
establece en true si deseas re-registrar cnquery y cnspec |
ensure_managed_client: true |
asegura que los clientes configurados estén configurados como Cliente administrado en Mondoo |
proxy_env['https_proxy'] |
establece el proxy para el cliente cnspec |
annotations |
establece anotaciones/tags para el nodo |
update_linux_enabled |
establece en true si deseas habilitar la tarea de actualización para linux a través de cron job |
update_linux_cron_day |
define el intervalo de actualización en días para la actualización de cnspec, ejemplo */3 para cada 3 días |
update_linux_cron_hour |
define la hora a la que se llevará a cabo la tarea |
update_linux_cron_minute |
define el minuto a la que se llevará a cabo la tarea |
update_windows_enabled |
establece en true si deseas habilitar la tarea de actualización para windows a través de tareas programadas |
update_windows_interval |
define el intervalo de actualización en días para la actualización de cnspec |
update_windows_time |
define la hora a la que se llevará a cabo la tarea |
timer |
define el temporizador para establecer un intervalo de escaneo en minutos. El valor predeterminado es 60. |
splay |
define el retraso en el tiempo de escaneo |
---
- hosts: linux_hosts
become: yes
roles:
- role: ansible-mondoo # si se usa desde galaxy: mondoo.client
vars:
registration_token: "cámbialo"
force_registration: true
ensure_managed_client: true
annotations: "[email protected],env=producción"
Si deseas usar cnspec detrás de un proxy:
---
- hosts: linux_hosts
become: yes
vars:
proxy_env:
http_proxy: "http://192.168.56.1:3128"
https_proxy: "http://192.168.56.1:3128"
roles:
- role: ansible-mondoo # si se usa desde galaxy: mondoo.client
vars:
registration_token: "cámbialo"
force_registration: true
ensure_managed_client: true
environment: "{{proxy_env}}"
Si deseas usar la tarea de actualización de Windows:
---
- hosts: windows_hosts
become: yes
roles:
- role: ansible-mondoo # si se usa desde galaxy: mondoo.client
vars:
registration_token: "cámbialo"
force_registration: true
ensure_managed_client: true
update_windows_enabled: true
update_windows_interval: "1"
update_windows_time: "15:04"
Si deseas usar la tarea de actualización de Linux:
---
- hosts: linux_hosts
become: yes
roles:
- role: ansible-mondoo # si se usa desde galaxy: mondoo.client
vars:
registration_token: "cámbialo"
force_registration: true
ensure_managed_client: true
update_linux_enabled: true
update_linux_cron_day: "*"
update_linux_cron_hour: "11"
update_linux_cron_minute: "40"
- Ejecuta el playbook con el archivo de hosts local:
# descargar el rol mondoo desde github
ansible-galaxy role install git+https://github.com/mondoohq/ansible-mondoo.git
# (alternativa) descargar el rol mondoo desde ansible galaxy
ansible-galaxy install mondoo.client
# aplicar el playbook
ansible-playbook -i hosts playbook.yml
- Ingresa en la Consola Mondoo para ver los resultados del escaneo.
Aplicar Playbook de Ansible a instancia de Windows en Amazon EC2
Si estás usando Windows, por favor lee la documentación de ansible sobre configuración de WinRM o la configuración de SSH.
- Crea un nuevo inventario
hosts
. Agrega tu host al grupo.
[windows_hosts]
123.123.247.76 ansible_port=5986 ansible_connection=winrm ansible_user=Administrador ansible_password=cámbialo ansible_shell_type=powershell ansible_winrm_server_cert_validation=ignore
O si vas a usar ssh:
3.235.247.76 ansible_port=22 ansible_connection=ssh ansible_user=admin ansible_shell_type=cmd
- Crea un
playbook.yml
y cambia elregistration_token
:
Si estás apuntando a windows, la configuración es ligeramente diferente ya que become
debe desactivarse:
- hosts: windows_hosts
roles:
- role: ansible-mondoo # si se usa desde galaxy: mondoo.client
vars:
registration_token: "cámbialo"
force_registration: false
- Ejecuta el playbook con el archivo de hosts local:
# descargar el rol mondoo desde github
ansible-galaxy role install git+https://github.com/mondoohq/ansible-mondoo.git
# (alternativa) descargar el rol mondoo desde ansible galaxy
ansible-galaxy install mondoo.client
# aplicar el playbook
ansible-playbook -i hosts playbook.yml
Pruebas
Para las pruebas, este rol usa molecule. Puedes instalar las dependencias mediante:
pip install molecule
pip install docker
pip install 'molecule-plugins[docker]'
La CLI de molecule
cubre el ciclo de vida de pruebas:
# restablecer molecule
molecule reset
# converger las máquinas con ansible
image=geerlingguy/docker-ubuntu2204-ansible molecule converge
# ejecutar pruebas de molecule con cnspec
image=geerlingguy/docker-ubuntu2204-ansible molecule verify
# para depuración, puedes iniciar sesión en hosts individuales
molecule login --host ubuntu
# destruir la configuración de prueba
molecule destroy
image=geerlingguy/docker-ubuntu2204-ansible molecule test
image=rsprta/opensuse-ansible molecule test
NOTA: para poder probar en macOS con M1, necesitas imágenes de docker compatibles con arm como rockylinux mostradas arriba.
Para linting, usamos ansible-lint
:
pip3 install ansible-lint
Luego puedes ver todos los problemas locales con:
ansible-lint
Autor
Mondoo, Inc
Preguntas Frecuentes
Error 'module' object has no attribute 'HTTPSHandler'
TASK [mondoo : Descargar clave RPM de Mondoo] ********************************
fatal: [suse]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 127.0.0.1 closed.\r\n", "module_stdout": "Traceback (most recent call last):\r\n File \"/home/vagrant/.ansible/tmp/ansible-tmp-1562450830.52-85510064926638/AnsiballZ_get_url.py\", line 113, in <module>\r\n _ansiballz_main()\r\n File \"/home/vagrant/.ansible/tmp/ansible-tmp-1562450830.52-85510064926638/AnsiballZ_get_url.py\", line 105, in _ansiballz_main\r\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n File \"/home/vagrant/.ansible/tmp/ansible-tmp-1562450830.52-85510064926638/AnsiballZ_get_url.py\", line 48, in invoke_module\r\n imp.load_module('__main__', mod, module, MOD_DESC)\r\n File \"/tmp/ansible_get_url_payload_103dVU/__main__.py\", line 308, in <module>\r\n File \"/tmp/ansible_get_url_payload_103dVU/ansible_get_url_payload.zip/ansible/module_utils/urls.py\", line 346, in <module>\r\nAttributeError: 'module' object has no attribute 'HTTPSHandler'\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
sudo zypper install python python2-urllib3 python3 python3-urllib3
Error ansible.legacy.setup
en Windows con SSH
fatal: [123.123.247.76]: FAILED! => {"ansible_facts": {}, "changed": false, "failed_modules": {"ansible.legacy.setup": {"failed": true, "module_stderr": "Parameter format not correct - ;\r\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}}, "msg": "Los siguientes módulos no pudieron ejecutarse: ansible.legacy.setup\n"}
Ansible en combinación con versiones de Win32-OpenSSH anteriores a v7.9.0.0p1-Beta no funcionan cuando powershell
es el tipo de shell, establece el tipo de shell en cmd
.
Error: Necesitas instalar 'jmespath' antes de ejecutar el filtro json_query
Asegúrate de que jmespath esté instalado en el mismo entorno de python que ansible:
pip install jmespath
Quiero probarlo con un SO no soportado
Agrega lo siguiente a main.yml e imprime los ansible_facts para ver qué se está utilizando y ajusta las condiciones when
:
- name: Imprimir todos los hechos disponibles
ansible.builtin.debug:
var: ansible_facts
¡Únete a la comunidad!
Únete a las Discusiones de la Comunidad Mondoo en GitHub para colaborar sobre políticas como código y automatización de seguridad.
ansible-galaxy install mondoo.client