Ansible playbook Vault 加密详解与使用案例

主机规划

添加用户账号

说明:

1、 运维人员使用的登录账号;

2、 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放;

3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。

 # 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
# sudo提权
# 让其它普通用户可以进入该目录查看信息
useradd -u -d /app yun && echo '' | /usr/bin/passwd --stdin yun
echo "yun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod /app/

Ansible 配置清单Inventory

之后文章都是如下主机配置清单

 [yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ cat hosts_key
# 方式1、主机 + 端口 + 密钥
[manageservers]
172.16.1.180: [proxyservers]
172.16.1.18[:]: # 方式2:别名 + 主机 + 端口 + 密码
[webservers]
web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=
web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=
web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=

Ansible Vault 概述

当我们写的 playbook 中涉及敏感信息,如:数据库账号密码;MQ账号密码;主机账号密码。这时为了防止这些敏感信息泄露,就可以使用 vault 进行加密。

 [yun@ansi-manager ~]$ ansible-vault -h
Usage: ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml] Options:
--ask-vault-pass ask for vault password
-h, --help show this help message and exit
--new-vault-id=NEW_VAULT_ID
the new vault identity to use for rekey
--new-vault-password-file=NEW_VAULT_PASSWORD_FILE
new vault password file for rekey
--vault-id=VAULT_IDS the vault identity to use
--vault-password-file=VAULT_PASSWORD_FILES
vault password file
-v, --verbose verbose mode (-vvv for more, -vvvv to enable
connection debugging)
--version show program's version number, config file location,
configured module search path, module location,
executable location and exit See 'ansible-vault <command> --help' for more information on a specific
command.

参数说明

create:创建一个加密文件,在创建时会首先要求输入 Vault 密码,之后才能进入文件中编辑。

decrypt:对 vault 加密的文件进行解密。

edit:对 vault 加密文件进行编辑。

encrypt:对提供的文件,进行 vault 加密。

encrypt_string:对提供的字符串进行 vault 加密。

rekey:对已 vault 加密的文件进行免密更改,需要提供之前的密码。

view:查看已加密的文件,需要提供密码。

Ansible Vault 交互式

创建加密文件

 [yun@ansi-manager object06]$ pwd
/app/ansible_info/object06
[yun@ansi-manager object06]$ ansible-vault create test_vault.yml
New Vault password: # 输入密码
Confirm New Vault password: # 确认密码
---
# vault test
- hosts: proxyservers tasks:
- name: "touch file"
file:
path: /tmp/with_itemstestfile
state: touch [yun@ansi-manager object06]$ cat test_vault.yml # 加密后查看
$ANSIBLE_VAULT;1.1;AES256 6138353833366637383066366662666236666338333237610a303263336234303866623834663361 6262633334353036620a633136313364383536323531373164346436663739663631353166663434

对已加密的文件进行解密

 [yun@ansi-manager object06]$ ansible-vault decrypt test_vault.yml
Vault password:
Decryption successful
[yun@ansi-manager object06]$
[yun@ansi-manager object06]$ cat test_vault.yml # 解密后查看
---
# vault test
- hosts: proxyservers tasks:
- name: "touch file"
file:
path: /tmp/with_itemstestfile
state: touch

对已存在文件进行加密

 [yun@ansi-manager object06]$ ansible-vault encrypt test_vault.yml
New Vault password:
Confirm New Vault password:
Encryption successful
[yun@ansi-manager object06]$ cat test_vault.yml
$ANSIBLE_VAULT;1.1;AES256 3930343836396537343333336432363732343936323937370a363239356233333634303464633539 6334333162616332320a353033323538643566666562646334623630343938646264663561316566

对已加密的文件进行编辑

 [yun@ansi-manager object06]$ ansible-vault edit test_vault.yml
Vault password:
---
# vault test ==
- hosts: proxyservers tasks:
- name: "touch file"
file:
path: /tmp/with_itemstestfile
state: touch

对已加密文件更改密码

 [yun@ansi-manager object06]$ ansible-vault rekey test_vault.yml
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful

