Ansible_管理机密
一、Ansible Vault
1、什么是Ansible Vault
- Ansible提供的Ansible Vault可以加密和解密任何由Ansible使用的结构化数据文件
- 若要使用Ansible Vault,可通过一个名为ansible-vault的命令行工具创建、编辑、加密、解密和查看文件
- Ansible Vault可以加密任何由Ansible使用的结构化数据文件。
- 包括清单变量、playbook中含有的变量文件、以及在执行playbook时作为参数传递的变量文件,或者Ansible角色中定义的变量
2、使用ansible-vault创建加密文件
1️⃣:用ansible-vault filename命令创建加密的文件,该命令在执行时会提示输入新的vault密码,然后利用默认编辑器vi打开文件
- 演示实例:
[root@localhost project]# ansible-vault create playbook.yaml
New Vault password: //输入密码
Confirm New Vault password: //再次输入密码
[root@localhost project]# cat playbook.yaml
$ANSIBLE_VAULT;1.1;AES256
30613061633963633139383032353436386231646364366436613736346432313435613439353833
3761386338616239613065323934653637393833633862330a366532343533343838396561336366
36636630313930623463656431663736303336653833653235663931376234366431386534363966
3236326565623739620a326264613365376163333663613136343931323466373333303366323434
32356530633865623935613434663337646661356465343866333862373431646339
//已经加密
2️⃣:使用vault密码文件来存储vault密码,而不是通过标准输入途径输入vault密码,这样做需要使用文件权限和其他方式来严密保护该文件
- 演示实例:
//首先创建密码文件
[root@localhost project]# cat password
123456
[root@localhost project]# chmod 600 password
[root@localhost project]# ll
total 4
-rw------- 1 root root 7 Sep 2 02:05 password //创建加密的YAML文件
[root@localhost project]# ansible-vault create --vault-password-file=./password example.yaml
[root@localhost project]# cat example.yaml
$ANSIBLE_VAULT;1.1;AES256
65623133336639346338396639623239336435633037303265353231383035356163656262646431
3536633038363832363336306236313839343330363661390a656530376439373434393435353263
63623536623564366630373438656537386431386362323534363332653035653663646662653537
6139313566363732640a353232323633303064373430396365353865653231323962373864653038
3836
//已经加密
3、查看已经加密的文件
1️⃣:使用ansible-vault view filename命令查看Ansible Vault加密的文件,而不必打开它进行编辑
- 演示实例:
//查看已经加密的YAML文件
[root@localhost project]# cat playbook.yaml
$ANSIBLE_VAULT;1.1;AES256
33393839353335326235666163306639353236616564366137326632666464643733336661313261
3333636239393734323233326165616238353338386665330a353439363266346532396138343866
63393038623139363663373635626662383533656531383139373039316562313835383138386632
3637303261316631320a383034656461366630316430643733376637653134383131386238666139
64316361303763613762636437666263353965346561343635303236613366666264323736623663
39646432633364383437386237336638386463313337313431626338653261653631646538316630
63623935333436643232376562666562343761313061626162396131633635326635386662353065
64393232363731383136643839636137346239396164353038666564666466643038333539313861
38643934646565393635323862366462333465373034313331393665343832383934326330306438
3338376365613361313766316233333435353366393639653033 //查看文件内容
[root@localhost project]# ansible-vault view playbook.yaml
Vault password: //输入加密的密码
---
- name: test files
hosts: all
tasks:
- name: install httpd
yum:
name: httpd
state: present
4、编辑已经加密的文件
1️⃣:Ansible Vault提供ansible-vault edit filename命令继续编辑已经加密文件;工作时将文件解密为一个临时文件,并允许编辑;保存时,它将复制其内容并删除临时文件
- 演示实例:
//查看已经加密文件内容
[root@localhost project]# ansible-vault view playbook.yaml
Vault password:
---
- name: test files
hosts: all
tasks:
- name: install httpd
yum:
name: httpd
state: present //继续添加内容
[root@localhost project]# ansible-vault edit playbook.yaml
Vault password: //输入加密时的密码
[root@localhost project]# ansible-vault view playbook.yaml
Vault password: //输入密码
---
- name: test files
hosts: all
tasks:
- name: install httpd
yum:
name: httpd
state: present - name: start httpd
service:
name: httpd
state: started
5、加密和解密现有的未加密的文件
1️⃣:使用ansible-vault encrypt filename加密现有的未加密的文件;此命令可以一次加密多个现有的未加密文件
- 其次还可以使用--output选项将需要加密的文件加密后另存为具有新名称的文件,一次只能有一个输入文件
ansible-vault encrypt playbook.yaml --output=test.yaml
2️⃣:使用anisble-vault decrypt filename解密现有的已经加密的文件,并且是永久解密
- 解密也可以是使用--output选项,在解密单个文件时加改选项将解密文件以另一个新名称来保存文件
ansible-vault decrypt playbook.yaml --output=test.yaml
3️⃣:演示实例:
//查看两个现有的未加密的文件
[root@localhost project]# cat playbook.yaml
---
- name: test files
hosts: all
tasks:
- name: install httpd
yum:
name: httpd
state: present //加密该文件
[root@localhost project]# ansible-vault encrypt playbook.yaml
New Vault password: //输入密码
Confirm New Vault password: //再次输入密码
Encryption successful
[root@localhost project]# cat playbook.yaml
$ANSIBLE_VAULT;1.1;AES256
34613930356665386565313263616638666464303837633561633866353166653865636238333833
6430346665376264343434346233663666373064383764300a646265613630643335353930396534
35613339326263313465343637393331323461336562313335353766343161623738393965376234
3462373363323934620a616330373036346564323763333030356332353864616464303236353336
33636231386531363538346134636336613238316565373235663366656538376234656132303735
61353766633562353933313731323662616530363462656433373565663532666233386236383739
31663136336630663532613736666462643033383034313463343632316638356136363833353138
31363134396532623937373232306435303362386639663865333064353162373634623238353837
31373733356334366562373863663736383132646432363037326161396666366437376463363564
6133336438666333373037623464383962306366316432336463 //解密
[root@localhost project]# ansible-vault decrypt playbook.yaml
Vault password: //输入刚刚加密设置的密码
Decryption successful
[root@localhost project]# cat playbook.yaml
---
- name: test files
hosts: all
tasks:
- name: install httpd
yum:
name: httpd
state: present
6、更改已经加密文件的密码
1️⃣:使用ansible-vault rekey filename 命令更改已经加密文件的密码;此命令一次可以更改多个已经加密文件密码;并且需要提供原始密码
- 演示实例:
//查看已经加密的文件
[root@localhost project]# ansible-vault view playbook.yaml
Vault password: //此处我设置的密码是123456
---
- name: test files
hosts: all
tasks:
- name: install httpd
yum:
name: httpd
state: present //更改密码为654321
[root@localhost project]# ansible-vault rekey playbook.yaml
Vault password: //输入原始密码123456
New Vault password: //输入更改的密码654321
Confirm New Vault password: //再次输入更改的密码654321
Rekey successful
2️⃣:除此之外还可以使用vault文件作为面密码:使用--new-vault-password-file选项指定更改的密码
- 演示实例:
//创建vault维纳
[root@localhost project]# cat new_password
123456 //更改密码
[root@localhost project]# ansible-vault rekey --new-vault-password-file=./new_password playbook.yaml
Vault password: //输入原始密码
Rekey successful
二、Playbook和Ansible vault
1、执行ansible-playbook与交互密码
1️⃣:通过Ansible Vault加密的文件的playbook,需要向ansible-playbook命令提供加密密码
2️⃣:为playbook提供vault密码,可使用--vault-id选项,以交互方式提供vault密码
- 演示实例:
[root@localhost project]# ansible-playbook --vault-id @prompt playbook.yaml -C //prompt:提示的意思,提示输入default密码
Vault password (default): PLAY [test files] ********************************************************************************************************************************************************* TASK [Gathering Facts] ****************************************************************************************************************************************************
ok: [client.example.com] TASK [create user] ********************************************************************************************************************************************************
changed: [client.example.com] PLAY RECAP ****************************************************************************************************************************************************************
client.example.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3️⃣:此外,也可以使用--vault-password-file选项指定密码文件;密码应当在该文件中存储为一行字符串
- 演示实例:
[root@localhost project]# ansible-playbook --vault-password-file=./password playbook.yaml -C PLAY [test files] ********************************************************************************************************************************************************* TASK [Gathering Facts] ****************************************************************************************************************************************************
ok: [client.example.com] TASK [create user] ********************************************************************************************************************************************************
changed: [client.example.com] PLAY RECAP ****************************************************************************************************************************************************************
client.example.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4️⃣:也可以使用ANSIBLE_VAULT_PASSWORD_FILE环境变量,指定密码文件的默认位置
5️⃣:从Ansible2.4开始,可以通过ansible-playbook使用多个Ansible Vault密码。要使用多个密码,需要将多个--vault-id或--vault-password-file选项传递给ansible-playbook命令
- 演示实例:
[root@localhost project]# ansible-playbook --vault-id 1@prompt playbook.yaml -C
Vault password (1): PLAY [test files] ********************************************************************************************************************************************************* TASK [Gathering Facts] ****************************************************************************************************************************************************
ok: [client.example.com] TASK [create user] ********************************************************************************************************************************************************
changed: [client.example.com] PLAY RECAP ****************************************************************************************************************************************************************
client.example.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 
注意:
1、@prompt前面的vaultID,数字1可以是任何字符,甚至可以完全省略它们
2、如果在使用ansible-vault命令加密文件时,使用--vault-id 选项,则在运行ansible-playbook时,将最先尝试匹配vaultID的密码;如果不匹配,将会尝试用户提供的其他密码
3、没有ID的vaultID@prompt实际上是default@prompt的简写,这意味着提示输入vaultIDdefault的密码说明信息
2、变量文件最值得推荐的做法
1️⃣:简化管理,务必要设置Ansible项目,使敏感变量和其他变量保存在相互独立的文件中;包含敏感变量的文件可通过ansible-vault命令进行保护
2️⃣:管理组变量和主机变量的首选方式是在playbook级别上创建目录;
- group_vars目录通常包含名称与它们所应用的主机组匹配的变量文件
- host_vars目录通常包含名称与它们所应用的受管主机名称匹配的变量文件
3️⃣:Playbook变量(与清单变量相对)也可通过Ansible Vault加密保护;敏感的playbook变量可以放在单独的文件中,此文件通过Ansible Vault加密,并且vars_files指令包含在该playbook中
4️⃣:如果需要在playbook中使用多个vault密码,请确保每个加密文件分配一个vaultID,并在运行playbook时输入具有该vaultID的匹配密码
Ansible_管理机密的更多相关文章
- Ansible_管理事实(Fact)
一.Ansible管理事实(fact) 1.Ansible事实描述 1️⃣:Ansible事实是Ansible在受管主机上自动检测到的变量 2️⃣:事实(fact)中包含有与主机相关的信息,可以像pl ...
- Ansible_管理playbook实现配置并行
一.使用forks在Ansible中配置并行 1.Aniable运行play机制 1️⃣:当Ansible处理playbook时,会按顺序运行每个play.确定play的主机列表之后,Ansible将 ...
- 在Asp.NET Core中如何优雅的管理用户机密数据
在Asp.NET Core中如何优雅的管理用户机密数据 背景 回顾 在软件开发过程中,使用配置文件来管理某些对应用程序运行中需要使用的参数是常见的作法.在早期VB/VB.NET时代,经常使用.ini文 ...
- ubuntu中使用机密数据Secrets
目录 AptNetCore使用Secrets管理私密数据 前言 使用 设置UserSecretsId 设置机密 代码中访问机密 脚注 AptNetCore使用Secrets管理私密数据 前言 在项目中 ...
- Atitit.安全性方案规划设计4gm v1 q928
Atitit.安全性方案规划设计4gm v1 q928 1. 安全架构设计与功能安全检测1 2. https1 3. 账号安全体系1 4. 配置文件安全 1 5. 源码加密与安全2 6. 最高强度的 ...
- kubernetes进阶之二:概述
一:kubernetes是什么 Kubernetes一个用于容器集群的自动化部署.扩容以及运维的开源平台.通过Kubernetes,你可以快速有效地响应用户需求;快速而有预期地部署你的应用; 极速地扩 ...
- K8S学习笔记之Kubernetes核心概念
0x00 Kubernetes简介 Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践. K8S在Doc ...
- kubernetes-核心概念及创建应用(六)
kubernetes是什么: •Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S.•K8S用于容器化应用程序的部署,扩展和管理.•K8S提供了容 ...
- Web安全解决方案
什么是 .NET Framework 安全性? .NET Framework 提供了用户和代码安全模型,允许对用户和代码可以执行的操作进行限制.要对基于角色的安全性和代码访问安全性进行编程,可以从 S ...
随机推荐
- 学习笔记-ionic3 环境配置搭建到打包
折腾了两周总算理清楚了,参考的链接如下: https://blog.csdn.net/zeternityyt/article/details/79655150 环境配置 https://segmen ...
- WordPress的SEO优化技巧
世界上大约有30%的网站都是由Wordpress搭建的,因为Wordpress自身构架清晰,代码规范,且网页评论直接书写在整个页面里,能够被搜索引擎检索到,因此对搜索引擎很友好.但有时候还是会出现只被 ...
- OO电梯系列总结与反思
目录 前言 HW5 度量分析 UML类图与协作图 bug分析 HW6 度量分析 UML类图与协作图 bug分析 HW7 度量分析 UML类图与协作图 bug分析 SOLID原则 感想 前言 紧张刺激的 ...
- JVM调试命令简介
1.JPS(查JAVA进程) 2.jinfo(查看正在运行java应用程序的扩展参数,包括Java System属性和JVM命令行参数:也可以动态的修改正在运行的JVM一些参数) 大部分的运行期参数是 ...
- Go之Zap日志库集成Gin
简介 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1 . 能够将事件记录到文件中,而不是应用程序控制台; 2 . 日志切割-能够根据文件大小.时间或间隔等来切割日志文件; ...
- Day05_24_继承
继承 什么是继承? 继承本质上是对某一批类的抽象,从而实现对现实世界更好的建模.继承是类和类之间的一种关系,除此之外类和类之间的关系还有依赖.组合.聚合等. 继承就是子类(派生类)继承父类(基类)的特 ...
- k8s helm 安装etcd
待续 helm install etcd bitnami/etcd \ --set statefulset.replicaCount=3 \ --set persistence.enabled=tru ...
- java面试一日一题:mysql中的自增主键
问题:请讲下mysql中的自增主键 分析:该问题主要考察对mysql中自增主键的掌握,使用场景及如何设置 回答要点: 主要从以下几点去考虑 1.什么自增主键 2.使用场景是什么: 3.innodb_a ...
- 也谈如何写一个Webserver(-)
关于如何写一个Webserver,很多大咖都发表过类似的文章.趁着这个五一假期,我也来凑个份子. 我写Webserver的原因,还得从如何将http协议传送的消息解析说起.当时,我只是想了解一下htt ...
- 01- Java概述
一 Java简介 java语言发展史 发展史简单了解:如下: https://www.jianshu.com/p/a78fcb3ccf63 java语言平台 JavaSE(标准版):可以用户开发普通桌 ...