Ansible Tower / AWX / Automation controller Security

Unterstützen Sie HackTricks

Grundinformationen

Ansible Tower oder seine Open-Source-Version AWX ist auch bekannt als Ansible-Benutzeroberfläche, Dashboard und REST-API. Mit rollenbasiertem Zugriffskontrolle, Jobplanung und grafischer Inventarverwaltung können Sie Ihre Ansible-Infrastruktur über eine moderne Benutzeroberfläche verwalten. Die REST-API und die Befehlszeilenschnittstelle von Tower machen es einfach, sie in aktuelle Tools und Workflows zu integrieren.

Automation Controller ist eine neuere Version von Ansible Tower mit mehr Funktionen.

Unterschiede

Laut diesem sind die Hauptunterschiede zwischen Ansible Tower und AWX die erhaltene Unterstützung, und Ansible Tower hat zusätzliche Funktionen wie rollenbasierte Zugriffskontrolle, Unterstützung für benutzerdefinierte APIs und benutzerdefinierte Workflows.

Tech-Stack

  • Weboberfläche: Dies ist die grafische Oberfläche, über die Benutzer Inventare, Anmeldeinformationen, Vorlagen und Jobs verwalten können. Sie ist so gestaltet, dass sie intuitiv ist und Visualisierungen bietet, um den Zustand und die Ergebnisse Ihrer Automatisierungsjobs zu verstehen.

  • REST-API: Alles, was Sie in der Weboberfläche tun können, können Sie auch über die REST-API tun. Das bedeutet, dass Sie AWX/Tower mit anderen Systemen integrieren oder Aktionen skripten können, die Sie normalerweise in der Benutzeroberfläche ausführen würden.

  • Datenbank: AWX/Tower verwendet eine Datenbank (typischerweise PostgreSQL), um seine Konfiguration, Jobresultate und andere notwendige Betriebsdaten zu speichern.

  • RabbitMQ: Dies ist das Messaging-System, das von AWX/Tower verwendet wird, um zwischen den verschiedenen Komponenten zu kommunizieren, insbesondere zwischen dem Webdienst und den Aufgabenläufern.

  • Redis: Redis dient als Cache und Backend für die Aufgabenwarteschlange.

Logische Komponenten

  • Inventare: Ein Inventar ist eine Sammlung von Hosts (oder Knoten), gegen die Jobs (Ansible-Playbooks) ausgeführt werden können. AWX/Tower ermöglicht es Ihnen, Ihre Inventare zu definieren und zu gruppieren und unterstützt auch dynamische Inventare, die Hostlisten aus anderen Systemen wie AWS, Azure usw. abrufen können.

  • Projekte: Ein Projekt ist im Wesentlichen eine Sammlung von Ansible-Playbooks, die aus einem Versionskontrollsystem (wie Git) stammen, um die neuesten Playbooks bei Bedarf abzurufen.

  • Vorlagen: Jobvorlagen definieren, wie ein bestimmtes Playbook ausgeführt wird, indem sie das Inventar, die Anmeldeinformationen und andere Parameter für den Job angeben.

  • Anmeldeinformationen: AWX/Tower bietet eine sichere Möglichkeit, Geheimnisse wie SSH-Schlüssel, Passwörter und API-Tokens zu verwalten und zu speichern. Diese Anmeldeinformationen können mit Jobvorlagen verknüpft werden, sodass Playbooks beim Ausführen den erforderlichen Zugriff haben.

  • Aufgaben-Engine: Hier passiert die Magie. Die Aufgaben-Engine basiert auf Ansible und ist verantwortlich für das Ausführen der Playbooks. Jobs werden an die Aufgaben-Engine übergeben, die dann die Ansible-Playbooks gegen das festgelegte Inventar mit den angegebenen Anmeldeinformationen ausführt.

  • Planer und Rückrufe: Dies sind erweiterte Funktionen in AWX/Tower, die es ermöglichen, Jobs zu planen, die zu bestimmten Zeiten ausgeführt oder durch externe Ereignisse ausgelöst werden.

  • Benachrichtigungen: AWX/Tower kann Benachrichtigungen basierend auf dem Erfolg oder Misserfolg von Jobs senden. Es unterstützt verschiedene Arten von Benachrichtigungen wie E-Mails, Slack-Nachrichten, Webhooks usw.

  • Ansible-Playbooks: Ansible-Playbooks sind Konfigurations-, Bereitstellungs- und Orchestrierungstools. Sie beschreiben den gewünschten Zustand von Systemen auf automatisierte, wiederholbare Weise. In YAML geschrieben, verwenden Playbooks Ansible's deklarative Automatisierungssprache, um Konfigurationen, Aufgaben und Schritte zu beschreiben, die ausgeführt werden müssen.

