Ansible基础——Ansible安全基线配置(一)

简介: 本系列教程旨在利用Ansible实现服务器与K8S安全基线的一键部署。开篇介绍Ansible工具及其核心概念,包括无代理架构、YAML剧本编写等,并通过实例演示如何快速构建自动化安全配置,助力运维高效、安全地管理基础设施。

引言

大家好,欢迎来到我的 《Ansible 安全自动化:从服务器到K8S的堡垒之路》 系列教程,我是Prism!
在这个系列里,我们的目标是彻底告别繁琐的人工配置,用 Ansible 打造一套固若金汤、一键部署的服务器与K8S安全基线
作为本系列的开篇之作,我们将从什么是Ansible以及如何编写一个简单的Ansible剧本开始
通过本篇文章的学习,您将了解:
1、Ansible是什么工具,使用场景是什么
2、Ansible具有什么样的层次结构(帮助理解Ansible的运作机制)
3、如何快速编写一个简单的Ansible剧本

准备好了吗?发车咯!!!

  1. 是什么

    1. Ansible是自动化工具,可以用来配置管理、应用部署、任务执行等。特点就是简单、无代理、强大
      1. 简单
        1. 使用yaml来编写剧本
      2. 无代理
        1. 不像其他自动化工具,需要在被管理的主机上安装任何客户端或代理程序,它只需要通过SSH协议,就能远程连接到服务器上进行操作,大大降低了部署的复杂性,也减少了安全风险
      3. 强大
        1. 可部署分布式应用、管理云资源
  2. 使用场景

    1. 自动化配置管理

      1. 统一环境
        1. 确保所有服务器环境保持一致,无论是操作系统版本,软件包还是文件配置。这对于保障生产环境的稳定性至关重要
      2. 配置漂移
        1. 当手动管理服务器时,总会因为各种原因导致不同服务器的配置出现差异。Ansible能定期检查并纠正这些差异
    2. 应用部署

      1. 一键部署
        1. 可以编写一个剧本,让它自动完成从代码拉取,依赖安装、服务启动到配置更新的所有步骤,让应用部署变得像按下开关一样简单
      2. 滚动更新
        1. 对于高可用的应用,不能一次性关闭所有服务器。Ansible能帮你实现“滚动更新”,一台一台更新服务器,确保服务不中断,这在云网络环境中尤为重要
    3. 任务执行

      1. 有时候,不需要完整的剧本,只是想在几十台服务器上快速执行一个命令。Ansible的Ad-hoc命令就是为此而生的
        1. 批量重启服务
          1. ansible all -a "sudo systemctl restart nginx”
        2. 批量检查磁盘空间
          1. ansible all -a "df -h"
        3. 批量添加用户
          1. ansible all -a "useradd prism"
    4. 云原生基础设施自动化

      1. 云资源管理
        1. Ansible有专门的模块来管理各种云资源,可以用Ansible剧本将云资源的创建、配置和部署一体化
      2. 混合云管理
        1. 如果同时管理私有云和公有云,Ansible可以作为统一的自动化工具,用一套剧本管理所有环境,不再需要学习各种不同的云API
    5. 信息安全与合规性

      1. 安全加固
        1. 可以编写剧本,自动化执行安全基线配置,比如禁用root远程登录、修改默认端口、配置防火墙规则等,确保所有服务器都符合公司的安全策略
      2. 漏洞修复
        1. 当出现新的安全漏洞时,比如某个软件包需要升级,可以用Ansible批量快速地进行修复,大大缩短响应时间
      3. 合规性审计
        1. 用Ansible定期检查服务器配置,确保它们符合ISO 27001、GDPR等安全标准,并生成审计报告
  3. 层次结构

    1. 控制节点

      1. 运行Ansible命令的机器
      2. 在这里编写剧本,然后通过它来远程控制所有被管理的服务器
    2. 被管理节点

      1. 需要管理和配置的服务器、网络设备等
      2. Ansible通过SSH协议连接到这些节点,执行任务
    3. 剧本(playbook)

      1. 定义了要在哪些主机上执行任务
        1. 一个剧本可以包含多个“剧本”
    4. 模块

      1. Ansible的工具箱,是具体执行任务的单元
        1. apt模块用于在Debian/Ubuntu系统上安装软件,yum模块用于在CentOS/RedHat系统上安装软件,copy模块用于复制文件,service模块用于管理服务
      2. Ansible有自带的几百个模块。而且社区孩子啊不断开发新的模块
    5. 清单

      1. 是一个文件,列出了所有被管理的服务器
      2. 可以对这些服务器进行分组,比如把web服务器分到一组,数据库服务器分到另一组,这样就可在剧本中直接指定对某个组的所有机器进行操作,非常方便
    6. 变量

      1. 可以存储和重复使用数据
      2. 可以为不同的组或主机定义不同的变量,比如数据库的用户名和密码、应用的端口号等
    7. 总结

      1. 控制节点通过SSH连接到被管理节点,使用剧本来定义任务,而剧本则调用各种模块来执行具体的命令,这一切都基于清单来管理主机,并利用变量角色来组织和复用代码
  4. 如何启动第一个Ansible

    1. 安装Ansible
      1. sudo apt update && sudo apt install ansible
      2. pip install ansible
    2. 配置SSH密钥登录
    3. 创建 Inventory
      1. 创建一个名为inventiry.ini的文件
        1. [web_servers] 和 [db_servers]是你自己定义的分组名,你可以根据服务器的用途来命名
        2. [all_servers]是一个方便的集合,包含了所有服务器
          1. 将这里的Ip地址替换成你·自己的被管理节点的Ip地址或域名
    4. 编写第一个剧本”Playbook”
      1. 我们要编写一个最简单的剧本,让它去检查所有的服务器是否能正常连接,并安装一个简单的软件包,比如tree(一个查看目录结构的实用小工具)
        1. 创建一个名为first_playbook.yml文件(yaml一定要使用两个空格进行缩进)
            1. YAML文件的开头
          1. name
            1. 给你的剧本起个名字,方便你是呗它的用途
          2. hosts: all_servers
            1. 告诉Ansible,这个剧本要在清单文件中all_servers组里的所有主机上执行
          3. become: yes
            1. 告诉Ansible在执行任务时,要使用sudo权限
          4. tasks
            1. 任务列表,你的所有具体操作都写在里面
          5. name(在task下)
            1. 给每个任务起名字
          6. ping
            1. 一个内置的模块,用来测试服务器是否可以被连接到,如果ping成功,它会返回pong
          7. ansible.builtin.package
            1. 用来管理软件包
          8. name: tree
            1. 指定要安装的软件包名称
          9. state: present
            1. 确保这个软件包存在于服务器上,如果你想卸载它,可以修改成为state: absent
    5. 运行“剧本”
      1. ansible-playbook -i inventory.ini first_playbook.yml
        1. ansible-playbook
          1. 运行Ansible剧本的命令
        2. -i inventory.ini
          1. 指定你的清单文件
        3. first_playbook.yml
          1. 指定你要运行的剧本文件
  5. 如何验证各台主机的部署是否成功

    1. 使用Ad-hoc命令快速验证(适合临时检查)

      1. 最简单,最快速
        1. which tree
          1. 这是一个Linux命令,用来查找tree命令的安装路径。如果返回了路径,就说明安装成功了
    2. 用专用的“验证”剧本

      1. 对于复杂的部署,仅仅检查一个文件或命令是否存在是不够的。一般会创建一个专门的验证剧本,来检查所有关键的部署状态
        1. 这样做的好处是
          1. 可重复
            1. 可以随时运行这个脚本,来验证环境是否还处于预期状态
          2. 清晰
            1. 将部署和验证分离,逻辑更清晰
          3. 可扩展
            1. 可以轻松地添加更多的验证任务,比如检查端口是否开放,服务是否运行,文件内容是否正确等等
        2. 场景:编写一个verify_playbook.yml,来验证tree是否安装,并且Web服务是否正在运行
          1. check_name: yes
            1. 这个参数告诉Ansible,只检查状态,不做任何更改。如果软件包不存在或服务没启动,它会告诉你chantged,但不会真的去安装或启动它
          2. ansible.builtin.stat
            1. 这个模块用来检查文件或目录的状态,比如是否存在,权限如何等等
          3. register: index_file_status
            1. 这是Ansible的“拍照”功能,它会把stat模块的执行结果保存到一个名为ondex_file_status的变量里
          4. ansible.builtin.assert
            1. 如果that后面的条件不满足(比如文件不存在),它会立即报错并停止剧本的执行,同时显示你自定义的fail_msg
        3. 执行这个脚本
          1. ansible-playbook -i inventory.ini verify_playbook.yml
