# Ansible Tower / AWX / Automation controller Security

{{#include ../banners/hacktricks-training.md}}

## Osnovne informacije

**Ansible Tower** ili njegova open-source verzija [**AWX**](https://github.com/ansible/awx) poznata je kao **korisnički interfejs, kontrolna tabla i REST API** za Ansible. Sa **kontrolom pristupa zasnovanom na rolama**, zakazivanjem poslova i grafičkim upravljanjem inventarom, možete upravljati svojom Ansible infrastrukturom iz modernog UI-a. Tower-ov REST API i komandna linija olakšavaju integraciju sa trenutnim alatima i radnim tokovima.

**Automation Controller je novija** verzija Ansible Tower-a sa više mogućnosti.

### Razlike

Prema [**ovome**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), glavne razlike između Ansible Tower-a i AWX-a su podrška koja se dobija, a Ansible Tower ima dodatne funkcije kao što su kontrola pristupa zasnovana na rolama, podrška za prilagođene API-je i korisnički definisani radni tokovi.

### Tehnološki stack

- **Web interfejs**: Ovo je grafički interfejs gde korisnici mogu upravljati inventarima, akreditivima, šablonima i poslovima. Dizajniran je da bude intuitivan i pruža vizualizacije koje pomažu u razumevanju stanja i rezultata vaših automatizovanih poslova.
- **REST API**: Sve što možete da uradite u web interfejsu, možete uraditi i putem REST API-ja. To znači da možete integrisati AWX/Tower sa drugim sistemima ili skriptovati radnje koje biste obično izvodili u interfejsu.
- **Baza podataka**: AWX/Tower koristi bazu podataka (obično PostgreSQL) za čuvanje svoje konfiguracije, rezultata poslova i drugih neophodnih operativnih podataka.
- **RabbitMQ**: Ovo je sistem za razmenu poruka koji koristi AWX/Tower za komunikaciju između različitih komponenti, posebno između web servisa i izvršitelja zadataka.
- **Redis**: Redis služi kao keš i pozadinski sistem za red zadataka.

### Logičke komponente

- **Inventari**: Inventar je **kolekcija hostova (ili čvorova)** protiv kojih se mogu **izvršavati poslovi** (Ansible playbook-ovi). AWX/Tower vam omogućava da definišete i grupišete svoje inventare i takođe podržava dinamičke inventare koji mogu **pribaviti liste hostova iz drugih sistema** kao što su AWS, Azure, itd.
- **Projekti**: Projekat je u suštini **kolekcija Ansible playbook-ova** preuzetih iz **sistema za kontrolu verzija** (kao što je Git) kako bi se povukli najnoviji playbook-ovi kada je to potrebno.
- **Šabloni**: Šabloni poslova definišu **kako će se određeni playbook izvršiti**, specificirajući **inventar**, **akreditive** i druge **parametre** za posao.
- **Akreditivi**: AWX/Tower pruža siguran način za **upravljanje i čuvanje tajni, kao što su SSH ključevi, lozinke i API tokeni**. Ovi akreditivi mogu biti povezani sa šablonima poslova kako bi playbook-ovi imali neophodan pristup kada se izvrše.
- **Task Engine**: Ovo je mesto gde se dešava magija. Task engine je izgrađen na Ansible-u i odgovoran je za **izvršavanje playbook-ova**. Poslovi se šalju task engine-u, koji zatim izvršava Ansible playbook-ove protiv određenog inventara koristeći specificirane akreditive.
- **Zakazivači i povratni pozivi**: Ovo su napredne funkcije u AWX/Tower-u koje omogućavaju **zakazivanje poslova** da se izvrše u određenim vremenima ili da budu pokrenuti spoljnim događajima.
- **Obaveštenja**: AWX/Tower može slati obaveštenja na osnovu uspeha ili neuspeha poslova. Podržava različite načine obaveštavanja kao što su e-mailovi, Slack poruke, webhook-ovi, itd.
- **Ansible Playbook-ovi**: Ansible playbook-ovi su alati za konfiguraciju, implementaciju i orkestraciju. Oni opisuju željeno stanje sistema na automatizovan, ponovljiv način. Napisani u YAML-u, playbook-ovi koriste Ansible-ov deklarativni jezik automatizacije za opisivanje konfiguracija, zadataka i koraka koji treba da se izvrše.

### Tok izvršenja poslova

1. **Interakcija korisnika**: Korisnik može interagovati sa AWX/Tower-om ili putem **Web interfejsa** ili **REST API-ja**. Ovi pružaju front-end pristup svim funkcionalnostima koje nudi AWX/Tower.
2. **Inicijacija posla**:
- Korisnik, putem Web interfejsa ili API-ja, inicira posao na osnovu **Šablona posla**.
- Šablon posla uključuje reference na **Inventar**, **Projekat** (koji sadrži playbook) i **Akreditive**.
- Nakon inicijacije posla, zahtev se šalje AWX/Tower pozadini da se posao stavi u red za izvršenje.
3. **Redosled poslova**:
- **RabbitMQ** upravlja razmenom poruka između web komponente i izvršitelja zadataka. Kada se posao inicira, poruka se šalje task engine-u koristeći RabbitMQ.
- **Redis** deluje kao pozadinski sistem za red zadataka, upravljajući redom poslova koji čekaju na izvršenje.
4. **Izvršenje posla**:
- **Task Engine** preuzima posao iz reda. On pribavlja neophodne informacije iz **Baze podataka** o povezanom playbook-u, inventaru i akreditivima.
- Koristeći preuzeti Ansible playbook iz povezanog **Projekta**, Task Engine izvršava playbook protiv specificiranih **Inventar** čvorova koristeći pružene **Akreditive**.
- Dok se playbook izvršava, njegov izlaz (logovi, činjenice, itd.) se beleži i čuva u **Bazi podataka**.
5. **Rezultati posla**:
- Kada se playbook završi, rezultati (uspeh, neuspeh, logovi) se čuvaju u **Bazi podataka**.
- Korisnici mogu pregledati rezultate putem Web interfejsa ili ih upititi putem REST API-ja.
- Na osnovu ishoda posla, **Obaveštenja** se mogu slati kako bi obavestila korisnike ili spoljne sisteme o statusu posla. Obaveštenja mogu biti e-mailovi, Slack poruke, webhook-ovi, itd.
6. **Integracija sa spoljnim sistemima**:
- **Inventari** se mogu dinamički pribavljati iz spoljnih sistema, omogućavajući AWX/Tower-u da povuče hostove iz izvora kao što su AWS, Azure, VMware i drugi.
- **Projekti** (playbook-ovi) mogu se preuzeti iz sistema za kontrolu verzija, osiguravajući korišćenje ažuriranih playbook-ova tokom izvršenja posla.
- **Zakazivači i povratni pozivi** mogu se koristiti za integraciju sa drugim sistemima ili alatima, omogućavajući AWX/Tower-u da reaguje na spoljne okidače ili izvršava poslove u unapred određenim vremenima.

### Kreiranje AWX laboratorije za testiranje

[**Prateći dokumentaciju**](https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md) moguće je koristiti docker-compose za pokretanje 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

### Podržane uloge

Najprivilegovanija uloga se zove **Sistem Administrator**. Svako ko ima ovu ulogu može **modifikovati bilo šta**.

Iz **white box security** pregleda, potrebna vam je **Sistem Auditor uloga**, koja omogućava **pregled svih podataka sistema** ali ne može da pravi nikakve promene. Druga opcija bi bila da dobijete **Organizacija Auditor ulogu**, ali bi bilo bolje da dobijete onu prvu.

<details>

<summary>Proširite ovo da dobijete detaljan opis dostupnih uloga</summary>

1. **Sistem Administrator**:
- Ovo je superuser uloga sa dozvolama za pristup i modifikaciju bilo kog resursa u sistemu.
- Mogu upravljati svim organizacijama, timovima, projektima, inventarima, šablonima poslova, itd.
2. **Sistem Auditor**:
- Korisnici sa ovom ulogom mogu da vide sve podatke sistema, ali ne mogu da prave nikakve promene.
- Ova uloga je dizajnirana za usklađenost i nadzor.
3. **Uloge Organizacije**:
- **Admin**: Potpuna kontrola nad resursima organizacije.
- **Auditor**: Pristup samo za pregled resursa organizacije.
- **Član**: Osnovno članstvo u organizaciji bez specifičnih dozvola.
- **Izvrši**: Može pokretati šablone poslova unutar organizacije.
- **Čitaj**: Može pregledati resurse organizacije.
4. **Uloge Projekta**:
- **Admin**: Može upravljati i modifikovati projekat.
- **Koristi**: Može koristiti projekat u šablonu posla.
- **Ažuriraj**: Može ažurirati projekat koristeći SCM (kontrola verzija).
5. **Uloge Inventara**:
- **Admin**: Može upravljati i modifikovati inventar.
- **Ad Hoc**: Može pokretati ad hoc komande na inventaru.
- **Ažuriraj**: Može ažurirati izvor inventara.
- **Koristi**: Može koristiti inventar u šablonu posla.
- **Čitaj**: Pristup samo za pregled.
6. **Uloge Šablona Posla**:
- **Admin**: Može upravljati i modifikovati šablon posla.
- **Izvrši**: Može pokrenuti posao.
- **Čitaj**: Pristup samo za pregled.
7. **Uloge Akreditiva**:
- **Admin**: Može upravljati i modifikovati akreditive.
- **Koristi**: Može koristiti akreditive u šablonima poslova ili drugim relevantnim resursima.
- **Čitaj**: Pristup samo za pregled.
8. **Uloge Tima**:
- **Član**: Deo tima, ali bez specifičnih dozvola.
- **Admin**: Može upravljati članovima tima i povezanim resursima.
9. **Uloge Radnog Tok**:
- **Admin**: Može upravljati i modifikovati radni tok.
- **Izvrši**: Može pokrenuti radni tok.
- **Čitaj**: Pristup samo za pregled.

</details>

{{#include ../banners/hacktricks-training.md}}
