我知道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_id和aws_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库存将无需任何额外的凭据。