Назад | Перейти на главную страницу

Ansible - динамический инвентарь aws: чтение переменной хранилища для ключа и секрета ec2.py

Я знаю для ec2.py Я могу указать переменные среды через export перед звонком ec2.py или используйте boto config с паролями в виде простого текста (или связкой ключей python).

Поскольку у меня в любом случае есть ключ и секрет aws в доступном хранилище, есть ли способ автоматически экспортировать его из хранилища или любым другим способом передать значение в ec2.py вместо того, чтобы указывать его снова?

Ну, вы могли бы написать простую задачу для сброса ключей из vault в boto3 конфигурация.

---
- name: Ensure AWS credentials configuration is present.
  template:
    src: credentials.j2
    dest: "/home/{{ ansible_user }}/.aws/credentials"

credentials.j2

[default]
aws_access_key_id = {{ aws_access_key_id }}
aws_secret_access_key = {{ aws_secret_access_key }}

куда aws_access_key_id и aws_secret_access_key можно хранить в хранилище.

Задачу, чем нужно будет запускать на хосте управления Ansible (хост, который выполняет ansible-playbook).

Ключи не будут зашифрованы на управляющем хосте Ansible. IMHO (здесь я могу ошибаться) вам нужно предоставить простые ключи AWS для boto либо через переменные среды (export command) или через конфигурацию Boto.

Ansible выполняет вызовы API в AWS через boto. Бото не является частью Ansible. Таким образом, нет собственного способа использовать параметры, определенные в Ansible, в boto. Эта функция должна быть частью boto.

Как вы упомянули, вы используете Ansible на экземпляре EC2, вам на самом деле следует использовать не учетные данные, а роли, прикрепленные к экземпляру EC2: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

Идея состоит в том, что сам ваш экземпляр может получать временные учетные данные и выполнять необходимые команды, определенные в этой роли. Поскольку вы никогда не храните учетные данные где-либо, это наиболее безопасный способ работы с API AWS из экземпляра EC2. Поскольку Ansible полагается на бото, это будет работать из коробки - вам просто нужно создать роль, которая имеет все необходимые разрешения IAM, и прикрепить ее к вашему экземпляру, на котором вы используете Ansible. После этого ваш динамический инвентарь будет работать без каких-либо дополнительных учетных данных.