一、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. redis的主从复制(哨兵模式)

    p.p1 { margin: 0; font: 10px ".SF NS Text" } Master以写为主,Slave以读为主 读写分离 容灾恢复 一.一主多从 配置文件修改: ...

  2. PBFT共识算法详解

    PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错) 一.概述 拜占庭将军问题最早是由 Leslie Lamport 在 1982 年发表的论文<T ...

  3. 如何获取canvas当前的缩放值

    项目中一直有一个问题困扰着我,我们的画布可以缩放平移旋转,支持拖拽生成图形,生成手写笔迹,如果用户选择的线条粗细为5像素,那么即使画布缩放过绘制出的线条粗细也应该是视觉上的5px,所以再绘制时赋值给c ...

  4. Dynamics CRM绑定表单查看当前表单的数据参数传递

    我们做报表的时候,报表运行的位置可以在列表.也可以在报表区同时也可以在表单界面 其他两个都还好,不需要进行过滤,但是在表单界面运行报表需要将表单的GUID传给报表获取数据,否则就得手动去输入ID 具体 ...

  5. Spring Boot demo系列(三):Spring Web+MyBatis Plus

    2021.2.24 更新 1 概述 Spring Web+MyBatis Plus的一个Demo,内容和上一篇类似,因此重点放在MyBatis Plus这里. 2 dao层 MyBatis Plus相 ...

  6. 网络编程Netty入门:ByteBuf分析

    目录 Netty中的ByteBuf优势 NIO使用的ByteBuffer有哪些缺点 ByteBuf的优势和做了哪些增强 ByteBuf操作示例 ByteBuf操作 简单的Demo示例 堆内和堆外内存 ...

  7. 听说你买的基金又“绿了”,手把手教你用 Python选出好基金

    打工人打工魂打工都是人上人,红基金绿基金绿了又绿你基金.今天教大家一招不再被(基金)绿. 01 开发环境 Windows10 Python3 Pycharm 一些必要的库 02 步骤 1. 获取基金排 ...

  8. 01- QTP快速入门

    QTP概述 QTP安装流程

  9. hdu4503 概率

    题意: 湫湫系列故事--植树节                                         Time Limit: 1000/500 MS (Java/Others) Memory ...

  10. 如何绕过WAF

    目录 HTTP报文包体的解析 Transfer-Encoding Charset 溢量数据 HTTP协议兼容性 HTTP请求行种的空格 HTTP 0.9+Pipelining Websocket.HT ...