一、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. 学习笔记-vue.js获取file文件数据

    在vue中file不能像其他input一样使用 v-model 双向数据绑定,因为文件选择是只读,只能用onchange监控值得变化. 所有需要使用v-on:change去监控. 例1: <in ...

  2. (原创)IconFont(矢量图标字体)在Winform中的应用

    一.前言 很多时候,使用矢量图形可以带来非常美观的界面效果,比如SVG的使用.但是Winform原生是不支持显示SVG图像的,所以退而求其次,可以使用IconFont来实现相似的矢量效果. 先来个图解 ...

  3. Kubernetes 学习笔记-- kafka往couchdb里倒东西

    首先吐槽下国内这些论坛的技术精神,不是我崇洋媚外,有些复读机烦不烦啊,别人的东西吃进去吐出来好玩么? 还有一些不懂装懂,这种最可恶,明明自己都不明白自己在写什么,还是往精华区发,简直离谱,知道自己多挣 ...

  4. 虚拟机装好centos7没网解决办法

    输入ip查询命名 ip addr  也可以输入 ifconfig(centOs7没有ifconfig命令)查看ip,但此命令会出现3个条目,centos的ip地址是ens33条目中的inet值. 发现 ...

  5. ElasticSearch-03-远行、停止

    在Windows下执行elasticsearch.bat 在Linux下运行./elasticsearch 指定集群名称和节点名称: ./elasticsearch --cluster.name my ...

  6. qsort 快排函数(C语言)

    qsort 快排函数(C语言) 函数原型 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, ...

  7. Java设计模式(一):设计模式概述、UML图、设计原则

    1 设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977年美国著名建筑大师.加利福尼亚大学伯克利分校环境结构 ...

  8. 用html自己开发自己的串口TCP通讯调试软件

    今天给大家介绍一个通讯工具,可以自己写html页面,自己写Js脚本实现数据收发. 本程序在不断完善中,请大家不要喷,多多理解,有意见只管提. 系列文章 概述 串口基础功能 TCP客户端收发 参数篇 串 ...

  9. c++ 第三方库收集

    1.boost 这个使用的人多不多说了 2.pthread windows下的posix线程实现 3.libcurl 一个有名的开源网络爬虫库 阿里旺旺中使用到了 4.libeay32 OpenSSL ...

  10. 从苏宁电器到卡巴斯基第25篇:难忘的三年硕士时光 III

    阴差阳错,走上了讲师的道路 时间已经来到了2015年的1月,我的找工作之路也是屡败屡战,屡战屡败.金山.百度以及腾讯不约而同地不要我,使得我对于自己的未来充满了迷茫.尽管才研二而已,可是对于我这种没有 ...