对已加密文件进行查看

 [yun@ansi-manager object06]$ ansible-vault view test_vault.yml
Vault password:
---
# vault test ==
- hosts: proxyservers tasks:
- name: "touch file"
file:
path: /tmp/with_itemstestfile
state: touch

对提供的字符串进行加密

 [yun@ansi-manager object06]$ ansible-vault encrypt_string "111 222 333"
New Vault password:
Confirm New Vault password:
!vault |
$ANSIBLE_VAULT;1.1;AES256 6537336166356466666431663037623835643964366137340a336439313066356265666636383430 3034326337303932610a303232643464633239383563393836306565353835666431363132303835 Encryption successful

Ansible Vault 非交互式

创建密码文件

安全使用,记得使用 400 或 600 权限。

 [yun@ansi-manager object06]$ echo "" > vault_pwd
[yun@ansi-manager object06]$ echo "" > vault_pwd2
[yun@ansi-manager object06]$ ll vault_pwd* # 权限
-r-------- yun yun Aug : vault_pwd
-r-------- yun yun Aug : vault_pwd2

创建加密文件

 [yun@ansi-manager object06]$ ansible-vault create test_vault02.yml --vault-password-file=vault_pwd
---
# vault test
[yun@ansi-manager object06]$ cat test_vault02.yml
$ANSIBLE_VAULT;1.1;AES256 6638666536306162366263333037323231386365316238390a383139623435363738663832623533 6131313833383761620a383534363564393836306238666135656137623036386531653931623362

对已加密的文件进行解密

 [yun@ansi-manager object06]$ ansible-vault decrypt test_vault02.yml --vault-password-file=vault_pwd
Decryption successful
[yun@ansi-manager object06]$ cat test_vault02.yml
---
# vault test

对已存在文件进行加密

 [yun@ansi-manager object06]$ ansible-vault encrypt test_vault02.yml --vault-password-file=vault_pwd
Encryption successful
[yun@ansi-manager object06]$
[yun@ansi-manager object06]$ cat test_vault02.yml
$ANSIBLE_VAULT;1.1;AES256 3533393766313339393665386463613831323366623962650a643365653833636663653938613966 3638363937626635390a303962653366353138373139623237356637656230386565663364626438

对已加密的文件进行编辑

 [yun@ansi-manager object06]$ ansible-vault edit test_vault02.yml --vault-password-file=vault_pwd
---
# vault test ##

对已加密文件更改密码

 [yun@ansi-manager object06]$ ansible-vault rekey test_vault02.yml --vault-password-file=vault_pwd --new-vault-password-file=vault_pwd2
Rekey successful

对已加密文件进行查看

 [yun@ansi-manager object06]$ ansible-vault view test_vault02.yml --vault-password-file=vault_pwd2
---
# vault test ##

对提供的字符串进行加密

 [yun@ansi-manager object06]$ ansible-vault encrypt_string "test info" --vault-password-file=vault_pwd2
!vault |
$ANSIBLE_VAULT;1.1;AES256 6633363733303334373831303732326435396566313066630a373562633530333832613335393835 6636396135306436640a313531373835663633383665396139343464613861313034386365393137 Encryption successful

Playbook 使用 vault 文件

 # 其中 test_vault.yml 的 vault 密码为 vault_pwd 中的信息
[yun@ansi-manager object06]$ ansible-vault view test_vault.yml --vault-password-file=vault_pwd
---
# vault test ==
- hosts: proxyservers tasks:
- name: "touch file"
file:
path: /tmp/with_itemstestfile
state: touch [yun@ansi-manager object06]$ ansible-playbook -b -i ../hosts_key --syntax-check test_vault.yml --vault-password-file=vault_pwd # 语法检测
[yun@ansi-manager object06]$ ansible-playbook -b -i ../hosts_key -C test_vault.yml --vault-password-file=vault_pwd # 预执行,测试执行
[yun@ansi-manager object06]$ ansible-playbook -b -i ../hosts_key test_vault.yml --vault-password-file=vault_pwd # 执行

