使用自定义文件夹而不是〜/ .aws

时间:2019-03-07 04:19:16

标签: amazon-web-services amazon-ec2 ansible

我想找到一种在使用aws模块时不必指定aws_access_keyaws_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_keyaws_secret_key

1 个答案:

答案 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