Создание экземпляра AWS EC2 с помощью ролей Ansible IAM имя_профиля_экземпляра UnauthorizedOperation: ошибка

Я пытаюсь создать экземпляр EC2 через ansible, используя роли IAM, но при запуске нового экземпляра получаю ошибку

failed: [localhost] => (item= IAMRole-1) => {"failed": true, "item": " IAMRole-1"}
msg: Instance creation failed => UnauthorizedOperation: You are not authorized to perform
this operation. Encoded authorization failure message: Ckcjt2GD81D5dlF6XakTSDypnwrgeQb0k
ouRMKh3Ol1jue553EZ7OXPt6fk1Q1-4HM-tLNPCkiX7ZgJWXYGSjHg2xP1A9LR7KBiXYeCtFKEQIC
W9cot3KAKPVcNXkHLrhREMfiT5KYEtrsA2A-xFCdvqwM2hNTNf7Y6VGe0Z48EDIyO5p5DxdNFsaSChUcb
iRUhSyRXIGWr_ZKkGM9GoyoVWCBk3Ni2Td7zkZ1EfAIeRJobiOnYXKE6Q

тогда как роль iam имеет полный доступ к ec2 со следующей политикой

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "ec2:*",
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "elasticloadbalancing:*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "cloudwatch:*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "autoscaling:*",
      "Resource": "*"
    }
  ]
}

Любые предложения, пожалуйста.


person Faisal Rabbani    schedule 25.06.2014    source источник


Ответы (1)


Проблема здесь не в IAM. Роль для Amazon EC2, а не то, что вам (т. Е. Учетные данные AWS, которые вы используете сами), похоже, не хватает iam:PassRole разрешения, необходимого для «передачи» этой роли запрошенному инстансу EC2 при запуске, см. Раздел Разрешения, необходимые для использования ролей с Amazon EC2 в Предоставление приложениям, работающим на инстансах Amazon EC2, доступ к ресурсам AWS для получения подробной информации:

Чтобы запустить инстанс с ролью, разработчик должен иметь разрешение на запуск инстансов Amazon EC2 и разрешение на передачу ролей IAM.

Следующий пример политики позволяет пользователям использовать Консоль управления AWS для запуска экземпляра с ролью. Политика позволяет пользователю передавать любую роль и выполнять все действия Amazon EC2, указав звездочку (*). Действие ListInstanceProfiles позволяет пользователям просматривать все роли, доступные в учетной записи AWS.

Пример политики, которая предоставляет пользователю разрешение на запуск экземпляра с любой ролью с помощью консоли Amazon EC2

{
  "Version": "2012-10-17",   
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "iam:PassRole",
      "iam:ListInstanceProfiles",
      "ec2:*"
    ],
    "Resource": "*"
  }]
}

Причина, по которой требуется такое косвенное обращение через разрешение PassRole, заключается в возможности ограничить роль, которую пользователь может передать экземпляру Amazon EC2, когда пользователь запускает экземпляр:

Это помогает предотвратить запуск приложений, которые имеют больше разрешений, чем было предоставлено пользователю, то есть не могут получить повышенные привилегии. Например, представьте, что пользователь Алиса имеет разрешения только на запуск инстансов Amazon EC2 и работу с корзинами Amazon S3, но роль, которую она передает инстансу Amazon EC2, имеет разрешения на работу с IAM и DynamoDB. В этом случае Алиса может запустить экземпляр, войти в него, получить временные учетные данные, а затем выполнить действия IAM или DynamoDB, для которых она не авторизована.

Возможно, вы захотите прочитать мой ответ на вопрос Как указать роль IAM для инстанса Amazon EC2, запускаемого через интерфейс командной строки AWS? для более подробного объяснения, которое также ссылается на красивую статью Майка Поупа о Предоставление разрешения на запуск инстансов EC2 с ролями IAM (разрешение PassRole), в котором объясняется предмет с точки зрения AWS.

person Steffen Opel    schedule 25.06.2014