Используйте пользовательскую папку вместо ~ / .aws - PullRequest
0 голосов
/ 07 марта 2019

Я хочу найти способ не указывать 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 в хранилище, которые мне не нужно указывать aws_access_key и aws_secret_key в задачах, которым необходимо использовать учетные данные aws.

1 Ответ

1 голос
/ 07 марта 2019

Список параметров конфигурации 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 это просто обойдется вам в env, а также python, но, честно говоря, странная сериализация и десериализация модулей, которые делает 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...