首页 > 解决方案 > 使用自定义文件夹而不是 ~/.aws

问题描述

我想找到一种不必指定aws_access_key以及aws_secret_key何时使用 aws 模块的方法。

是aws默认尝试使用凭据~/.aws来针对剧本运行吗?

如果是,如何指示 ansible 在您想要的任何文件夹下使用 aws 凭据,例如:~/my_ansible_folder.

我问这个是因为我真的想使用 ansible 创建一个保险库:cd ~/my_ansible_folder; ansible-vault create aws_keys.yml然后~/my_ansible_folder运行 ​​playbook ansible-playbook -i ./inventory --ask-vault-pass site.yml,它将在我不必指定的保险库aws_access_keyaws_secret_key需要使用 aws 凭证的任务中使用 aws 凭证。

标签: amazon-web-servicesamazon-ec2ansible

解决方案


boto3 配置选项列表会让您感兴趣,最值得注意的是$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 模块,这样做只会花费你的运行成本envpython但老实说,ansible 所做的奇怪的模块序列化和反序列化会导致额外的二进制运行时在事物方案中不可见。

您可能必须以相同的方式覆盖$AWS_CONFIG_FILE$BOTO_CONFIG甚至将它们指向/dev/null以强制 boto 不查看您的$HOME/.aws目录

因此,为了清楚起见:

- 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

推荐阅读