我有一个 ansible playbook,我想允许普通用户运行它以在 centos 服务器上安装应用程序,但我不一定想向他们提供登录凭据。我知道您可以使用 ansible vault 来存储加密数据,但据我所知,您也可以非常轻松地解密这些数据。关于这是否可行以及如何实现,您有什么想法吗?
答案1
大多数安装软件的方法都需要特权用户。
最小权限和责任原则意味着登录应由权限较低的个人用户进行,并在必要时授予特权。Ansible 可以帮助您成为以另一个用户身份运行程序的插件,使用 doas 或 sudo 或其他方式。
密码是一种垃圾身份验证方法。熵低、历史上做法不佳,并且不方便自动化。有些以其他用户身份运行的方法会要求输入您的个人密码,从而减少对共享凭据的需求。Ansible 可以使用以下方式提示用户输入此类密码:--ask-become-pass
ansible-vault(和安全系统查找插件)仅保护静态数据,而不保护使用中的数据。运行 Ansible 的人将有权访问纯文本机密。启用足够详细的调试后,它可能可见。
考虑到以上所有情况,一个不错的解决方案可能是配置 become 而不使用密码。使用密钥或证书 ssh,但使用 become 以 root 身份运行包任务。但是,他们以 root 身份执行的操作无法受到限制。Ansible 会生成临时脚本来运行模块,并且没有好的 sudo 规则来限制类似于/bin/sh -c '/usr/bin/python3 ~/.ansible/tmp/ansible-tmp-1628781435.871488-116497-130276452381107/AnsiballZ_setup.py'
为用户运行特权剧本。鼓励他们提供操作建议,但不要向他们提供执行操作的凭证。将此类剧本置于版本控制中并接受变更请求。以您喜欢的方式运行剧本:
- ansible-runner 在 cron 中安排。
- 从合并触发的管道到版本控制中的生产分支。
- 作业从 AWX 用户界面运行。