完毕!


———END———
如果觉得不错就关注下呗 (-^O^-) !

Ansible playbook Vault 加密的更多相关文章

  1. Ansible playbook API 开发 调用测试

    Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...

  2. ansible playbook实践(四)-如何调试写好的playbook文件

    有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...

  3. ansible playbook批量改ssh配置文件,远程用户Permission denied

    最近手里的数百台服务器需要改/etc/ssh/sshd_config的参数,禁止root直接登陆,也就是说 [root@t0 ~]# cat /etc/ssh/sshd_config | grep R ...

  4. ansible笔记(11):初识ansible playbook(二)

    ansible笔记():初识ansible playbook(二) 有前文作为基础,如下示例是非常容易理解的: --- - hosts: test211 remote_user: root tasks ...

  5. ansible笔记(10):初识ansible playbook

    ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...

  6. Ansible playbook 批量修改服务器密码 先普通后root用户

    fsckzy   Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...

  7. 写Ansible playbook添加zabbix被监控的对象

    本主题达到的效果是能通过编写Ansible Playbook,创建zabbix主机组,把被监控的对象加入到zabbix监控系统中,同时链接到对象的模板. 1.准备工作 在zabbix服务器上面,我们需 ...

  8. Ansible playbook基础组件介绍

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

  9. ansible playbook基本操作

    一.ansible playbook简单使用 相当于是把模块写入到配置文件里面 vim /etc/ansible/test.yml //写入如下内容: --- - hosts: 127.0.0.1 r ...

随机推荐

  1. 模块 sys shell参数获取

    sys 参数获取 获取参数 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) ...

  2. ARDUINO UNO数字引脚端口上电后不稳定状态。

    ARDUINO UNO数字引脚端口上电后不稳定状态. 在使用4*4矩阵键盘时,遇到了输入端的电平无法稳定,一直被识别为高电平. 在发现这一问题后,首先检查程序是否出错.检查后发现程序没有任何问题. 于 ...

  3. k8s删除namespace一直处于terminating状态

    k8s删除namespace一直处于terminating状态 当遇到删除ns是一直处于terminating情况可以用调k8s api进行删除. 1.创建api proxy. [root@node1 ...

  4. Material Design 组件之NavigationView

    今天来看一下 NavigationView 的使用,NavigationView 是一个标准的导航菜单,其菜单内容由菜单资源文件来填充,NavigationView 一般和 DrawerLayout ...

  5. Oracle如何查询不等于某数值

    前言 今天在使用Oracle查询“不等于”的时候,发现得到的数据与期望中的不一样,进一步查找资料才有发现. 1.Oracle的不等于 在Oracle中,"<>".&qu ...

  6. Spring 中使用 ActiveMQ 笔记

    首先需要在 pom.xml 中添加如下两个 jar 包:spring-jms 与 activemq-core,其依赖的 jar 包会自动下载 接着进行相关配置 @Configuration publi ...

  7. 配置并验证Split分离解析

                                                             配置并验证Split分离解析 案例1:配置并验证Split分离解析 案例2:查看进程信 ...

  8. 使用 python 进行身份证号校验

    使用 python 代码进行身份证号校验 先说,还有很多可以优化的地方. 1.比如加入15位身份证号的校验,嗯哼,15位的好像没有校验,那就只能提取个出生年月日啥的了. 2.比如判断加入地址数据库,增 ...

  9. python 函数简介

    一.为什么要有函数? 不加区分地将所有功能的代码垒到一起,问题是: 代码的可读性差. 代码冗余 代码可扩展性差 如何解决? 函数即工具,事先准备工具的过程是定义函数,拿来就用指的是函数调用. 什么是函 ...

  10. 【C#】写一个支持多人聊天的TCP程序

    碎碎念 先谈谈我们要实现的效果:客户端可以选择要聊天的对象,或者直接广播消息(类似QQ的私聊和群消息) 那么,该如何实现呢? 首先明确的是,要分客户端和服务器端两个部分(废话) 客户端:选择要发送的对 ...