Ansible数据加密

ansible-vault 如何保护数据

  • ansible-vault能够加密什么?

    ansible-vault能够加密任何结构化数据,包括yaml文件.

    • 加密变量
    1. role中的变量文件,例如vars和defaults
    2. 资源清单变量,例如host_vars和group_vars
    3. 包含include_vars和vars_files的变量文件
    4. 通过-e参数传递给ansbile-playbook的变量文件,如-e @vars.yml或-e @vars.json
  • 不适合做vault加密?

    1. 由于vault加密单位是整个文件,不能对部分文件或值进行加密.
    2. 文件和模板不能用value加密,它们可能与json、yml文件不一样.

ansible-vault 保护数据的基本操作

  • ansible-vault工具子命令

    子命令 描述
    create 使用编辑器创建加密文件。这需要在运行之前先配置编辑器的环境变量
    view 查看加密后的文件内容,不对加密文件做修改
    edit 用编辑器编辑一个存在的加密文件,在内存中解密,退出编辑器后又保存成加密文件
    encrypt 加密一个已有的结构化数据文件
    decrypt 解密文件。使用这个命令要小心,不要把解密后的文件提交到版本控制系统中
    rekey 改变用于加密、解密的口令.使用版本控制系统管理这个文件,即使你文件的内容没有变化,也需要再次进行提交,重置密钥的操作将会更新最终加密的文件
  • 加密

  1. 创建新加密结构化文件

     ansible-vault create aws_creds.yml  # 创建新文件,调用ansible-valut加密
    
  2. 加密已存在结构化文件

     # 方式1 输入加密密码
     ansible-valut encrypt aws_creds.yml  # 调用encrypt加密,需要输入密码
     ansible-playbook --ask-vault-pass aws_creds.yml  # 执行时需要输入密码
     ansible-playbook --vault-id prompt aws_creds.yml  # ansible 2.4版本支持vault-id替换
    
     # 方式2 加密文件进行操作
     ansible-vault encrypt --vault-password-file pwdfile aws_creds.yml  # 加密文件进行加密
     ansible-playbook --vault-password-file pwdfile aws_creds.yml # 执行时不用输入密码
     
     ansible-vault encrypt --vault-id pwdfile aws_creds.yml # ansible 2.4版本支持vault-id替换
     ansible-playbook --vault-id pwdfile aws_creds.yml # ansible 2.4版本支持vault-id替换
    
  • 解密

      # 方式1解密
      ansible-vault decrypt aws_creds.yml
    
      # 方式2解密
      ansible-vault decrypt --vault-password-file pwdfile aws_creds.yml
      ansible-vault decrypt --vault-id pwdfile aws_creds.yml
    
  • 多文件、多个密钥加密、解密、执行场景

      # 加密
      ansible-vault encrypt --vault-id pwdfile test.yml
      ansible-vault encrypt --vault-id pwdfile1 test1.yml
      # 执行:指定多个加密文件,不用管加载顺序
      ansible-playbook --vault-id pwdfile1 --vault-id pwdfile test.yml
      # 解密
      ansible-vault decrypt --vault-id pwdfile1 --vault-id pwdfile test.yml test1.yml
    

实践场景

ansible-valut常被用来加密vars文件,加密后的vars文件和之前调用方式一样,包括 用在tasks、templates中,唯一需要注意的是 访问的时候需要添加 密码文件或者 交互输入密码进行执行.

你可能感兴趣的:(#,Ansible)