Ansible – dynamicaws库存:读取ec2.py密钥和秘密的vaultvariables

我知道ec2.py我可以通过export指定环境variables,然后调用ec2.py或使用纯文本密码(或python keyring) botoconfiguration文件。

因为无论如何,我都拥有aws钥匙和秘密的秘密,有没有办法从保险库或其他任何方式自动输出这个值来传递值ec2.py而不必再次指定它?

那么你可以写一个简单的任务,将密钥从vault转储到boto3configuration中。

 --- - name: Ensure AWS credentials configuration is present. template: src: credentials.j2 dest: "/home/{{ ansible_user }}/.aws/credentials" 

credentials.j2

 [default] aws_access_key_id = {{ aws_access_key_id }} aws_secret_access_key = {{ aws_secret_access_key }} 

其中aws_access_key_idaws_secret_access_key可以存储在Vault中。

这个任务不是需要对Ansible控制主机(执行ansible-playbook的主机)运行。

在Ansible控制主机上的密钥将不被encryption。 恕我直言(我可能在这里是错的),你需要通过环境variables( export命令)或通过botoconfiguration提供简单的AWS密钥boto。

Ansible通过boto对AWS进行API调用。 Boto不是Ansible的一部分。 所以在boto中没有使用Ansible中定义的参数的本地方法。 这个function必须是博托的一部分。

正如你所提到的,你正在EC2实例上运行Ansible,你实际上不应该使用凭证,而是连接到EC2实例的angular色: http : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-换亚马逊ec2.html

这个想法是,您的实例本身能够获得临时凭证,并且可以执行在此angular色中定义的必要命令。 由于您从不在任何位置存储任何凭据,因此这是从EC2实例使用AWS API最安全的方式。 由于Ansible依赖于boto,所以可以开箱即用 – 您只需要创build一个具有所有必要的IAM权限的angular色,并将其附加到正在运行Ansible的实例上。 之后,您的dynamic库存将无需任何额外的凭据。