Co-authored-by: DerLinkman <derlinkman@gmail.com> Reviewed-on: #1
138 lines
7.2 KiB
Markdown
138 lines
7.2 KiB
Markdown
# Ansible Playbooks
|
||
|
||
Zentrale Ansible-Sammlung für die Bereitstellung, Härtung, Aktualisierung und
|
||
Überwachung von Debian-Hosts. Das Repository enthält eigenständige Rollen,
|
||
zugehörige Playbooks, mehrere Inventories sowie eine Docker-basierte
|
||
Ausführungsumgebung, sodass Playbooks direkt aus einem Container heraus
|
||
gestartet werden können.
|
||
|
||
## Inhaltsübersicht
|
||
|
||
```
|
||
.
|
||
├── ansible.cfg # Globale Ansible-Konfiguration
|
||
├── bootstrap.yml # Top-Level-Playbook für die Ersteinrichtung
|
||
├── execute.sh # Startet die Docker-Ausführungsumgebung
|
||
├── setenv.sh # Umgebungsvariablen für Proxmox (nicht im Repo)
|
||
├── vault.yml # Ansible-Vault-verschlüsselte Secrets
|
||
├── docker/ # Dockerfile & Requirements für die Laufzeit-Umgebung
|
||
├── inventory/ # Inventories mit group_vars
|
||
├── logs/ # Update-Logs (git-ignored)
|
||
├── playbooks/ # Playbooks, die die Rollen einbinden
|
||
└── roles/ # Wiederverwendbare Ansible-Rollen
|
||
```
|
||
|
||
## Voraussetzungen
|
||
|
||
- **Ansible** >= 2.20 (im Docker-Image bereits enthalten)
|
||
- **Ziel-Hosts**: Debian (alle Playbooks prüfen `os_family == "Debian"`)
|
||
- **Ansible-Collections**: `ansible.posix`, `community.general`,
|
||
`community.docker`, `community.zabbix` (siehe `docker/requirements.yml`)
|
||
- **Zugang**: SSH-Zugang als Benutzer `admin` mit hinterlegtem Public Key
|
||
|
||
### Docker-Ausführungsumgebung
|
||
|
||
Damit Playbooks nicht lokal installiert werden müssen, liefert das Repository
|
||
ein fertiges Docker-Image. `execute.sh` erstellt ein IPv6-fähiges Bridge-Netzwerk,
|
||
startet einen interaktiven Container und mountet das Repository nach `/ansible`:
|
||
|
||
```bash
|
||
./execute.sh
|
||
```
|
||
|
||
Im Container stehen Aliase wie `ap` (ansible-playbook), `ag` (ansible-galaxy)
|
||
und `av` (ansible-vault) zur Verfügung. Das Image wird über
|
||
`docker/Dockerfile` gebaut, die benötigten Collections werden beim Build
|
||
automatisch installiert.
|
||
|
||
## Inventories
|
||
|
||
Alle Inventories liegen unter `inventory/`. Pro Inventory existiert eine
|
||
gleichnamige Datei sowie ein Eintrag in `group_vars/`:
|
||
|
||
| Inventory | Datei | group_vars | Beschreibung |
|
||
|------------------|--------------------|------------------------|-------------------------------------------------|
|
||
| DMC12 (Umgebung) | `dmc12.yml` | `debian.yml` | Debian-Hosts & Proxmox-Knoten |
|
||
| Home | `home.yml` | `home.yml` | Heimisches Netzwerk (10.13.37.0/24) |
|
||
| External | `external.yml` | `external.yml` | Externe Hosts (IPv6) |
|
||
|
||
Die `group_vars` definieren standortspezifische Werte wie Zabbix-Server,
|
||
Spiegelserver und autorisierte SSH-Keys.
|
||
|
||
## Playbooks
|
||
|
||
| Playbook | Rolle(n) | Zweck |
|
||
|---------------------------------------|-----------------------------------|--------------------------------------------------------|
|
||
| `bootstrap.yml` | bootstrap | Vollständige Ersteinrichtung eines Debian-Hosts |
|
||
| `playbooks/docker.yml` | docker | Docker Engine installieren |
|
||
| `playbooks/monitoring.yml` | monitoring | Zabbix Agent 2 installieren & registrieren |
|
||
| `playbooks/os-updates-deb.yml` | os-updates, healthcheck | Pakete aktualisieren + Healthcheck |
|
||
| `playbooks/upgrade-hawser.yml` | hawser | Hawser-Stack aktualisieren |
|
||
| `playbooks/hardening/manage-ssh-keys.yml` | manage-ssh-keys | SSH-Schlüssel hartieren |
|
||
|
||
### Aufrufbeispiele
|
||
|
||
```bash
|
||
# Ersteinrichtung aller Hosts im DMC12-Inventory
|
||
ansible-playbook -i inventory/dmc12.yml bootstrap.yml
|
||
|
||
# Nur Docker auf einem einzelnen Host installieren
|
||
ansible-playbook -i inventory/home.yml playbooks/docker.yml -l rp
|
||
|
||
# OS-Updates inkl. Healthcheck
|
||
ansible-playbook -i inventory/dmc12.yml playbooks/os-updates-deb.yml
|
||
|
||
# Hawser aktualisieren
|
||
ansible-playbook -i inventory/dmc12.yml playbooks/upgrade-hawser.yml
|
||
|
||
# SSH-Keys härtene
|
||
ansible-playbook -i inventory/dmc12.yml playbooks/hardening/manage-ssh-keys.yml
|
||
```
|
||
|
||
## Rollen
|
||
|
||
| Rolle | Kurzbeschreibung | Dokumentation |
|
||
|---------------------|-----------------------------------------------------------------------------|-------------------------------------|
|
||
| `bootstrap` | Ersteinrichtung: Pakete, Admin-User, SSH, MOTD, sysctl, Docker, Monitoring | [roles/bootstrap/README.md](roles/bootstrap/README.md) |
|
||
| `docker` | Installation der Docker Engine über das offizielle Repository | [roles/docker/README.md](roles/docker/README.md) |
|
||
| `hawser` | Aktualisierung des Hawser Docker-Compose-Stacks | [roles/hawser/README.md](roles/hawser/README.md) |
|
||
| `healthcheck` | Quality-Gate: prüft laufende Container nach Updates | [roles/healthcheck/README.md](roles/healthcheck/README.md) |
|
||
| `manage-ssh-keys` | Verwaltung erwünschter/unerwünschter SSH-Keys (Hardening) | [roles/manage-ssh-keys/README.md](roles/manage-ssh-keys/README.md) |
|
||
| `monitoring` | Zabbix Agent 2: Installation, TLS-PSK, Docker-Plugin, API-Registrierung | [roles/monitoring/README.md](roles/monitoring/README.md) |
|
||
| `os-updates` | Debian-Paketaktualisierung mit Spiegel-Wechsel, Reboot & Logging | [roles/os-updates/README.md](roles/os-updates/README.md) |
|
||
|
||
## Secrets & Vault
|
||
|
||
Sensible Werte (z. B. `monitoring_zabbix_api_password`, `admin_password`)
|
||
liegen verschlüsselt in `vault.yml`. Zum Entschlüsseln wird eine Vault-Passwort
|
||
benötigt, die in `.vault_pass` hinterlegt ist (git-ignored). Beim Aufruf muss
|
||
Ansible die Vault-Passwort-Datei kennen:
|
||
|
||
```bash
|
||
ansible-playbook -i inventory/dmc12.yml --vault-password-file .vault_pass bootstrap.yml
|
||
```
|
||
|
||
> **Hinweis:** Die Datei `setenv.sh` enthält Zugangsdaten für Proxmox und ist
|
||
> bewusst nicht für eine Veröffentlichung vorgesehen. `.vault_pass` und
|
||
> `setenv.sh` stehen in `.gitignore`.
|
||
|
||
## Logging
|
||
|
||
Die Rollen `os-updates` und `healthcheck` schreiben pro Host ein Update-Log
|
||
unter `logs/<inventory>/<hostname>/update.log`. Das Verzeichnis `logs/` ist
|
||
git-ignored und dient als lokales Audit-Trail.
|
||
|
||
## Konfiguration
|
||
|
||
`ansible.cfg` deaktiviert Host-Key-Checking und legt `./roles` als
|
||
Rollen-Pfad fest. SSH-Verbindungen verwenden
|
||
`StrictHostKeyChecking=no` sowie `/dev/null` als KnownHosts-Datei, was die
|
||
Ersteinrichtung neuer Hosts erleichtert – in produktiven Umgebungen
|
||
entsprechend restriktiver konfigurieren.
|
||
|
||
## Beitragen
|
||
|
||
1. Änderungen lokal testen – idealerweise über `./execute.sh` im Container.
|
||
2. Variablen in `defaults/main.yml` der jeweiligen Rolle pflegen und in der
|
||
Rollen-README dokumentieren.
|
||
3. Keine Secrets unverschlüsselt committen (Vault nutzen). |