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

Как использовать роль AWS EC2 Iam с Ansible

Я запускаю 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.

Пока у меня есть:

Это ответ на вопрос и в документации указано, что это возможно.

Могу ли я сделать это, не открывая доступ к учетным данным экземпляра напрямую для boto / ansible? Если да, то как. Документации немного не хватает.

После некоторой отладки и экспериментов я обнаружил, что причиной проблемы является ошибка в модуле Ansible S3.

Доступный сценарий, который я цитировал в своем исходном вопросе, работает только в том случае, если роль IAM имеет ListBucket разрешения в дополнение к GetObject разрешения.

У меня точно такая же проблема. Я обнаружил, что если я предоставлю идентификатор ключа доступа AWS и секретный ключ доступа через ansible playbook, он будет работать и загрузит объект из S3. Также работает запуск его как доступной команды с ключами, предоставленными в строке. Следовательно, сообщение «Исходная корзина не найдена» вводит в заблуждение, и это связано с тем, что Ansible не может использовать роль IAM.

В Ansible GitHub (Я думаю, что открыта тем же автором), но до сих пор не решена.