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


20

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

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

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

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

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

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

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

  • Не разрешено ли даже задание роли IAM для экземпляра (через учетные данные роли IAM)?

  • Требуется ли какое-либо более высокое разрешение роли IAM для использования ролей IAM, чем для простого запуска простого экземпляра?

  • Является ли "--iam-instance-profile" подходящим способом для указания роли IAM?

  • Нужно ли использовать подмножество строки Arn или отформатировать его каким-либо другим способом?

  • Можно ли установить роль IAM, которая может осуществлять любой доступ к роли IAM (может быть, «Super Root IAM» ... создающий это имя)?

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

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

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

Ответы:


23

Обновить

Майк Поуп опубликовал прекрасную статью о предоставлении разрешения на запуск экземпляров 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, что, по-видимому, приводит к проблеме безопасности catch 22, обрисованной Skaperen. Это не совсем так, хотя это иллюстрируется примером политики в разделе Разрешения, необходимые для использования ролей в 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 можно передать только определенную роль или набор ролей. ,

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

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

Спасибо за информацию о iam: PassRole. Это более детально, чем я узнал ранее, он показывает гораздо больше, чем можно сделать, настроив разрешения таким образом.
Skaperen

1

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

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

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


1
Вы правильно проанализировали / описали основную проблему (+1), но ваши выводы немного неточны / вводят в заблуждение - я добавил отдельный ответ, чтобы правильно объяснить, как IAM решает потенциальную проблему безопасности.
Штеффен Опель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.