【问题标题】:Use custom folder instead of ~/.aws使用自定义文件夹而不是 ~/.aws
【发布时间】:2019-03-07 04:19:16
【问题描述】:

我想找到一种在使用 aws 模块时不必指定 aws_access_keyaws_secret_key 的方法。

aws 默认是否尝试使用 ~/.aws 中的凭据来针对 playbook 运行?

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

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

【问题讨论】:

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


    【解决方案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 模块,这样做只会让你运行 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
    

    【讨论】:

    • 我是 ansible 的新手,所以我想详细说明一下,您能帮忙确认一下吗?使用no_log 创建一个内容为[default] ... }}/somewhere/sekrit 的文件,并将其保存到my_aws_config 以供以后使用。设置backup_a_py_i,如果存在则为ansible_python_interpreter的路径,如果不存在则使用ansible_playbook_python的路径。现在将AWS_SHARED_CREDENTIALS_FILE 设置为my_aws_config.path,然后设置backup_a_py_i,这样boto 将首先咨询my_aws_config.path。这一切都正确吗?
    • 如果我有一棵包含文件夹和子文件夹的剧本树,它们相互调用,有些调用全部,有些调用少数剧本。在哪里放置和运行您的 playbook,以便我以后在部署其他 playbook 时可以安全地使用 aws 凭据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多