Я знаю для 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. После этого ваш динамический инвентарь будет работать без каких-либо дополнительных учетных данных.