我们希望听到您的意见!帮助我们洞察 Ansible 生态系统的现状。
参与 Ansible 项目调查 2024

Ansible 安全自动化资源模块

Ansible 安全自动化资源模块

安全专业人员越来越多地采用自动化来帮助将安全操作统一到结构化的工作流中,这些工作流可以降低运营复杂性、人为错误、响应时间,并可以集成到现有的 SIEM(安全信息和事件管理)或 SOAR(安全编排自动化和响应)平台中。

2019 年 10 月,Ansible 网络自动化团队引入了资源模块的概念。

那么,“资源模块”到底是什么?设备配置的各个部分可以被认为是该设备提供的资源。网络资源模块的范围故意限制为配置单个资源,并且可以作为构建块组合起来以配置复杂的网络服务。

请记住,第一个网络自动化模块要么在目标设备上执行任意命令,要么从文件读取设备配置并部署它。这些模块非常通用,没有提供对某些服务或资源的微调功能。

相比之下,资源模块可以通过避免覆盖各种配置的大型配置文件模板,使网络自动化在生产中自动化多个平台变得更容易且更一致。相反,它们专注于手头的任务,提供可用于描述复杂配置的独立构建块。

相同的原则可以应用于安全领域,我们开始探索 Ansible 安全自动化中的可能性。

安全自动化中的资源模块

在安全自动化中,许多集合已经拥有针对相应目标环境的用例或工作流的更精细的模块。因此,在产品无关资源方面几乎没有标准化或通用抽象。

例如,如果您仔细查看我们的调查丰富博客文章,您会发现,虽然我们使用了一定数量的模块,但这些模块通常非常特定于产品,在通用资源方面没有提供太多功能。

同时,安全自动化确实涵盖了许多可以从资源模块中获得很大价值的任务。无论是通过访问控制列表 (ACL) 或策略授予和拒绝对网络的访问,还是管理 IDPS 系统中的规则或将节点的日志转发到中央 SIEM:所有这些任务通常都在跨多个产品的定义明确的资源上执行,这使得这些任务成为可以从资源模块中获得帮助的理想选择。

用于访问控制列表的安全自动化资源模块

遵循这条思路,我们开始在 Ansible 中引入 ACL 资源模块。ACL 可以在应用于接口或作为全局访问规则时提供第一层安全,因为它们允许或拒绝防火墙中的流量流。

在 ACL 中,访问控制条目 (ACE) 的顺序至关重要,因为根据 ACE 的顺序/次序,设备决定是否允许流量。鉴于此背景,ACL 资源模块提供了与用户手动更改相应设备上的配置时可实现的相同级别的功能。但是,ACL 资源模块具有 Ansible 的优势

  • 使用 Ansible 自动化事物可以加快提高生产力的速度。
  • Ansible 功能强大,用户可以在用户或企业级别自动化各种任务。这有助于编排完整的应用程序生命周期,包括 ACL,并将安全自动化纳入应用程序部署过程和整个技术业务流程。
  • Ansible 采用无代理架构,它使用受管理目标节点的本机通信协议。这避免了在受管理环境中引入和安装新软件和新安全协议的必要性。
  • 最后但并非最不重要的一点是,借助 Ansible 的事实收集,可以以高效的方式收集受管理节点的数据结构并使其可访问。

请注意,新 ACL 资源模块的命名约定使用复数形式而不是单数形式:“acls”而不是“acl”。如果您正在自动化的平台具有这两个名称的模块,则模块的复数形式是对应于资源模块计划的较新的形式。模块的单数形式可能会在将来的版本中被弃用。引入这种区别是为了简化向资源模块的过渡,避免对当前的自动化工作流造成干扰。

示例:Cisco ASA ACL

了解新的 ACL 资源模块的一个好方法是通过示例。为此,让我们看看针对 Cisco 自适应安全设备系列的安全设备的 Cisco ASA 集合。在这个集合中,您会发现一个名为 asa_acls 的模块,它是用于管理 ASA 设备上的命名或编号 ACL 的资源模块。

例如,让我们首先检查当前文档。为此,我们可以使用模块收集现有 ACL 配置的功能

---
- name: Get structured data
  hosts: cisco
  gather_facts: false
  collections:
   - cisco.asa

  tasks:
  - name: Gather facts
    asa_acls:
      state: gathered
      register: gather
  - name: output data
    debug:
      vars: “{{ gather }}”

输出将类似于

- acls:
   - aces:
       - destination:
           address: 192.0.3.0
           netmask: 255.255.255.0
           port_protocol:
                 eq: www
         grant: deny

请注意,以这种方式生成的输出纯粹关注手头的资源 - ACL。这与通用事实收集形成对比,通用事实收集提供了更多数据,因此难以保持概览并随后处理数据。

鉴于手头的配置,让我们假设为了此示例的目的,我们分析收集到的配置,并希望对其进行更改。下一个配置如下

- acls:
  - name: global_access
    acl_type: extended
    aces:
    - grant: deny
      line: 1
      protocol_options:
        tcp: true
      source:
        address: 192.0.4.0
        netmask: 255.255.255.0
        port_protocol:
          eq: telnet
      destination:
        address: 192.0.5.0
        netmask: 255.255.255.0
        port_protocol:
          eq: www

此配置描述了从定义的源到目标的访问被拒绝。请注意,整个定义大多与产品无关,也可以用于其他系统。

鉴于此描述可用作变量 acls,它可以使用 cisco_acls 模块进行部署

---
- name: Replace ACLs device configuration
  hosts: cisco
  gather_facts: false
  collections:
   - cisco.asa

  tasks:
  - name: Replaces device configuration of listed acls
    asa_acls:
      config: “{{ acls }}”
      state: replaced

如您所见,可以将现有的资源描述应用于现有的设备。资源模块允许用户读取现有配置并将该配置转换为结构化的数据模型。这些数据模型可用作基础,以进一步在目标节点上部署已更改的配置。

要点

安全专业人员需要统一其操作工作流。自动化可以提供帮助 - 如果运行它的平台提供了更简单的方法来控制原本相当复杂的结构,则更是如此。提供的 Ansible 安全自动化资源模块是标准化自动化操作的构建块。