Ansible Tower / AWX / Automation controller Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ansible Tower ou sua versão de código aberto AWX também é conhecido como interface de usuário, painel e API REST do Ansible. Com controle de acesso baseado em funções, agendamento de tarefas e gerenciamento gráfico de inventário, você pode gerenciar sua infraestrutura Ansible a partir de uma interface moderna. A API REST do Tower e a interface de linha de comando facilitam a integração com ferramentas e fluxos de trabalho atuais.
Automation Controller é uma versão mais nova do Ansible Tower com mais capacidades.
De acordo com isso, as principais diferenças entre Ansible Tower e AWX são o suporte recebido e o Ansible Tower possui recursos adicionais, como controle de acesso baseado em funções, suporte para APIs personalizadas e fluxos de trabalho definidos pelo usuário.
Web Interface: Esta é a interface gráfica onde os usuários podem gerenciar inventários, credenciais, modelos e tarefas. É projetada para ser intuitiva e fornece visualizações para ajudar a entender o estado e os resultados de suas tarefas de automação.
REST API: Tudo o que você pode fazer na interface da web, você também pode fazer via API REST. Isso significa que você pode integrar AWX/Tower com outros sistemas ou scriptar ações que normalmente você realizaria na interface.
Database: AWX/Tower usa um banco de dados (tipicamente PostgreSQL) para armazenar sua configuração, resultados de tarefas e outros dados operacionais necessários.
RabbitMQ: Este é o sistema de mensagens usado pelo AWX/Tower para se comunicar entre os diferentes componentes, especialmente entre o serviço web e os executores de tarefas.
Redis: Redis serve como um cache e um backend para a fila de tarefas.
Inventories: Um inventário é uma coleção de hosts (ou nós) contra os quais tarefas (playbooks do Ansible) podem ser executadas. AWX/Tower permite que você defina e agrupe seus inventários e também suporta inventários dinâmicos que podem buscar listas de hosts de outros sistemas como AWS, Azure, etc.
Projects: Um projeto é essencialmente uma coleção de playbooks do Ansible provenientes de um sistema de controle de versão (como Git) para puxar os playbooks mais recentes quando necessário.
Templates: Modelos de tarefas definem como um determinado playbook será executado, especificando o inventário, credenciais e outros parâmetros para a tarefa.
Credentials: AWX/Tower fornece uma maneira segura de gerenciar e armazenar segredos, como chaves SSH, senhas e tokens de API. Essas credenciais podem ser associadas a modelos de tarefas para que os playbooks tenham o acesso necessário quando forem executados.
Task Engine: É aqui que a mágica acontece. O mecanismo de tarefas é construído sobre o Ansible e é responsável por executar os playbooks. As tarefas são despachadas para o mecanismo de tarefas, que então executa os playbooks do Ansible contra o inventário designado usando as credenciais especificadas.
Schedulers and Callbacks: Esses são recursos avançados no AWX/Tower que permitem que tarefas sejam agendadas para serem executadas em horários específicos ou acionadas por eventos externos.
Notifications: AWX/Tower pode enviar notificações com base no sucesso ou falha das tarefas. Ele suporta vários meios de notificações, como e-mails, mensagens do Slack, webhooks, etc.
Ansible Playbooks: Os playbooks do Ansible são ferramentas de configuração, implantação e orquestração. Eles descrevem o estado desejado dos sistemas de uma maneira automatizada e repetível. Escritos em YAML, os playbooks usam a linguagem de automação declarativa do Ansible para descrever configurações, tarefas e etapas que precisam ser executadas.
User Interaction: Um usuário pode interagir com AWX/Tower através da Web Interface ou da REST API. Essas fornecem acesso front-end a todas as funcionalidades oferecidas pelo AWX/Tower.
Job Initiation:
O usuário, via a Web Interface ou API, inicia uma tarefa com base em um Modelo de Tarefa.
O Modelo de Tarefa inclui referências ao Inventário, Projeto (contendo o playbook) e Credenciais.
Após a iniciação da tarefa, uma solicitação é enviada ao backend do AWX/Tower para colocar a tarefa na fila para execução.
Job Queuing:
RabbitMQ gerencia a comunicação entre o componente web e os executores de tarefas. Uma vez que uma tarefa é iniciada, uma mensagem é despachada para o mecanismo de tarefas usando RabbitMQ.
Redis atua como o backend para a fila de tarefas, gerenciando tarefas enfileiradas aguardando execução.
Job Execution:
O Task Engine pega a tarefa enfileirada. Ele recupera as informações necessárias do Banco de Dados sobre o playbook associado à tarefa, inventário e credenciais.
Usando o playbook do Ansible recuperado do Projeto associado, o Task Engine executa o playbook contra os nós do Inventário especificado usando as Credenciais fornecidas.
À medida que o playbook é executado, sua saída de execução (logs, fatos, etc.) é capturada e armazenada no Banco de Dados.
Job Results:
Uma vez que o playbook termina de ser executado, os resultados (sucesso, falha, logs) são salvos no Banco de Dados.
Os usuários podem então visualizar os resultados através da Web Interface ou consultá-los via API REST.
Com base nos resultados das tarefas, Notificações podem ser enviadas para informar os usuários ou sistemas externos sobre o status da tarefa. As notificações podem ser e-mails, mensagens do Slack, webhooks, etc.
External Systems Integration:
Inventories podem ser dinamicamente obtidos de sistemas externos, permitindo que o AWX/Tower puxe hosts de fontes como AWS, Azure, VMware e mais.
Projects (playbooks) podem ser buscados de sistemas de controle de versão, garantindo o uso de playbooks atualizados durante a execução da tarefa.
Schedulers and Callbacks podem ser usados para integrar com outros sistemas ou ferramentas, fazendo com que o AWX/Tower reaja a gatilhos externos ou execute tarefas em horários predeterminados.
Seguindo a documentação é possível usar docker-compose para executar AWX:
A função mais privilegiada é chamada de Administrador do Sistema. Qualquer pessoa com essa função pode modificar qualquer coisa.
De uma revisão de segurança de caixa branca, você precisaria da função de Auditor do Sistema, que permite visualizar todos os dados do sistema, mas não pode fazer alterações. Outra opção seria obter a função de Auditor da Organização, mas seria melhor obter a outra.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)