Я пытаюсь использовать Ansible ./ec2.py --list --refresh-cache
чтобы перечислить мои экземпляры AWS EC2.
С помощью документации я просмотрел этот контрольный список:
pip
и boto
~/.boto
файл, включая aws_access_key_id
и aws_secret_access_key
которые я получил из учетных данных пользователя AWS IAMec2.py
и ec2.ini
по тому же пути и оставили оба файла нетронутыми./ec2.py --list --refresh-cache
* Моя политика:
{
"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
Это был последний кусочек головоломки «доступ запрещен».