client

Роль Ansible для Mondoo Package

иллюстрация роли mondoo ansible

Обзор

Эта роль устанавливает cnquery и cnspec на серверах Linux и Windows.

Она выполняет следующее:

  • Устанавливает подписанные бинарные файлы cnquery и cnspec
  • Регистрирует cnquery и cnspec на платформе Mondoo
  • Включает сервис cnspec на Linux и Windows

Роль поддерживает:

  • Amazon Linux
  • Debian
  • Red Hat Enterprise Linux и производные (CentOS/AlmaLinux/Rocky Linux)
  • SUSE и openSUSE
  • Ubuntu
  • Windows 10, 11, 2016, 2019, 2022

Роль опубликована на Ansible Galaxy: Mondoo/Client role.

Требования

  • Ansible > 2.5

Переменные роли

Имя Значение по умолчанию Описание
registration_token_retrieval manual manual требует установить токен registration_token
registration_token n/a Вручную установить токен регистрации платформы Mondoo, который используется для регистрации cnquery и cnspec
force_registration false Принуждает к повторной регистрации при каждом запуске

Зависимости

У этой роли нет зависимостей.

Пример: Применить Ansible Playbook к экземпляру Amazon EC2 с Linux

Этот playbook демонстрирует, как использовать роль Mondoo Package для установки cnquery и cnspec на нескольких экземплярах:

  1. Создайте новый инвентарь hosts. Добавьте ваш хост в группу.
[linux_hosts]
54.172.7.243  ansible_user=ec2-user
  1. Создайте playbook.yml и измените registration_token:
---
- hosts: linux_hosts
  become: yes
  roles:
    - role: ansible-mondoo # если используется из galaxy: mondoo.client
      vars:
        registration_token: "changeme"

Дополнительно мы поддерживаем следующие переменные:

переменная описание
force_registration: true установить в true, если вы хотите повторно зарегистрировать cnquery и cnspec
ensure_managed_client: true гарантирует, что настроенные клиенты будут настроены как управляемые клиенты в Mondoo
proxy_env['https_proxy'] установить прокси для клиента cnspec
annotations установить аннотации/теги для узла
update_linux_enabled установить в true, если хотите включить задачу обновления для Linux через cron
update_linux_cron_day определить интервал обновления в днях для обновления cnspec, пример */3 для каждых 3 дней
update_linux_cron_hour определить час, в который задача будет выполняться
update_linux_cron_minute определить минуту, в которой задача будет выполняться
update_windows_enabled установить в true, если хотите включить задачу обновления для Windows через планировщик задач
update_windows_interval определить интервал обновления в днях для обновления cnspec
update_windows_time определить время, в которое задача будет выполняться
timer определить таймер для установки интервала сканирования в минутах. Значение по умолчанию 60.
splay определить задержку во времени сканирования
---
- hosts: linux_hosts
  become: yes
  roles:
    - role: ansible-mondoo # если используется из galaxy: mondoo.client
      vars:
        registration_token: "changeme"
        force_registration: true
        ensure_managed_client: true
        annotations: "[email protected],env=production"

Если вы хотите использовать cnspec за прокси

---
- 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 # если используется из galaxy: mondoo.client
      vars:
        registration_token: "changeme"
        force_registration: true
        ensure_managed_client: true
      environment: "{{proxy_env}}"

Если вы хотите использовать задачу обновления Windows

---
- hosts: windows_hosts
  become: yes

  roles:
    - role: ansible-mondoo # если используется из galaxy: mondoo.client
      vars:
        registration_token: "changeme"
        force_registration: true
        ensure_managed_client: true
        update_windows_enabled: true
        update_windows_interval: "1"
        update_windows_time: "15:04"

Если вы хотите использовать задачу обновления Linux

---
- hosts: linux_hosts
  become: yes

  roles:
    - role: ansible-mondoo # если используется из galaxy: mondoo.client
      vars:
        registration_token: "changeme"
        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. Запустите playbook с локальным файлом hosts
# скачать роль mondoo с github
ansible-galaxy role install git+https://github.com/mondoohq/ansible-mondoo.git

# (альтернатива) скачать роль mondoo с ansible galaxy
ansible-galaxy install mondoo.client