目录
相关文章
|
3月前
|
存储 调度 KVM
深入浅出KVM虚拟化技术原理——Ansible安全基线配置(一)
本文深入解析KVM虚拟化核心机制,涵盖内核如何调度QEMU进程与KVM模块协同工作、CPU虚拟化扩展(VT-x/AMD-V)的硬件加速原理,以及存储池的管理与优势,助你全面掌握KVM底层运行逻辑。
382 11
|
3月前
|
安全 Ubuntu 应用服务中间件
基于code-server的云端编程环境部署
本文档描述如何在 Ubuntu 主机上部署 code-server(即“网页版 VS Code”),并通过 autossh 将服务反向隧道到跳板机、使用 Nginx 反向代理域名访问、以及使用 certbot 配置 HTTPS。适合在多设备间共享同一开发环境、并解决个人主机动态公网 IP 的访问问题。
843 5
|
3月前
|
缓存 Linux KVM
深入浅出KVM内存管理——Ansible安全基线配置(一)
本文介绍了KVM的内存管理机制设计,用于帮助大家更深入理解KVM的内存管理
301 4
|
3月前
|
监控 安全 Linux
Linux如何部署服务并设置为开机自启
系统ctl命令用于管理Linux服务,包括启动、停止、重启和重载配置等操作。journalctl命令可查看特定服务日志。编写服务文件时需定义[Unit]、[Service]和[Install]部分,通过systemctl管理新服务并设置开机自启。
325 14
|
3月前
|
JSON 网络安全 数据格式
深入浅出Ansible技术原理——Ansible安全基线配置(一)
本系列深入解析Ansible安全自动化,涵盖其无代理、幂等性、声明式三大设计哲学,剖析基于Python的内核原理与SSH通信机制,并详解Inventory、Roles、Handlers、Vault等核心组件与最佳实践,助你从入门到精通,构建高效、安全、可复用的自动化运维体系。
239 7
|
3月前
|
人工智能 自动驾驶 Java
AI时代,拒当“代码缝合师”:用“组合思维”重掌“原材料”的控制权
本文探讨AI时代为何仍需深究技术原理,揭示“拿来主义”背后是大脑“直觉”的省电本能。提出“组合思维”:通过主动思考拆解技术组合逻辑,将“元剧本”喂养直觉,实现从“代码缝合师”到“技术谱曲家”的思维跃迁,真正掌控技术本质。
147 6
|
6月前
|
云安全 人工智能 安全
Ollama漏洞引发的“血案”—自建LLM的安全思考
「云安全技术观察」聚焦云计算时代安全技术前沿与实践,涵盖AI大模型风险、云原生安全体系建设及攻防对抗等内容,提供落地技术参考与前瞻性洞察。
724 0
|
3月前
|
Shell KVM 数据安全/隐私保护
深入浅出Ansible语法——Ansible安全基线配置(一)
本文由Prism撰写,系统讲解Ansible核心语法与实战技巧,涵盖变量、流程控制、错误处理、Roles、模板、Vault加密及常用模块,附丰富示例,助力运维与开发人员快速上手并应用于真实环境。
170 7
|
3月前
|
存储 Shell KVM
手动以及脚本创建KVM虚拟机——Ansible安全基线配置(二)
本教程介绍如何通过手动操作与Shell脚本两种方式创建KVM虚拟机,涵盖环境部署、存储池配置、镜像管理、cloud-init初始化及批量自动化创建。为后续Ansible安全自动化奠定基础,助力实现高效、可复用的服务器基线管控。
308 4