Ansible很适合部署基础设施,但它要求您拥有一台控制机器。这就增加了手动设置它和保护它的负担,然后拉下您的剧本并连接到您的服务器。
我想要一种“在云中”运行我的剧本的方法,而不是在我自己的系统上运行。我知道商业提供的安可利塔,但据我所能看到,这是不适合个人使用。
一种选择是使用托管的CI工具(如Travis-CI或Gitlab CI )来运行它们,但是从安全的角度来看,这是错误的,因为访问了我的Travis/GitLab帐户的人就可以访问我的所有服务器。
有哪些解决方案能满足这一要求?我的GitLab CI建议是否存在严重的安全问题,还是一个公认的解决方案?
发布于 2019-01-26 23:04:59
解决方案是自动设置控制机器,即VM。例如,您可以使用Vagrant、Terraform或类似的工具(在这个例子中,我将继续使用Vagrant,这是关于原理的)。使用这种方法,VM完全由文本文件("Vagrantfile")定义,并且可以轻松和可重复地创建和重新创建。Vagrantfile形成了一个基本映像,例如一些特定的Linux发行版;网络等;以及必要的命令行来设置它,从那里开始。
只需提供所有必要的shell命令,就可以设置VM (即安装Ansible)。在这个特殊的例子中,这可能就足够了。如果您需要一个更复杂的VM,您可以获得某种程度的递归,并使用Ansible (或其替代方案之一)配置VM本身。
显然,您希望将Vagrantfile与您的其他配置一样对待;也就是说,将它提交到您的SCM中并保持其最新。
这只是一个例子:您不需要使用Vagrant或VM;您还可以在Docker映像或您选择的云提供商提供的容器化中安装Ansible。
发布于 2019-02-11 16:06:55
如果您打算采用基础设施作为代码的方式,您将希望将该代码存储在存储库中。将基础设施定义存储在VCS ( GitLab )中与在GitLab中存储代码具有几乎相同的安全含义。只需确保不以纯文本存储敏感数据或凭据,或者根本不需要帮助。在Ansible的例子中,这通常意味着使用防跳台加密敏感文件。但这不是唯一的办法。
至于部署,您可以使用抗拉,它运行在要设置的计算机上:
ansible-pull -U <repository> [options] [<playbook.yml>]
它将从指定的存储库获取Ansible配置到本地主机,然后执行您告诉它的剧本。
这应该满足您的需求,但这也意味着执行ansible-pull的机器将有权访问存储库中的所有内容。这对你的环境是否足够安全取决于你。您可以在多个存储库中拆分您的Ansible配置,使用不同的分支,在初始拉出之后撤销机器的访问,等等。
通常,对存储库中的敏感数据进行加密(磁盘加密),确保您绕过SSH或HTTPS (飞行中的加密),并注意谁有权访问存储库,甚至是间接访问( access /用户管理),并且您已经为创建一个安全的环境做了很大的努力。
使用CI部署Ansible是否足够安全,这是值得商榷的。有人可能会说,如果有人获得(写) Travis/GitLab帐户的访问权限,你就可以在那里保存你的Ansible剧本,因为他们可以修改这些剧本,这只是时间问题。另一方面,存储在存储库中的代码是基础设施代码的一半。YMMV
https://devops.stackexchange.com/questions/6109
复制相似问题