Ansible Tower / AWX / Automation controller Security
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ansible Tower o su versión de código abierto AWX también se conoce como la interfaz de usuario, el panel de control y la API REST de Ansible. Con control de acceso basado en roles, programación de trabajos y gestión gráfica de inventarios, puedes gestionar tu infraestructura de Ansible desde una interfaz moderna. La API REST de Tower y la interfaz de línea de comandos facilitan su integración en herramientas y flujos de trabajo actuales.
El Controlador de Automatización es una versión más nueva de Ansible Tower con más capacidades.
Según esto, las principales diferencias entre Ansible Tower y AWX son el soporte recibido y que Ansible Tower tiene características adicionales como control de acceso basado en roles, soporte para APIs personalizadas y flujos de trabajo definidos por el usuario.
Interfaz Web: Esta es la interfaz gráfica donde los usuarios pueden gestionar inventarios, credenciales, plantillas y trabajos. Está diseñada para ser intuitiva y proporciona visualizaciones para ayudar a entender el estado y los resultados de tus trabajos de automatización.
API REST: Todo lo que puedes hacer en la interfaz web, también puedes hacerlo a través de la API REST. Esto significa que puedes integrar AWX/Tower con otros sistemas o scriptar acciones que normalmente realizarías en la interfaz.
Base de Datos: AWX/Tower utiliza una base de datos (típicamente PostgreSQL) para almacenar su configuración, resultados de trabajos y otros datos operativos necesarios.
RabbitMQ: Este es el sistema de mensajería utilizado por AWX/Tower para comunicarse entre los diferentes componentes, especialmente entre el servicio web y los ejecutores de tareas.
Redis: Redis sirve como caché y backend para la cola de tareas.
Inventarios: Un inventario es una colección de hosts (o nodos) contra los cuales se pueden ejecutar trabajos (playbooks de Ansible). AWX/Tower te permite definir y agrupar tus inventarios y también soporta inventarios dinámicos que pueden obtener listas de hosts de otros sistemas como AWS, Azure, etc.
Proyectos: Un proyecto es esencialmente una colección de playbooks de Ansible provenientes de un sistema de control de versiones (como Git) para obtener los últimos playbooks cuando sea necesario.
Plantillas: Las plantillas de trabajo definen cómo se ejecutará un playbook en particular, especificando el inventario, credenciales y otros parámetros para el trabajo.
Credenciales: AWX/Tower proporciona una forma segura de gestionar y almacenar secretos, como claves SSH, contraseñas y tokens de API. Estas credenciales pueden asociarse con plantillas de trabajo para que los playbooks tengan el acceso necesario cuando se ejecuten.
Motor de Tareas: Aquí es donde ocurre la magia. El motor de tareas está construido sobre Ansible y es responsable de ejecutar los playbooks. Los trabajos se envían al motor de tareas, que luego ejecuta los playbooks de Ansible contra el inventario designado utilizando las credenciales especificadas.
Programadores y Callbacks: Estas son características avanzadas en AWX/Tower que permiten programar trabajos para que se ejecuten en momentos específicos o se activen por eventos externos.
Notificaciones: AWX/Tower puede enviar notificaciones basadas en el éxito o fracaso de los trabajos. Soporta varios medios de notificación como correos electrónicos, mensajes de Slack, webhooks, etc.
Playbooks de Ansible: Los playbooks de Ansible son herramientas de configuración, implementación y orquestación. Describen el estado deseado de los sistemas de manera automatizada y repetible. Escritos en YAML, los playbooks utilizan el lenguaje de automatización declarativa de Ansible para describir configuraciones, tareas y pasos que deben ejecutarse.
Interacción del Usuario: Un usuario puede interactuar con AWX/Tower a través de la Interfaz Web o la API REST. Estas proporcionan acceso frontal a todas las funcionalidades ofrecidas por AWX/Tower.
Inicio del Trabajo:
El usuario, a través de la Interfaz Web o API, inicia un trabajo basado en una Plantilla de Trabajo.
La Plantilla de Trabajo incluye referencias al Inventario, Proyecto (que contiene el playbook) y Credenciales.
Al iniciar el trabajo, se envía una solicitud al backend de AWX/Tower para poner el trabajo en cola para su ejecución.
Colocación en Cola del Trabajo:
RabbitMQ maneja la mensajería entre el componente web y los ejecutores de tareas. Una vez que se inicia un trabajo, se envía un mensaje al motor de tareas utilizando RabbitMQ.
Redis actúa como el backend para la cola de tareas, gestionando los trabajos en cola que esperan ejecución.
Ejecución del Trabajo:
El Motor de Tareas recoge el trabajo en cola. Recupera la información necesaria de la Base de Datos sobre el playbook asociado al trabajo, inventario y credenciales.
Usando el playbook de Ansible recuperado del Proyecto asociado, el Motor de Tareas ejecuta el playbook contra los nodos del Inventario especificado utilizando las Credenciales proporcionadas.
A medida que se ejecuta el playbook, su salida de ejecución (registros, hechos, etc.) se captura y almacena en la Base de Datos.
Resultados del Trabajo:
Una vez que el playbook termina de ejecutarse, los resultados (éxito, fracaso, registros) se guardan en la Base de Datos.
Los usuarios pueden ver los resultados a través de la Interfaz Web o consultarlos a través de la API REST.
Según los resultados del trabajo, se pueden enviar Notificaciones para informar a los usuarios o sistemas externos sobre el estado del trabajo. Las notificaciones pueden ser correos electrónicos, mensajes de Slack, webhooks, etc.
Integración con Sistemas Externos:
Inventarios pueden ser obtenidos dinámicamente de sistemas externos, permitiendo que AWX/Tower obtenga hosts de fuentes como AWS, Azure, VMware y más.
Proyectos (playbooks) pueden ser obtenidos de sistemas de control de versiones, asegurando el uso de playbooks actualizados durante la ejecución del trabajo.
Programadores y Callbacks pueden ser utilizados para integrarse con otros sistemas o herramientas, haciendo que AWX/Tower reaccione a disparadores externos o ejecute trabajos en momentos predeterminados.
Siguiendo la documentación es posible usar docker-compose para ejecutar AWX:
El rol más privilegiado se llama Administrador del Sistema. Cualquiera con este rol puede modificar cualquier cosa.
Desde una revisión de seguridad de caja blanca, necesitarías el rol de Auditor del Sistema, que permite ver todos los datos del sistema pero no puede hacer ningún cambio. Otra opción sería obtener el rol de Auditor de la Organización, pero sería mejor obtener el otro.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)