Ansible Tower / AWX / Automation controller Security

Безпека Ansible Tower / AWX / Контролер автоматизації

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Основна інформація

Ansible Tower або його відкрита версія AWX також відомі як інтерфейс користувача Ansible, інформаційна панель та REST API. За допомогою контролю доступу на основі ролей, планування завдань та графічного управління інвентарем ви можете керувати своєю інфраструктурою Ansible з сучасним інтерфейсом. REST API та інтерфейс командного рядка Tower дозволяють легко інтегрувати його в поточні інструменти та робочі процеси.

Контролер автоматизації є новішою версією Ansible Tower з більшими можливостями.

Відмінності

Згідно з цим, основні відмінності між Ansible Tower та AWS - це отримана підтримка, а також Ansible Tower має додаткові функції, такі як контроль доступу на основі ролей, підтримка власних API та користувацькі робочі процеси.

Технічний стек

  • Веб-інтерфейс: Це графічний інтерфейс, де користувачі можуть керувати інвентарем, обліковими записами, шаблонами та завданнями. Він розроблений для того, щоб бути інтуїтивно зрозумілим та надавати візуалізації для допомоги в розумінні стану та результатів ваших автоматизованих завдань.

  • REST API: Все, що ви можете зробити в веб-інтерфейсі, ви також можете зробити через REST API. Це означає, що ви можете інтегрувати AWX/Tower з іншими системами або скриптами, які зазвичай виконуєте в інтерфейсі.

  • База даних: AWX/Tower використовує базу даних (зазвичай PostgreSQL), щоб зберігати свою конфігурацію, результати завдань та інші необхідні операційні дані.

  • RabbitMQ: Це система обміну повідомленнями, яку використовує AWX/Tower для спілкування між різними компонентами, особливо між веб-сервісом та виконавцями завдань.

  • Redis: Redis служить як кеш та основа для черги завдань.

Логічні компоненти

  • Інвентарі: Інвентар - це колекція хостів (або вузлів), проти яких можуть бути виконані завдання (playbooks Ansible). AWX/Tower дозволяє визначати та групувати ваші інвентарі та також підтримує динамічні інвентарі, які можуть отримувати списки хостів з інших систем, таких як AWS, Azure тощо.

  • Проекти: Проект - це в основному колекція playbooks Ansible, отриманих з системи контролю версій (наприклад, Git), для того щоб завантажувати останні playbooks, коли це потрібно.

  • Шаблони: Шаблони завдань визначають як буде виконуватися певний playbook, вказуючи інвентар, облікові дані та інші параметри для завдання.

  • Облікові дані: AWX/Tower надає безпечний спосіб керування та зберігання секретів, таких як SSH-ключі, паролі та токени API. Ці облікові дані можуть бути пов'язані з шаблонами завдань, щоб playbooks мали необхідний доступ при їх виконанні.

  • Двигун завдань: Ось де відбувається чудо. Двигун завдань побудований на Ansible і відповідає за виконання playbooks. Завдання передаються до двигуна завдань, який потім виконує playbooks Ansible проти визначених в інвентарі вузлів, використовуючи вказані облікові дані.

  • Планувальники та зворотні виклики: Це розширені функції в AWX/Tower, які дозволяють планувати завдання для виконання в певний час або спрацьовувати за зовнішніми подіями.

  • Сповіщення: AWX/Tower може надсилати сповіщення на основі успіху або невдачі завдань. Воно підтримує різні засоби сповіщення, такі як електронні листи, повідомлення в Slack, вебхуки тощо.

  • Playbooks Ansible: Playbooks Ansible - це інструменти конфігурації, розгортання та оркестрації. Вони описують бажаний стан систем автоматизованим, повторюваним способом. Написані на YAML, playbooks використовують декларативну мову автоматизації Ansible для опису конфігурацій, завдань та кроків, які потрібно виконати.

