mondoo.client

Rol Ansible del Paquete Mondoo

ilustración del rol ansible de mondoo

Descripción

Este rol instala cnquery y cnspec en servidores Linux y Windows.

Lo que hace:

  • Instala los binarios firmados de cnquery y cnspec
  • Registra cnquery y cnspec 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:

  1. Crea un nuevo inventario hosts. Agrega tu host al grupo.
[linux_hosts]
54.172.7.243  ansible_user=ec2-user
  1. Crea un playbook.yml y cambia el registration_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"
  1. 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
  1. 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.

  1. 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
  1. Crea un playbook.yml y cambia el registration_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
  1. 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.

Acerca del proyecto

Install and configure cnquery and cnspec

Instalar
ansible-galaxy install mondoo.client
Licencia
other
Descargas
12.4k
Propietario
Cloud-Native Security & Vulnerability Management