Jobausführungsfluss

  1. Benutzerinteraktion: Ein Benutzer kann mit AWX/Tower entweder über die Weboberfläche oder die REST-API interagieren. Diese bieten Front-End-Zugriff auf alle von AWX/Tower angebotenen Funktionen.

  2. Jobinitiierung:

  • Der Benutzer initiiert über die Weboberfläche oder API einen Job basierend auf einer Jobvorlage.

  • Die Jobvorlage enthält Verweise auf das Inventar, das Projekt (das das Playbook enthält) und die Anmeldeinformationen.

  • Bei der Jobinitiierung wird eine Anfrage an das AWX/Tower-Backend gesendet, um den Job zur Ausführung in die Warteschlange zu stellen.

  1. Jobwarteschlange:

  • RabbitMQ verwaltet die Nachrichtenübertragung zwischen der Webkomponente und den Aufgabenläufern. Sobald ein Job initiiert wird, wird eine Nachricht an die Aufgaben-Engine über RabbitMQ gesendet.

  • Redis fungiert als Backend für die Aufgabenwarteschlange und verwaltet die in der Warteschlange stehenden Jobs, die auf die Ausführung warten.

  1. Jobausführung:

  • Die Aufgaben-Engine nimmt den in der Warteschlange stehenden Job auf. Sie ruft die erforderlichen Informationen aus der Datenbank über das mit dem Job verbundene Playbook, Inventar und die Anmeldeinformationen ab.

  • Mit dem abgerufenen Ansible-Playbook aus dem zugehörigen Projekt führt die Aufgaben-Engine das Playbook gegen die angegebenen Inventar-Knoten mit den bereitgestellten Anmeldeinformationen aus.

  • Während das Playbook ausgeführt wird, werden die Ausführungsprotokolle (Logs, Fakten usw.) erfasst und in der Datenbank gespeichert.

  1. Jobergebnisse:

  • Sobald das Playbook die Ausführung abgeschlossen hat, werden die Ergebnisse (Erfolg, Misserfolg, Protokolle) in der Datenbank gespeichert.

  • Benutzer können die Ergebnisse dann über die Weboberfläche einsehen oder sie über die REST-API abfragen.

  • Basierend auf den Jobergebnissen können Benachrichtigungen gesendet werden, um Benutzer oder externe Systeme über den Status des Jobs zu informieren. Benachrichtigungen können E-Mails, Slack-Nachrichten, Webhooks usw. sein.

  1. Integration mit externen Systemen:

  • Inventare können dynamisch aus externen Systemen bezogen werden, sodass AWX/Tower Hosts aus Quellen wie AWS, Azure, VMware und mehr abrufen kann.

  • Projekte (Playbooks) können aus Versionskontrollsystemen abgerufen werden, um sicherzustellen, dass während der Jobausführung aktuelle Playbooks verwendet werden.

  • Planer und Rückrufe können verwendet werden, um mit anderen Systemen oder Tools zu integrieren, sodass AWX/Tower auf externe Auslöser reagiert oder Jobs zu festgelegten Zeiten ausführt.

AWX-Laborerstellung für Tests

Den Dokumenten folgen ist es möglich, docker-compose zu verwenden, um AWX auszuführen:

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

Unterstützte Rollen

Die privilegierteste Rolle wird als Systemadministrator bezeichnet. Jeder mit dieser Rolle kann alles ändern.

Für eine White-Box-Sicherheits-Überprüfung benötigen Sie die Systemauditorrolle, die es ermöglicht, alle Systemdaten anzuzeigen, aber keine Änderungen vorzunehmen. Eine andere Option wäre, die Organisationsauditorrolle zu erhalten, aber es wäre besser, die andere zu bekommen.

Erweitern Sie dies, um eine detaillierte Beschreibung der verfügbaren Rollen zu erhalten
  1. Systemadministrator:

  • Dies ist die Superuser-Rolle mit Berechtigungen zum Zugriff auf und zur Änderung aller Ressourcen im System.

  • Sie können alle Organisationen, Teams, Projekte, Inventare, Jobvorlagen usw. verwalten.

  1. Systemauditor:

  • Benutzer mit dieser Rolle können alle Systemdaten anzeigen, aber keine Änderungen vornehmen.

  • Diese Rolle ist für Compliance und Aufsicht konzipiert.

  1. Organisationsrollen:

  • Admin: Vollständige Kontrolle über die Ressourcen der Organisation.

  • Auditor: Nur Lesezugriff auf die Ressourcen der Organisation.

  • Mitglied: Grundlegende Mitgliedschaft in einer Organisation ohne spezifische Berechtigungen.

  • Ausführen: Kann Jobvorlagen innerhalb der Organisation ausführen.

  • Lesen: Kann die Ressourcen der Organisation anzeigen.

  1. Projektrollen:

  • Admin: Kann das Projekt verwalten und ändern.

  • Verwenden: Kann das Projekt in einer Jobvorlage verwenden.

  • Aktualisieren: Kann das Projekt mit SCM (Source Control) aktualisieren.

  1. Inventarrollen:

  • Admin: Kann das Inventar verwalten und ändern.

  • Ad Hoc: Kann Ad-hoc-Befehle im Inventar ausführen.

  • Aktualisieren: Kann die Inventarquelle aktualisieren.

  • Verwenden: Kann das Inventar in einer Jobvorlage verwenden.

  • Lesen: Nur Lesezugriff.

  1. Jobvorlagenrollen:

  • Admin: Kann die Jobvorlage verwalten und ändern.

  • Ausführen: Kann den Job ausführen.

  • Lesen: Nur Lesezugriff.

  1. Berechtigungsrollen:

  • Admin: Kann die Berechtigungen verwalten und ändern.

  • Verwenden: Kann die Berechtigungen in Jobvorlagen oder anderen relevanten Ressourcen verwenden.

  • Lesen: Nur Lesezugriff.

  1. Teamrollen:

  • Mitglied: Teil des Teams, aber ohne spezifische Berechtigungen.

  • Admin: Kann die Mitglieder des Teams und die zugehörigen Ressourcen verwalten.

  1. Workflow-Rollen:

  • Admin: Kann den Workflow verwalten und ändern.

  • Ausführen: Kann den Workflow ausführen.

  • Lesen: Nur Lesezugriff.

Unterstützen Sie HackTricks

Last updated