我准备好Ansible手册,它们包括几个加密的vars . 通过正常流程,我可以提供保管库密码文件以使用 --vault-password-file ~/.vault_pass.txt
解密它们,并将更改部署到远程EC2实例 . 所以我不需要公开密码文件 .
但我的要求在这里有所不同 . 在创建新的EC2实例时,我需要在 user-data
脚本中包含ansible-playbook更改 . 理想情况下,我应该在实例运行后自动准备好所有设置 .
我使用Terraform通过以下简单的 user-data
脚本部署实例:
#!/usr/bin/bash
yum -y update
/usr/local/bin/aws s3 cp s3://<BUCKET>/ansible.tar.gz ansible.tar.gz
gtar zxvf ansible.tar.gz
cd ansible
ansible-playbook -i inventory/ec2.py -c local ROLE.yml
所以我必须将我的密码文件上传到用户数据脚本,如果在剧本中,有一些加密的变量 .
我能做些什么来避免它? Ansible Tower会帮助这个请求吗?
我用CredStash进行了测试,但仍然是鸡和鸡蛋问题 .
1 回答
如果您希望您的实例自行配置,他们将需要所有凭据或其他方式来获取凭据,理想情况下使用某种形式的一次性通过 .
我能想到的最好的事情就是使用Hashicorp's Vault来存储凭证(可能是我们的所有秘密,或者可能只是Ansible Vault密码,然后可以用来取消你的Ansible变量的存储)并进行部署进程创建one time use token,通过Terraform's templating注入用户数据脚本 .
要做到这一点,您可能希望使用某种形式的帮助脚本包装Terraform apply命令,该脚本可能看起来像这样(未经测试):
然后你的用户数据脚本将在Terraform中被模仿这样的东西(也是未经测试的):
template.tf:
init.tpl:
或者,您可以简单地让实例调用诸如Ansible Tower之类的东西来触发对其运行的剧本 . 这允许您保留中央盒子上的秘密进行配置,而不必将它们分发到您正在部署的每个实例 .
使用Ansible Tower,这是使用callbacks完成的,您需要设置作业模板,然后让您的用户数据脚本卷曲塔以触发配置运行 . 您可以将用户数据脚本更改为以下内容:
template.tf:
init.tpl:
host_config_key乍一看似乎是一个秘密,但它是一个共享密钥,可用于多个主机访问作业模板,如果主机在作业模板的静态库存中定义,或者Ansible Tower仍将运行如果您正在使用动态库存,那么如果在该查找中找到主机 .