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

Как указать роль IAM для инстанса Amazon EC2, запускаемого через интерфейс командной строки AWS?

Я использую команду "aws ec2 run-instance" (из Интерфейс командной строки AWS (CLI)) для запуска Amazon EC2 пример. Я хочу установить Роль IAM для инстанса EC2 Запускаю. Роль IAM настроена, и я могу успешно использовать ее при запуске экземпляра из веб-интерфейса AWS. Но когда я пытаюсь сделать это с помощью этой команды и параметра «--iam-instance-profile», это не удается. Выполнение «справки по запускам aws ec2» показывает подполя Arn = и Name = для значения. Когда я пытаюсь найти Arn с помощью «aws iam list-instance-profiles», появляется следующее сообщение об ошибке:

Произошла ошибка клиента (AccessDenied): Пользователь: arn: aws: sts :: xxxxxxxxxxxx: предположительная роль / shell / i-15c2766d не авторизован для выполнения: iam: ListInstanceProfiles на ресурсе: arn: aws: iam :: xxxxxxxxxxxx: instance -профиль/

(где xxxxxxxxxxxx - 12-значный номер моей учетной записи AWS)

Я просмотрел строку Arn через веб-интерфейс и использовал ее через «--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell» в команде run-instance, и это не удалось с :

Произошла ошибка клиента (UnauthorizedOperation): у вас нет прав для выполнения этой операции.

Если я полностью отключу параметр «--iam-instance-profile», экземпляр запустится, но у него не будет нужной мне настройки роли IAM. Таким образом, разрешение, похоже, как-то связано с использованием «--iam-instance-profile» или доступом к данным IAM. Я повторил несколько раз в случае сбоев AWS (иногда они случаются) и безуспешно.

Я подозревал, что, возможно, существует ограничение, что экземпляру с ролью IAM не разрешается запускать экземпляр с более мощной ролью IAM. Но в этом случае экземпляр, в котором я выполняю команду, имеет ту же роль IAM, которую я пытаюсь использовать. с именем "shell" (хотя я тоже пробовал использовать другой, не повезло).

К вашему сведению, все связано с Linux, работающим на экземплярах. Кроме того, я запускаю все это из экземпляра, потому что мне не удалось установить эти инструменты на свой рабочий стол. При этом я не хочу помещать свои учетные данные пользователя IAM в какое-либо хранилище AWS, как рекомендовано AWS. Вот.

после ответа:

Я не упомянул разрешение запуска экземпляра «PowerUserAccess» (по сравнению с «AdministratorAccess»), потому что я не понимал, что требуется дополнительный доступ в то время, когда был задан вопрос. Я предположил, что роль IAM была «информацией», связанной с запуском. Но на самом деле это нечто большее. Это предоставление разрешения.

Обновить

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


Первоначальный ответ

Ответ Скаперена частично верен (+1), но немного неточен / вводит в заблуждение следующим образом (объяснение кажется слишком сложным для комментария, поэтому этот отдельный ответ):

Для запуска экземпляра EC2 с ролью IAM требуется административный доступ к средству IAM.

Это правильно как таковое и указывает на основную проблему, но необходимые административные разрешения довольно ограничены, поэтому следующий вывод ...

Поскольку роли IAM предоставляют разрешения, очевидно, что существует проблема безопасности, которую необходимо решить. Вы бы не хотели, чтобы роли IAM были средством повышения разрешений.

... немного вводит в заблуждение, поскольку потенциальную проблему безопасности можно решить должным образом. Предмет рассматривается в Предоставление приложений, работающих на инстансах Amazon EC2, доступа к ресурсам AWS:

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

Теперь в рамках рассматриваемого варианта использования упомянутый разработчики, [которые] запускают инстанс Amazon EC2 на самом деле сами являются экземплярами EC2, что, по-видимому, приводит к проблеме безопасности 22, описанной Скапереном. Это не совсем так, как показано в примере политики в разделе Разрешения, необходимые для использования ролей с Amazon EC2 :

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

Так iam:PassRole на самом деле является единственным требуемым разрешением IAM, и, хотя технически он носит административный характер, это не так уж и далеко - конечно, приведенный выше образец политики по-прежнему позволяет повышать разрешения посредством перечисления и, в свою очередь, передачи любой доступной роли, но этого можно избежать, указав только те роли, которые желательны / безопасны для передачи для данного варианта использования - это описано в разделе Ограничение того, какие роли можно передать инстансам Amazon EC2 (с помощью PassRole):

Вы можете использовать разрешение PassRole, чтобы запретить пользователям передавать в Amazon EC2 роль, имеющую больше разрешений, чем было предоставлено пользователю, а затем запускать приложения с повышенными привилегиями для этой роли. В политике ролей разрешите действие PassRole и укажите ресурс (например, arn: aws: iam :: 111122223333: role / ec2Roles / *), чтобы указать, что только определенная роль или набор ролей могут быть переданы в инстанс Amazon EC2. .

Соответствующий пример политики демонстрирует точное соответствие рассматриваемому варианту использования, т. Е. Предоставляет разрешение на запуск инстанса с ролью с помощью Amazon EC2 API:

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect":"Allow",
      "Action":"ec2:RunInstances",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"arn:aws:iam::123456789012:role/Get-pics"
    }]
}

Для запуска экземпляра EC2 с ролью IAM требуется административный доступ к средству IAM. Это применимо, даже если новый экземпляр должен иметь ту же роль, что и экземпляр, выполняющий запуск. Экземпляр, из которого я запускал, имел разрешение «PowerUserAccess», которое позволяло запускать экземпляр, но не доступ к роли IAM. Как только я продвинул разрешение в запускающем экземпляре до «AdministratorAccess», все заработало.

Поскольку роли IAM предоставляют разрешения, очевидно, что существует проблема безопасности, которую необходимо решить. Вы бы не хотели, чтобы роли IAM были средством повышения разрешений. Но это также означает, что для предоставления любой роли IAM запускающий экземпляр должен иметь «AdministratorAccess» или использовать ключи доступа пользователя / секретные ключи (с таким разрешением) из экземпляра (не рекомендуется), что позволило бы предоставить любую роль IAM.

Было бы полезно иметь возможность запускать экземпляр с тем же разрешением (той же ролью IAM), что и у экземпляра, выполняющего запуск, но EC2 или IAM либо не имеют такого уровня детализации, либо не имеют средств для безопасной проверки этого .