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

Динамический инвентарь Ansible AWS: `./ec2.py --list` unauthorized

Я пытаюсь использовать Ansible ./ec2.py --list --refresh-cache чтобы перечислить мои экземпляры AWS EC2.

С помощью документации я просмотрел этот контрольный список:

* Моя политика:

{
  "Statement": [
    {
      "Sid": "Stmt1427001800780",
      "Action": "*",
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

Я сделал это и ожидал, что смогу перечислить экземпляры EC2 через ec2.py который по существу проходит через boto, но на самом деле видел Error connecting to AWS backend. You are not authorized to perform this operation. Однако я могу ssh прямо в мой экземпляр EC2 через ssh ubuntu@[ip].

Я действительно бьюсь головой о стену здесь. Что я делаю не так?

РЕДАКТИРОВАТЬ: добавление новой информации в соответствии с предложением @ EEAA

Когда я использую pprint.pprint(e) на ответ Amazon:

EC2ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation.</Message></Error></Errors><RequestID>b985d559-c410-4462-8b10-e0819fd81f12</RequestID></Response>

Мой ~/.boto настроен так:

[Credentials]
aws_access_key_id = removed
aws_secret_access_key = removed

Я получал «Запрещено» в ответ на «./ec2.py --list». Похоже на ошибку, когда RDS не используется и делается запрос на описание ресурсов RDS (как по умолчанию с этим плагином). Просто отключите запрос в ec2.ini вот так:

    rds = False

Если вы не используете Elasticache, вы также должны установить для него значение False. Так раскомментируйте

elasticache = False

Вы можете опустить это, создав файл ec2.ini с участием:

[ec2]
elasticache = False

и работает с: EC2_INI_PATH=ec2.ini ./ec2.py --list

По материалам: https://aws.amazon.com/blogs/apn/getting-started-with-ansible-and-dynamic-amazon-ec2-inventory-management/

Я обнаружил, что необходимо прикрепить пользователей и группы IAM к AmazonEC2FullAccess политика (или любая другая политика с ec2:Describe* действие в нем, чтобы экземпляры были перечислены из Ansible.

Конечно, другие ответы о настройке elasticcache и rds config флаги для false также потребовались, в противном случае я получил следующие ответы: ERROR: "Forbidden", while: getting RDS instances или ERROR: "Forbidden", while: getting ElastiCache clusters.

Только что решил именно эту проблему. В моем случае пользователь Ansible AIM был создан с полными правами администратора внутри одной зоны AWS. Для этого эксперимента я выбрал ранее неиспользуемую зону:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ec2:*",
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "ec2:Region": "us-east-2"
                }
            }
        }
    ]
}

Помимо отключения RDS и elasticache (как описано в других ответах здесь) Я также ограничил ec2.ini одной зоной:

regions = us-east-2

Это был последний кусочек головоломки «доступ запрещен».