如何在不泄露明文密码的情况下共享具有root/administrator凭据的Ansible vaults

46次阅读
没有评论

问题描述

团队使用Ansible vaults存储各种密码,包括域管理员密码和root账户密码。但是,随着团队的扩大,他们面临一个挑战。如果将vault和vault密码提供给所有团队成员,那么所有人都会拥有域管理员和root凭据,这是他们不愿意看到的。团队中的一些成员较为初级,他们希望避免将“王国的钥匙”交给团队中的每个人。然而,Ansible脚本仍然需要这些凭据来执行一些操作,比如加入Windows活动目录域。用户想知道是否有一种方法,可以让DevOps人员在不解密和明文读取凭据的情况下使用它们。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

如果你正在本地应用Ansible playbooks,那么保护凭据的最佳方式是使用远程系统,比如AWX或CI系统(如GitHub Actions或TeamCity)来应用playbooks。CI系统将能够解密vault并运行playbooks。大多数CI系统可以使用环境变量将vault密码传递给作业(该变量对终端用户和日志隐藏)。然后,你可以编写一个简单的脚本来提供vault密码。具体步骤如下:
1. 创建一个Python脚本,比如get_vault_password.py
2. 在脚本中,检查环境变量ANSIBLE_VAULT_PASS是否存在。
3. 如果存在,将密码写入标准输出并退出脚本。
4. 如果不存在,退出脚本。
以下是一个示例的Python脚本:

#!/usr/bin/env python
import os
import sys

if "ANSIBLE_VAULT_PASS" in os.environ:
  sys.stdout.write('%s\n' % os.environ['ANSIBLE_VAULT_PASS'])
  sys.exit(0)

sys.exit(1)

在上面的示例中,我们首先检查环境变量ANSIBLE_VAULT_PASS是否存在。如果存在,我们将密码写入标准输出并退出脚本。如果不存在,我们退出脚本。
你可以在CI系统中配置一个作业,使用该脚本获取vault密码,并将其传递给Ansible playbooks。

方案2

使用AWX或CI系统来管理凭据是一种更安全的方法,因为它们提供了更好的访问控制和审计功能。
另一种方法是使用AWX或CI系统来管理凭据。这些系统提供了更好的访问控制和审计功能,可以更好地保护凭据。你可以在AWX或CI系统中创建凭据,并将其与Ansible playbooks关联。然后,只有具有适当权限的人员才能访问和使用这些凭据。
请注意,无论使用哪种方法,都需要确保CI系统或AWX的安全性,以防止未经授权的访问。

总结

在共享具有root/administrator凭据的Ansible vaults时,可以使用远程系统(如AWX或CI系统)来应用playbooks,并使用环境变量传递vault密码。另一种方法是使用AWX或CI系统来管理凭据,并将其与Ansible playbooks关联。这些方法可以帮助你在不泄露明文密码的情况下保护凭据,并提供更好的访问控制和审计功能。请确保CI系统或AWX的安全性,以防止未经授权的访问。

正文完