Ansible Tower / AWX / Automation controller Security

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持 HackTricks 的其他方式:

基本信息

Ansible Tower 或其开源版本 AWX 也被称为 Ansible 的用户界面、仪表板和 REST API。具有 基于角色的访问控制、作业调度和图形化清单管理功能,您可以通过现代化的用户界面管理 Ansible 基础架构。Tower 的 REST API 和命令行界面使其简单地集成到当前工具和工作流中。

自动化控制器是 Ansible Tower 的更新版本,具有更多功能。

差异

根据这里,Ansible Tower 和 AWX 的主要区别在于获得的支持以及 Ansible Tower 具有额外功能,如基于角色的访问控制、支持自定义 API 和用户定义的工作流。

技术栈

  • Web 界面:这是用户可以管理清单、凭据、模板和作业的图形界面。它旨在直观,并提供可视化帮助理解自动化作业的状态和结果。

  • REST API:您可以在 Web 界面中执行的所有操作也可以通过 REST API 执行。这意味着您可以将 AWX/Tower 与其他系统集成,或脚本化通常在界面中执行的操作。

  • 数据库:AWX/Tower 使用数据库(通常是 PostgreSQL)来存储其配置、作业结果和其他必要的运行数据。

  • RabbitMQ:这是 AWX/Tower 用于不同组件之间通信的消息系统,特别是 Web 服务和任务运行器之间的通信。

  • Redis:Redis 用作缓存和任务队列的后端。

逻辑组件

  • 清单:清单是针对其上可以运行作业(Ansible playbook)的主机(或节点)的集合。AWX/Tower 允许您定义和分组清单,并支持动态清单,可以从其他系统(如 AWS、Azure 等)获取主机列表。

  • 项目:项目本质上是从版本控制系统(如 Git)中获取的Ansible playbook 集合,以在需要时拉取最新 playbook。

  • 模板:作业模板定义了如何运行特定 playbook,指定了作业的清单凭据和其他参数

  • 凭据:AWX/Tower 提供了一种安全的方式来管理和存储秘密,如 SSH 密钥、密码和 API 令牌。这些凭据可以与作业模板关联,以便 playbooks 在运行时具有必要的访问权限。

  • 任务引擎:这是魔法发生的地方。任务引擎建立在 Ansible 之上,负责运行 playbooks。作业被分派给任务引擎,然后任务引擎使用指定的凭据针对指定的清单运行 Ansible playbook。

  • 调度器和回调:这是 AWX/Tower 中的高级功能,允许安排作业在特定时间运行或由外部事件触发。

  • 通知:AWX/Tower 可以根据作业的成功或失败发送通知。它支持各种通知方式,如电子邮件、Slack 消息、webhooks 等。

  • Ansible Playbooks:Ansible playbook 是配置、部署和编排工具。它们以自动化、可重复的方式描述系统的期望状态。playbook 使用 Ansible 的声明性自动化语言 YAML 来描述需要执行的配置、任务和步骤。

作业执行流程

  1. 用户交互:用户可以通过Web 界面REST API与 AWX/Tower 交互。这些提供了对 AWX/Tower 提供的所有功能的前端访问。

  2. 作业启动

  • 用户通过 Web 界面或 API 基于作业模板启动作业。

  • 作业模板包括对清单项目(包含 playbook)和凭据的引用。

  • 在启动作业时,向 AWX/Tower 后端发送请求以将作业排队执行。

  1. 作业排队

  • RabbitMQ 处理 Web 组件和任务运行器之间的消息传递。一旦作业启动,通过 RabbitMQ 向任务引擎发送消息。

  • Redis 作为任务队列的后端,管理等待执行的排队作业。

  1. 作业执行

  • 任务引擎接收排队作业。它从数据库检索有关作业关联 playbook、清单和凭据的必要信息。

  • 使用从关联项目中检索的 Ansible playbook,任务引擎针对指定的清单节点使用提供的凭据运行 playbook。

  • 随着 playbook 的运行,其执行输出(日志、事实等)被捕获并存储在数据库中。

  1. 作业结果

  • 一旦 playbook 运行完成,结果(成功、失败、日志)将保存在数据库中。

  • 用户可以通过 Web 界面查看结果,或通过 REST API 查询结果。

  • 根据作业结果,可以发送通知以通知用户或外部系统作业的状态。通知可以是电子邮件、Slack 消息、webhooks 等。

  1. 外部系统集成

  • 清单可以从外部系统动态获取,允许 AWX/Tower 从 AWS、Azure、VMware 等来源获取主机。

  • 项目(playbook)可以从版本控制系统获取,确保在作业执行期间使用最新的 playbook。

  • 调度器和回调可用于与其他系统或工具集成,使 AWX/Tower 对外部触发器做出反应或在预定时间运行作业。

用于测试的 AWX 实验室创建

按照文档 可以使用 docker-compose 运行 AWX:

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

Supported roles

最高权限角色称为系统管理员。拥有此角色的用户可以修改任何内容

白盒安全性审查的角度来看,您需要系统审计员角色,允许查看所有系统数据但不能进行任何更改。另一个选择是获取组织审计员角色,但最好选择前者。

展开以获取可用角色的详细描述
  1. 系统管理员:

  • 这是具有权限访问和修改系统中任何资源的超级用户角色。

  • 他们可以管理所有组织、团队、项目、清单、作业模板等。

  1. 系统审计员:

  • 拥有此角色的用户可以查看所有系统数据,但不能进行任何更改。

  • 此角色旨在用于合规性和监督。

  1. 组织角色:

  • 管理员: 对组织资源拥有完全控制权限。

  • 审计员: 只能查看组织资源。

  • 成员: 在组织中拥有基本成员资格,没有特定权限。

  • 执行: 可以在组织内运行作业模板。

  • 读取: 可以查看组织资源。

  1. 项目角色:

  • 管理员: 可以管理和修改项目。

  • 使用: 可以在作业模板中使用项目。

  • 更新: 可以使用源代码管理(SCM)更新项目。

  1. 清单角色:

  • 管理员: 可以管理和修改清单。

  • 即席: 可以在清单上运行即席命令。

  • 更新: 可以更新清单来源。

  • 使用: 可以在作业模板中使用清单。

  • 读取: 只能查看。

  1. 作业模板角色:

  • 管理员: 可以管理和修改作业模板。

  • 执行: 可以运行作业。

  • 读取: 只能查看。

  1. 凭据角色:

  • 管理员: 可以管理和修改凭据。

  • 使用: 可以在作业模板或其他相关资源中使用凭据。

  • 读取: 只能查看。

  1. 团队角色:

  • 成员: 团队成员,但没有特定权限。

  • 管理员: 可以管理团队成员和相关资源。

  1. 工作流角色:

  • 管理员: 可以管理和修改工作流。

  • 执行: 可以运行工作流。

  • 读取: 只能查看。

Last updated