一、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. 【CTF】XCTF Misc 心仪的公司 & 就在其中 writeup

    前言 这两题都是Misc中数据包的题目,一直觉得对数据包比较陌生,不知道怎么处理. 这里放两道题的wp,第一题strings命令秒杀觉得非常优秀,另外一题有涉及RSA加密与解密(本文不具体讨论RSA非 ...

  2. 06_pytorch的autograd操作

    06_pytorch的autograd操作 目录 一.引言 二.Variable 2.1 Variable 的数据结构 2.2 反向传播 2.3 autograd 求导数和手动求导数 三.计算图 3. ...

  3. 三个dom xss常用tips

    分享dom xss的三个案例 (1)javascript里面过滤单引号和双引号? 搭建环境: 只是过滤了单引号和双引号是可以xss的: 使用<>闭合script即可 </script ...

  4. win10 添加全局快捷键

    前言 好久没写博客了,今天水一下 如何在win10 下添加一个全局唤醒的快捷键(打开截图软件) 步骤 win + Q 输入 管理工具 添加快捷方式 这里没有管理员权限,可以直接把创建好的 快捷方式 粘 ...

  5. 数据库函数-常用的MySQL函数

    1.date_sub() 时间的加减 备注:record 为datetime类型 select record_time as date, order_area as orderArea, order_ ...

  6. Windows核心编程 第23章 结束处理程序

    第2 3章 结束处理程序 SEH(结构化异常处理) 使用 S E H的好处就是当你编写程序时,只需要关注程序要完成的任务. 如果在运行时发生什么错误,系统会发现并将发生的问题通知你.利用S E H,你 ...

  7. 文件描述符fd

    java 后台运行程序命令 nohup java -jar babyshark-0.0.1-SNAPSHOT.jar > log.file 2>&1 & 命令解释:后台启动 ...

  8. @ResponseBody、@RequestBody

    @ResponseBody 我们在刚刚接触Springboot的第一个hello工程的时候,我们就接触了一个RestController,而通过进入它的源码,我们会发现@ResponseBody @R ...

  9. Pytest自动化测试-简易入门教程(01)

    我们今天主讲的内容,就是测试框架Pytest,讲到这个测试框架对于没有做过Web自动化的伙伴来说,会觉得这个东西是陌生的,那么到底什么是框架呢?什么又是自动化呢?自动化为什么又要用框架呢? 难道我学自 ...

  10. Getting Started and Beyond|云原生应用负载均衡选型指南

    作者 冉昕,腾讯云服务网格TCM产品经理,现负责云原生流量接入网关与应用通信可观测性等产品特性策划与设计工作. 刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模 Kubernetes 集群管理 ...