Ansible Tower / AWX / Automation controller Security
Información Básica
Ansible Tower o su versión de código abierto AWX también se conoce como la interfaz de usuario, panel de control y API REST de Ansible. Con control de acceso basado en roles, programación de trabajos y gestión gráfica de inventarios, puedes administrar tu infraestructura de Ansible desde una interfaz moderna. La API REST y la interfaz de línea de comandos de Tower facilitan su integración en herramientas y flujos de trabajo actuales.
Automation Controller es una versión más reciente de Ansible Tower con más capacidades.
Diferencias
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.
Pila Tecnológica
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 comprender el estado y los resultados de tus trabajos de automatización.
API REST: Todo lo que se puede hacer en la interfaz web, también se puede hacer a través de la API REST. Esto significa que puedes integrar AWX/Tower con otros sistemas o automatizar 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.
Componentes Lógicos
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 admite 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 obtenidos de un sistema de control de versiones (como Git) para extraer los playbooks más recientes cuando sea necesario.
Plantillas: Las plantillas de trabajo definen cómo se ejecutará un playbook en particular, especificando el inventario, las 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 ejecutan.
Motor de Tareas: Aquí es donde sucede la magia. El motor de tareas está construido en 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.
Planificadores y Devoluciones de Llamada: 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. Admite 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 forma automatizada y repetible. Escritos en YAML, los playbooks utilizan el lenguaje de automatización declarativo de Ansible para describir configuraciones, tareas y pasos que deben ejecutarse.
Flujo de Ejecución de Trabajos
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 la 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 encolar el trabajo para su ejecución.
Cola de Trabajos:
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 backend para la cola de tareas, gestionando trabajos en cola esperando ser ejecutados.
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, el inventario y las credenciales.
Utilizando 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 (logs, 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, logs) 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:
Los Inventarios pueden obtenerse dinámicamente de sistemas externos, lo que permite a AWX/Tower extraer hosts de fuentes como AWS, Azure, VMware, y más.
Los Proyectos (playbooks) pueden obtenerse de sistemas de control de versiones, asegurando el uso de playbooks actualizados durante la ejecución de trabajos.
Los Planificadores y Devoluciones de Llamada se pueden utilizar para integrarse con otros sistemas o herramientas, haciendo que AWX/Tower reaccione a disparadores externos o ejecute trabajos en momentos predeterminados.
Creación de laboratorio AWX para pruebas
Siguiendo la documentación es posible utilizar docker-compose para ejecutar AWX:
RBAC
Roles compatibles
El rol más privilegiado se llama Administrador del Sistema. Cualquier persona 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 realizar cambios. Otra opción sería obtener el rol de Auditor de la Organización, pero sería mejor obtener el otro.
Last updated