一、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_管理机密的更多相关文章

  1. Ansible_管理事实(Fact)

    一.Ansible管理事实(fact) 1.Ansible事实描述 1️⃣:Ansible事实是Ansible在受管主机上自动检测到的变量 2️⃣:事实(fact)中包含有与主机相关的信息,可以像pl ...

  2. Ansible_管理playbook实现配置并行

    一.使用forks在Ansible中配置并行 1.Aniable运行play机制 1️⃣:当Ansible处理playbook时,会按顺序运行每个play.确定play的主机列表之后,Ansible将 ...

  3. 在Asp.NET Core中如何优雅的管理用户机密数据

    在Asp.NET Core中如何优雅的管理用户机密数据 背景 回顾 在软件开发过程中,使用配置文件来管理某些对应用程序运行中需要使用的参数是常见的作法.在早期VB/VB.NET时代,经常使用.ini文 ...

  4. ubuntu中使用机密数据Secrets

    目录 AptNetCore使用Secrets管理私密数据 前言 使用 设置UserSecretsId 设置机密 代码中访问机密 脚注 AptNetCore使用Secrets管理私密数据 前言 在项目中 ...

  5. Atitit.安全性方案规划设计4gm  v1 q928

    Atitit.安全性方案规划设计4gm  v1 q928 1. 安全架构设计与功能安全检测1 2. https1 3. 账号安全体系1 4. 配置文件安全 1 5. 源码加密与安全2 6. 最高强度的 ...

  6. kubernetes进阶之二:概述

    一:kubernetes是什么 Kubernetes一个用于容器集群的自动化部署.扩容以及运维的开源平台.通过Kubernetes,你可以快速有效地响应用户需求;快速而有预期地部署你的应用; 极速地扩 ...

  7. K8S学习笔记之Kubernetes核心概念

    0x00  Kubernetes简介 Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践. K8S在Doc ...

  8. kubernetes-核心概念及创建应用(六)

    kubernetes是什么: •Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S.•K8S用于容器化应用程序的部署,扩展和管理.•K8S提供了容 ...

  9. Web安全解决方案

    什么是 .NET Framework 安全性? .NET Framework 提供了用户和代码安全模型,允许对用户和代码可以执行的操作进行限制.要对基于角色的安全性和代码访问安全性进行编程,可以从 S ...

随机推荐

  1. 【C++】 C++知识点总结

    作者:李春港 出处:https://www.cnblogs.com/lcgbk/p/14643010.html 目录 前言 一.C++常用后缀 二.头文件 1.C++输入输出 2.在C++中使用C的库 ...

  2. PBRT阅读笔记——COLOR AND RADIOMETRY

    四个关键概念 Energy(Q)   每一个光子都有特定的波长并携带特定的能量:      其中c为光速,h为普朗克常量. Flux(Φ)   辐射通量,可以直观理解为功率.是能量对时间微分得到的   ...

  3. day-10 xctf-cgpwn2

    xctf-cgpwn2 题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5 ...

  4. Gson?So easy.

    1.概述 这篇文章主要讲述了Gson的使用.包括从最基础的基本类型的序列化,到对象,数组,集合,再到Gson注解,Gson Builder,再到格式化,自定义序列化与反序列化等内容. 另外文章篇幅较长 ...

  5. Vue学习笔记(三)

    1 监听 在Vue.js中可以通过watch来监听数据的变化,比如通过watch实现的简单计数器: <div id="app"> <p>计数器:{{coun ...

  6. kubernetes之pod拓扑分布约束

    在日常使用 kubernetes 的过程中中,很多时候我们并没有过多的关心 pod 的到底调度在哪里,只是通过多副本的测试,来提高的我们的业务的可用性,但是当多个相同业务 pod 在分布在相同节点时, ...

  7. Wordpress学习链接整理

    Wordpress学习链接整理 获取和使用 WordPress 中的全局变量 wordpress模板加载顺序汇总 WordPress载入页面时的模板加载机制(图) WordPress 条件判断标签及用 ...

  8. 反病毒攻防研究第005篇:简单木马分析与防范part1

    一.前言 病毒与木马技术发展到今天,由于二者总是相辅相成,你中有我,我中有你,所以它们之间的界限往往已经不再那么明显,相互之间往往都会采用对方的一些技术以达到自己的目的,所以现在很多时候也就将二者直接 ...

  9. POJ2308连连看dfs+bfs+优化

    DFS+BFS+MAP+剪枝 题意:       就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路:      首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...

  10. NetBIOS名称欺骗和LLMNR欺骗

    目录 LLMNR和NetBios 攻击原理 Responder 攻击过程 LLMNR和NetBios 什么是LLMNR和NetBIOS名称服务器广播? 当DNS名称服务器请求失败时,Microsoft ...