# применить playbook
ansible-playbook -i hosts playbook.yml
  1. Войдите в консоль Mondoo, чтобы увидеть результаты сканирования.

Применить Ansible Playbook к экземпляру Windows EC2

Если вы используете Windows, пожалуйста, прочитайте документацию ansible о настройке WinRM или о настройке SSH.

  1. Создайте новый инвентарь hosts. Добавьте ваш хост в группу.
[windows_hosts]
123.123.247.76 ansible_port=5986 ansible_connection=winrm ansible_user=Administrator ansible_password=changeme ansible_shell_type=powershell ansible_winrm_server_cert_validation=ignore

или если вы собираетесь использовать ssh:

3.235.247.76 ansible_port=22 ansible_connection=ssh ansible_user=admin ansible_shell_type=cmd
  1. Создайте playbook.yml и измените registration_token:

Если вы нацеливаетесь на Windows, конфигурация немного отличается, поскольку нужно отключить become:

- hosts: windows_hosts
  roles:
    - role: ansible-mondoo # если используется из galaxy: mondoo.client
      vars:
        registration_token: "changeme"
        force_registration: false
  1. Запустите playbook с локальным файлом hosts
# скачать роль mondoo с github
ansible-galaxy role install git+https://github.com/mondoohq/ansible-mondoo.git

# (альтернатива) скачать роль mondoo с ansible galaxy
ansible-galaxy install mondoo.client

# применить playbook
ansible-playbook -i hosts playbook.yml

Тестирование

Для тестирования эта роль использует molecule. Вы можете установить зависимости через:

pip install molecule
pip install docker
pip install 'molecule-plugins[docker]'

CLI molecule охватывает жизненный цикл тестирования:

# сбросить molecule
molecule reset
# развернуть машины с ansible
image=geerlingguy/docker-ubuntu2204-ansible molecule converge
# запустить тесты molecule с cnspec
image=geerlingguy/docker-ubuntu2204-ansible molecule verify
# для отладки вы можете войти в отдельные хосты
molecule login --host ubuntu
# уничтожить тестовую установку
molecule destroy
image=geerlingguy/docker-ubuntu2204-ansible molecule test
image=rsprta/opensuse-ansible molecule test

ПРИМЕЧАНИЕ: чтобы тестировать на macOS M1, вам нужны совместимые с arm Docker-образы, такие как rockylinux, показанные выше.

Для линтинга мы используем ansible-lint:

pip3 install ansible-lint

Тогда вы можете увидеть все локальные проблемы с помощью:

ansible-lint

Автор

Mondoo, Inc

ЧАВО

Ошибка 'module' object has no attribute 'HTTPSHandler'

TASK [mondoo : Загрузка ключа RPM 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\nСм. stdout/stderr для получения точной ошибки", "rc": 1}
sudo zypper install python python2-urllib3 python3 python3-urllib3

Ошибка ansible.legacy.setup на Windows с 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\nСм. stdout/stderr для получения точной ошибки", "rc": 1}}, "msg": "Следующие модули не удалось выполнить: ansible.legacy.setup\n"}

Ansible в сочетании с версиями Win32-OpenSSH старше v7.9.0.0p1-Beta не работают, когда powershell выбран в качестве типа оболочки; установите вместо этого оболочку cmd.

Ошибка: Вам нужно установить 'jmespath', прежде чем запускать фильтр json_query"

Убедитесь, что jmespath установлен в той же среде Python, что и ansible:

pip install jmespath

Я хочу протестировать это на неподдерживаемой ОС

Добавьте следующее в main.yml и напечатайте ansible_facts, чтобы увидеть, что используется, и отрегулируйте условия when:

- name: Печать всех доступных фактов
  ansible.builtin.debug:
    var: ansible_facts

Присоединяйтесь к сообществу!

Присоединяйтесь к сообществу Mondoo на GitHub Discussions, чтобы сотрудничать в области кода политики и автоматизации безопасности.

О проекте

Install and configure cnquery and cnspec

Установить
ansible-galaxy install mondoohq/ansible-mondoo
Лицензия
other
Загрузки
9115
Владелец
Cloud-Native Security & Vulnerability Management