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

主机规划

主机名称 操作系统版本 内网IP 外网IP(模拟) 安装软件
ansi-manager CentOS7.5 172.16.1.180 10.0.0.180 ansible
ansi-haproxy01 CentOS7.5 172.16.1.181 10.0.0.181
ansi-haproxy02 CentOS7.5 172.16.1.182 10.0.0.182
ansi-web01 CentOS7.5 172.16.1.183 10.0.0.183
ansi-web02 CentOS7.5 172.16.1.184 10.0.0.184
ansi-web03 CentOS7.5 172.16.1.185 10.0.0.185

添加用户账号

说明:

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

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

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

# 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
# sudo提权
# 让其它普通用户可以进入该目录查看信息
useradd -u 1050 -d /app yun && echo '123456' | /usr/bin/passwd --stdin yun
echo "yun  ALL=(ALL)       NOPASSWD: ALL" >>  /etc/sudoers
chmod 755 /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:22[proxyservers]
172.16.1.18[1:2]:22# 方式2:别名 + 主机 + 端口 + 密码
[webservers]
web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22
web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22
web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22

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_IDthe new vault identity to use for rekey--new-vault-password-file=NEW_VAULT_PASSWORD_FILEnew vault password file for rekey--vault-id=VAULT_IDS  the vault identity to use--vault-password-file=VAULT_PASSWORD_FILESvault password file-v, --verbose         verbose mode (-vvv for more, -vvvv to enableconnection debugging)--version             show program's version number, config file location,configured module search path, module location,executable location and exitSee '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: proxyserverstasks:- name: "touch file"file:path: /tmp/with_itemstestfilestate: touch[yun@ansi-manager object06]$ cat test_vault.yml   # 加密后查看
$ANSIBLE_VAULT;1.1;AES256
33663239636530353564393731363161623462386266613165326235353762343465653235396639
6138353833366637383066366662666236666338333237610a303263336234303866623834663361
39343633646434353334396162643063613964333337343336373232653266613264626564346566
6262633334353036620a633136313364383536323531373164346436663739663631353166663434
38663962363032643163333266633662376538383134333862373961313166656536353734363537
30626261366138383864653834336637393230363466336662306138323032373361656566663231
65363039393736326266316261383065363739633861646464373733643966333233343436303731
37366130363064366337393837396664356335363738663130333436656238666233396466393137
33306434343262313961393661313536386338383233303230613962663732323630663638313531
3236636438646166643937613761396564373033623637636166

对已加密的文件进行解密

