gpt4 book ai didi

encryption - 如何从 Ansible Playbook 中正确加密文件?

转载 作者:行者123 更新时间:2023-12-05 04:46:55 28 4
gpt4 key购买 nike

我目前正在使用 Ansible playbook 提取配置备份,然后将其从某些网络设备(基本文本文件)传输到外部存储。

我想在将配置备份发送到最终存储之前对其进行加密。从 Ansible playbook 任务内部加密文件的最合适方法是什么?对我来说,最明显的方法是使用 shell 模块调用外部加密工具(openssl)或 ansible-vault 命令以 ansible 本身可以稍后在其他上下文中读取的格式加密备份;即以下两个任务之一(简化):

  - name: Encrypt stuff with OpenSSL using a password read from vault file
shell:
cmd: openssl {{ openssl_parameters }} -k {{ vaulted_encryption_password }} -in {{ file_to_encrypt }} -out {{ encrypted_file }}

- name: Encrypt stuff with Ansible-Vault
shell:
cmd: ansible-vault encrypt {{ file_to_encrypt }} --vault-password-file {{ vault_password_file }}

但是,这些解决方案似乎都不是完全安全的,因为它们需要通过 shell 将加密密码传递给外部工具(例如,它可以将密码暴露给任何监控主机进程的人)或要求将明文密码写入文件,供 ansible-vault 使用。

是否有更好的方法在 Ansible 任务中进行文件加密,而我在这里没有找到? (专用模块,还是其他一些解决方案?)。

最佳答案

据我所知,没有模块可以直接使用 playbook 中的 ansible-vault(除了明显的预期用途,即即时解密变量和文件内容)。

通过命令使用 ansible-vault 示例提高安全性(就列表流程而言)的一种可能方法是使用交互式提示模式并使用 expect 模块。可以通过向任务添加 no_log: true 参数来添加另一个安全层,这样它就不会打印变量的内容。

这是一个简单的例子(你需要在目标主机上pip install pexpect):

 ---
- hosts: localhost
gather_facts: false

tasks:
- name: Vault encrypt a given file
vars:
vault_pass: v3rys3cur3
expect:
command: ansible-vault encrypt --ask-vault-pass toto.txt
responses:
New Vault password: "{{ vault_pass }}"
Confirm New Vault password: "{{ vault_pass }}"

它给出(使用详细模式来说明 no_log 功能并提供给定文件存在且尚未加密......):

$ ansible-playbook -v test.yml 
No config file found; using defaults

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Vault encrypt a given file] *********************************************************************************************************************************************************************************
changed: [localhost] => {"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result", "changed": true}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

关于encryption - 如何从 Ansible Playbook 中正确加密文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68694806/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com