我在 AWX 上保存私有(private) ssh key 时遇到问题,我知道它已加密,但它并不像我希望的那么安全。
您知道在 AWX 中使用 ssh 私钥的安全方法吗?
现在我使用默认的计算机凭据,并且 ssh 由 AWX 加密并存储在 postgres 数据库中。最好根本不在 AWX 上存储 ssh,而是仅在需要时传递它(例如,如果不可能,则在启动时提示)
最佳答案
可以在 AWX 中根本不保留 ssh 凭据。为此,您必须做出一些调整。您不需要启动选项提示。请记住,在作业模板中,ssh 凭据是可选的。保存 ssh 凭证的最佳位置是 Ansible 保管库,并仅将保管库凭证存储在 AWX(作业模板)中。您需要检查如何定义凭据并将该信息从您的剧本/作业移至您的库存中。 https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#connecting-to-hosts-behavioral-inventory-parameters
以下是为实现此目标所做的更改 -
创建特定于环境的 list - 不要更改任何其他环境的节点部分的状态,这一点很重要,因此有助于避免运行时出现意外。 https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#example-one-inventory-per-environment .
移动凭据信息。将剧本移出库存 - 您可以设置环境。库存级别的特定变量以及神奇变量。 Ansible 已知魔法变量。例如-
ansible_connection、ansible_user、ansible_ssh_pass。 Ansible 可以理解,它必须使用 ansible_user、ansible_ssh_pass 通过 ssh 登录机器。
这样,您就不必在 AWX 作业模板中提及凭据,并且可以在模板级别将计算机凭据选项留空。 https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#magic .
这是我在库存级别定义的变量的快照。变量和保管库 - 请注意,凭据部分包含作为变量的值。显然,我们不想以明文形式公开任何凭证。因此,遵循 Ansible 最佳实践非常重要,让 Ansible 找到未加密文件中的变量,并且所有敏感变量都来自加密文件。 https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#variables-and-vaults .
我维护一个变量文件,即配置文件以及Vault,以便在运行时在剧本中渲染。您可以创建一个子目录,例如 vars 并将库存变量中提到的作为值的变量映射到 vars/var.yml 文件。 vars.yml 可以将键定义为 -ssh_secret_dev:“{{Vault_secret_pass }}”
ssh_user_dev:用户名
并且加密后的vault文件才能有最终的值(value)-vault_secret_pass:very_secret_password
为什么要跳大舞?为什么不直接定义保管库中的所有内容并将库存变量与保管库连接起来?这提供了额外的安全层,您可以在其中映射变量文件中的安全凭证以及保管库中的额外 secret 。显然,保管库将被加密,因此您需要在作业模板级别提及保管库凭据。作业模板级别的凭证部分将仅包含保管库凭证 .
- 在作业模板级别选择启动时提示库存 - 由于我们正在使工作流程环境特定而不是作业模板,因此,我们可以在工作流程级别提及库存,并在作业模板中选择启动时提示选项级别以允许库存应用于所有具有启动选项提示的作业模板。
- 编辑 Playbook 以加载这两个变量文件(vault.yml 和 vars.yml)。
- hosts: localhost vars_files: - ./vars/vault.yml - ./vars/vars.yml gather_facts: no no_log: true tasks: - .....some tasks......
您还可以使用在 list 中定义的任何变量(不是特殊的 ansible 变量),并在您的 playbook 中使用它们,其值可以从变量文件中选取。
关于ssh - 如何在 AWX 上安全地使用 ssh 私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60489676/