Потік виконання завдань

  1. Взаємодія користувача: Користувач може взаємодіяти з AWX/Tower через веб-інтерфейс або REST API. Ці забезпечують доступ до всіх функцій, які пропонує AWX/Tower.

  2. Ініціювання завдання:

  • Користувач, через веб-інтерфейс або API, ініціює завдання на основі Шаблону завдання.

  • Шаблон завдання включає посилання на Інвентар, Проект (що містить playbook) та Облікові дані.

  • Після ініціювання завдання, запит надсилається до бекенду AWX/Tower для постановки завдання у чергу на виконання.

  1. Постановка завдання у чергу:

  • RabbitMQ відповідає за обмін повідомленнями між веб-компонентом та виконавцями завдань. Як тільки завдання ініційовано, повідомлення відправляється до двигуна завдань за допомогою RabbitMQ.

  • Redis виступає як основа для черги завдань, керуючи завданнями, які очікують виконання.

  1. Виконання завдання:

  • Двигун завдань бере у чергу завдання. Він отримує необхідну інформацію з Бази даних про пов'язаний playbook завдання, інвентар та облікові дані.

  • Використовуючи отриманий playbook Ansible з пов'язаного Проекту, двигун завдань виконує playbook проти вказаних вузлів Інвентарю, використовуючи надані Облікові дані.

  • Під час виконання playbook його вихідні дані (журнали, факти тощо) захоплюються та зберігаються в Базі даних.

  1. Результати завдання:

  • Після завершення виконання playbook результати (успіх, невдача, журнали) зберігаються в Базі даних.

  • Користувачі можуть переглядати результати через веб-інтерфейс або запитувати їх через REST API.

  • На основі результатів завдань можуть бути надіслані Сповіщення, щоб інформувати користувачів або зовнішні системи про статус завдання. Сповіщення можуть бути електронними листами, повідомленнями в Slack, вебхуками тощо.

  1. Інтеграція зовнішніх систем:

  • Інвентарі можуть бути динамічно отримані зовнішніми системами, що дозволяє AWX/Tower отримувати хости з джерел, таких як AWS, Azure, VMware та інші.

  • Проекти (playbooks) можуть бути отримані з систем контролю версій, що забезпечує використання актуальних playbooks під час виконання завдань.

  • Планувальники та зворотні виклики можуть бути використані для інтеграції з іншими системами або інструментами, що дозволяє AWX/Tower реагувати на зовнішні спрацьовування або запускати завдання у певні часи.

Створення лабораторії AWX для тестування

Дотримуючись документації, можна використовувати docker-compose для запуску AWX:

```bash git clone -b x.y.z https://github.com/ansible/awx.git # Get in x.y.z the latest release version

cd awx

Build

make docker-compose-build

Run

make docker-compose

Or to create a more complex env

MAIN_NODE_TYPE=control EXECUTION_NODE_COUNT=2 COMPOSE_TAG=devel make docker-compose

Clean and build the UI

docker exec tools_awx_1 make clean-ui ui-devel

Once migrations are completed and the UI is built, you can begin using AWX. The UI can be reached in your browser at https://localhost:8043/#/home, and the API can be found at https://localhost:8043/api/v2.

Create an admin user

docker exec -ti tools_awx_1 awx-manage createsuperuser

Load demo data

docker exec tools_awx_1 awx-manage create_preload_data

## RBAC

### Підтримувані ролі

Найбільш привілейована роль називається **Системний адміністратор**. Кожен з цією роллю може **змінювати будь-що**.

З точки зору **білого ящика безпеки**, вам знадобиться роль **Системного аудитора**, яка дозволяє **переглядати всі дані системи**, але не може вносити зміни. Іншою опцією є отримання ролі **Аудитора організації**, але краще отримати першу.

<details>

<summary>Розгорнути для отримання детального опису доступних ролей</summary>

1. **Системний адміністратор**:
* Це суперкористувацька роль з дозволами на доступ і зміну будь-якого ресурсу в системі.
* Вони можуть керувати всіма організаціями, командами, проектами, інвентарями, шаблонами завдань тощо.
2. **Системний аудитор**:
* Користувачі з цією роллю можуть переглядати всі дані системи, але не можуть вносити зміни.
* Ця роль призначена для відповідності та нагляду.
3. **Ролі організації**:
* **Адмін**: Повний контроль над ресурсами організації.
* **Аудитор**: Доступ тільки для перегляду ресурсів організації.
* **Учасник**: Базове членство в організації без конкретних дозволів.
* **Виконання**: Може запускати шаблони завдань в межах організації.
* **Читання**: Може переглядати ресурси організації.
4. **Ролі проекту**:
* **Адмін**: Може керувати та змінювати проект.
* **Використання**: Може використовувати проект у шаблоні завдання.
* **Оновлення**: Може оновлювати проект за допомогою SCM (система керування джерелами).
5. **Ролі інвентаря**:
* **Адмін**: Може керувати та змінювати інвентар.
* **Ad Hoc**: Може запускати Ad Hoc-команди в інвентарі.
* **Оновлення**: Може оновлювати джерело інвентарю.
* **Використання**: Може використовувати інвентар у шаблоні завдання.
* **Читання**: Доступ тільки для перегляду.
6. **Ролі шаблону завдання**:
* **Адмін**: Може керувати та змінювати шаблон завдання.
* **Виконання**: Може запускати завдання.
* **Читання**: Доступ тільки для перегляду.
7. **Ролі облікових даних**:
* **Адмін**: Може керувати та змінювати облікові дані.
* **Використання**: Може використовувати облікові дані у шаблонах завдань або інших відповідних ресурсах.
* **Читання**: Доступ тільки для перегляду.
8. **Ролі команди**:
* **Учасник**: Частина команди, але без конкретних дозволів.
* **Адмін**: Може керувати членами команди та пов'язаними ресурсами.
9. **Ролі робочого процесу**:
* **Адмін**: Може керувати та змінювати робочий процес.
* **Виконання**: Може запускати робочий процес.
* **Читання**: Доступ тільки для перегляду.

</details>

Last updated