我想找到一种在使用aws模块时不必指定aws_access_key
和aws_secret_key
的方法。
aws默认是否尝试使用~/.aws
中的凭据针对剧本运行?
如果是,如何指示ansible在所需的任何文件夹下使用AWS凭证,例如:~/my_ansible_folder
。
之所以这样问,是因为我真的想使用Ansible创建文件库:在cd ~/my_ansible_folder; ansible-vault create aws_keys.yml
下使用~/my_ansible_folder
,然后运行剧本ansible-playbook -i ./inventory --ask-vault-pass site.yml
,该书将在我不使用的文件库中使用AWS凭证必须在需要使用AWS凭证的任务中指定aws_access_key
和aws_secret_key
。
答案 0 :(得分:1)
boto3 configuration options列表将引起您的关注,其中最引人注目的是$AWS_SHARED_CREDENTIALS_FILE
环境变量。
我希望您可以使用传统的copy: content="[default]\naws_access_key_id=whatever\netc\netc\n"
创建该共享凭据文件,然后将ansible_python_interpreter
事实设置为env AWS_SHARED_CREDENTIALS_FILE=/path/to/that/credential-file /the/original/ansible_python_interpreter
,以使实际的python调用将环境变量与它。对于非Boto模块,这样做只会花费您运行env
以及python
的费用,但是老实说,ansible所做的奇怪的模块序列化和反序列化将导致看不见额外的二进制运行时在事物的计划中。
您可能必须以相同的方式覆盖$AWS_CONFIG_FILE
和$BOTO_CONFIG
,甚至将它们指向/dev/null
,以强制Boto不在您的$HOME/.aws
目录中查找< / p>
因此,为清楚起见:
- name: create our boto config
copy:
content: |
[default]
aws_access_key_id={{ access_key_from_vault }}
aws_secret_access_key={{ secret_key_from_vault }}
dest: /somewhere/sekrit
mode: '0600'
no_log: yes
register: my_aws_config
- name: grab existing python interp
set_fact:
backup_a_py_i: '{{ ansible_python_interpreter | default(ansible_playbook_python) }}'
- name: patch in our env-vars
set_fact:
ansible_python_interpreter: >-
env AWS_SHARED_CREDENTIALS_FILE={{ my_aws_config.path }}
{{ backup_a_py_i }}
# and away you go!
- ec2_instance_facts:
# optionally put this in a "rescue:" or whatever you think is reasonable
- file: path={{ my_aws_config.path }} state=absent