Я запускаю Ansible на экземпляре EC2 с назначенной ролью Iam. Я запускаю эту пьесу:
$ cat s3.yaml
---
- hosts: localhost
remote_user: ec2-user
tasks:
- name: download ec2.py from s3
s3:
bucket: mybucket
object: /ec2.py
dest: /tmp/ec2.py
mode: get
Запуск с -vvv дает следующее сообщение об ошибке:
fatal: [localhost]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"aws_access_key": null,
"aws_secret_key": null,
"bucket": "mybucket",
"dest": "/tmp/ec2.py",
"ec2_url": null,
"encrypt": true,
"expiry": "600",
"headers": null,
"marker": null,
"max_keys": "1000",
"metadata": null,
"mode": "get",
"object": "/ec2.py",
"overwrite": "always",
"permission": [
"private"
],
"prefix": null,
"profile": null,
"region": null,
"retries": 0,
"rgw": false,
"s3_url": null,
"security_token": null,
"src": null,
"validate_certs": true,
"version": null
},
"module_name": "s3"
},
"msg": "Source bucket cannot be found"
}
Согласно документации, Ansible с boto должен иметь возможность выбирать роль экземпляра EC2.
Пока у меня есть:
aws s3 cp s3://mybucket/ec2.py /tmp/ec2.py
работает нормально)curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
Это ответ на вопрос и в документации указано, что это возможно.
Могу ли я сделать это, не открывая доступ к учетным данным экземпляра напрямую для boto / ansible? Если да, то как. Документации немного не хватает.
После некоторой отладки и экспериментов я обнаружил, что причиной проблемы является ошибка в модуле Ansible S3.
Доступный сценарий, который я цитировал в своем исходном вопросе, работает только в том случае, если роль IAM имеет ListBucket разрешения в дополнение к GetObject разрешения.
У меня точно такая же проблема. Я обнаружил, что если я предоставлю идентификатор ключа доступа AWS и секретный ключ доступа через ansible playbook, он будет работать и загрузит объект из S3. Также работает запуск его как доступной команды с ключами, предоставленными в строке. Следовательно, сообщение «Исходная корзина не найдена» вводит в заблуждение, и это связано с тем, что Ansible не может использовать роль IAM.
В Ansible GitHub (Я думаю, что открыта тем же автором), но до сих пор не решена.