[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: proxyserverstasks:- name: "touch file"file:path: /tmp/with_itemstestfilestate: 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
37313964663164613434656666323265376465303433633438613032303733363136316235623066
3930343836396537343333336432363732343936323937370a363239356233333634303464633539
61613264363037313833363738623866643762666662646165646561343631646434383864373338
6334333162616332320a353033323538643566666562646334623630343938646264663561316566
35633939653166326631303635363533613338326561666663623238396464383363613738323464
37306163663933323836316165666532336664353038303036383564346436633235373166663834
62383464373632373839323562306163666366313738663234656139346130373031626265613830
38373135616261616137326337633566306633343338306264646139396230613665356264353134
37376636646266626236323663376230313964323034623133333539393131333065323964303030
3139366661353732333961323764613332316535323334343939

对已加密的文件进行编辑

[yun@ansi-manager object06]$ ansible-vault edit test_vault.yml
Vault password:
---
# vault test  ==
- hosts: proxyserverstasks:- name: "touch file"file:path: /tmp/with_itemstestfilestate: 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: proxyserverstasks:- name: "touch file"file:path: /tmp/with_itemstestfilestate: touch

对提供的字符串进行加密

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

Ansible Vault 非交互式

创建密码文件

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

[yun@ansi-manager object06]$ echo "111111" > vault_pwd
[yun@ansi-manager object06]$ echo "123456" > vault_pwd2
[yun@ansi-manager object06]$ ll vault_pwd*  # 权限 400
-r-------- 1 yun yun 7 Aug 30 10:35 vault_pwd
-r-------- 1 yun yun 7 Aug 30 10:39 vault_pwd2

创建加密文件

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

对已加密的文件进行解密

[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 2

对已存在文件进行加密

[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
65653035393230366365363637343137636337663638346463303532623139353137366162396536
3533393766313339393665386463613831323366623962650a643365653833636663653938613966
39323037396635333236663239316431343461346562393731363537313865623534396533653931
3638363937626635390a303962653366353138373139623237356637656230386565663364626438
31613837383338323065346634323632396339323635323766386236623038616233

对已加密的文件进行编辑

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

对已加密文件更改密码

[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 2  ##

对提供的字符串进行加密

[yun@ansi-manager object06]$ ansible-vault encrypt_string "test info" --vault-password-file=vault_pwd2
!vault |$ANSIBLE_VAULT;1.1;AES256303137666132633639633166636236643538626230323233313565636266366462396366663437666633363733303334373831303732326435396566313066630a373562633530333832613335393835343961613138626564663534333138356430306339663830326565613433316162343738316232336636396135306436640a3135313738356636333836653961393434646138613130343863653931376133
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: proxyserverstasks:- name: "touch file"file:path: /tmp/with_itemstestfilestate: 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. Python+Django+Ansible Playbook自动化运维项目实战(二)

    Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...

  2. Python+Django+Ansible Playbook自动化运维项目实战:资产管理

    Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...

  3. Ansible Playbook剧本

    编写Ansible Playbook剧本,使用Playbook完成自动化操作 熟悉Playbook语法格式 编写Playbook管理系统账户 编写Playbook管理逻辑卷 编写Playbook管理软 ...

  4. 37: sudo提权 、 Ansible配置 、 Ansible Playbook 、 Ansible进阶 、 总结和答疑

    Top NSD AUTOMATION DAY02 案例1:配置sudo权限 案例2:修改Ansible配置 案例3:Playbook应用案例 案例4:Playbook应用案例 1 案例1:配置sudo ...

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

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

  6. Ansible playbook

    1.什么是playbook playbook :定义一个文本文件,以yml为后缀结尾,那playbook组成如下. play:定义的是主机的角色 task: 定义的是具体执行的任务 总结:playbo ...

  7. Ansible 学习总结(2)—— Ansible playbook 入门详解

    一.Ansible playbook 简单概述 playbook 是 ansible 用于配置,部署,和管理被控节点的剧本.通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远 ...

  8. Ansible playbook

    一.Ansible playbook 简介和使用场景 1.简介 playbook 是 ansible 用于配置,部署,和管理被控节点的剧本. 通过 playbook 的详细描述,执行其中的一系列 ta ...

  9. ansible playbook详细教程(笔记)

    ctrl F  执行playbook命令   ansible ­playbook -­i "inventory文件名" playbook.yml ­f 10 (并行级别10) 加参 ...

最新文章

  1. 遥控车_vijos1458_纪中1724_水
  2. 《麻省理工科技评论》发布“21世纪迄今十大最糟科技”
  3. 微寻,把“线下医院”带到“线上轻松问诊”
  4. Google发布了Tensorflow Lite,用于移动电话的神经网络库
  5. 如何在centos7上安装FreeIPA的客户端
  6. 设计自己的线程局部存储
  7. android x86 5.1 .iso,凤凰OS5.1通用ISO1.5.0
  8. 考研英语 - 句子的结构 - 语法
  9. bilibili 哔哩哔哩 2018秋招试题
  10. inaturalist昆虫数据集
  11. 大数据与编程语言关系
  12. 都2021年了,你还在考虑电赛飞行器赛题,备赛是否有必要用基于TI处理芯片的飞控问题?
  13. ct值matlab计算,一篇文章搞定CT值,不要再迷糊了
  14. Windows环境下的RTX实时操作系统学习记录
  15. Compose 实现手写春联效果
  16. 云原生-Kubernetes Pod 介绍
  17. 最短路径(Dijkstra算法)
  18. 科学型计算机计算243的5次方根,科学型计算器计算243的5次方的方根是多少
  19. EMNLP2021语言模型论文合集
  20. 用python统计单词出现的个数_第1.4题:统计文件中单词出现个数

热门文章

  1. Linux常用shell命令总结
  2. 玩转Django2.0---Django笔记建站基础十三
  3. [OC学习笔记]系统框架
  4. 黑马程序员-三层架构介绍
  5. python龟叔是哪国人_周杰伦到底是哪国人? (哪个国籍的)
  6. 通达信交易接口可以设定自动止盈止损吗?
  7. 80个电脑常识全是你平时上网用的着的!
  8. Android判断网络
  9. 链家网北京市租房数据分析(二)——基于python的数据可视化
  10. MapReduce作业Uber模式