Як вказати роль IAM для екземпляра Amazon EC2, який запускається через AWS CLI?


20

Я використовую команду "aws ec2 run-instance" (з інтерфейсу командного рядка AWS (CLI) ) для запуску екземпляра Amazon EC2 . Я хочу встановити роль IAM для екземпляра EC2, який я запускаю. Роль IAM налаштована, і я можу її успішно використовувати при запуску екземпляра з веб-інтерфейсу AWS. Але коли я намагаюся зробити це за допомогою цієї команди та параметра "--iam-instance-profile", це не вдалося. Виконання "aws ec2 run-instanci help" показує Arn = та Name = підполі для значення. Коли я намагаюся шукати Arn за допомогою "aws iam list-instance-профілі", воно видає це повідомлення про помилку:

Виникла помилка клієнта (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, яку я намагаюся використовувати. з назвою "оболонка" (хоча я також спробував використовувати інший, не пощастило).

  • Чи забороняється встановлення ролі IAM навіть від екземпляра (через його облікові дані IAM)?

  • Чи потрібний дозвіл на роль ролі IAM, необхідний для використання ролей IAM, ніж це потрібно для запуску простого екземпляра?

  • Чи "--iam-instance-profile" є відповідним способом визначення ролі IAM?

  • Чи потрібно використовувати підмножину рядка Arn або відформатувати його якось іншим способом?

  • Чи можливо встановити роль IAM, яка може робити будь-які ролі доступу IAM (можливо, "Super Root IAM" ... складаючи це ім'я)?

FYI, все включає 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, що, схоже, приносить виклик Скаперену. Це насправді не так, як це показано в зразковій політиці в розділі Дозволи, необхідні для використання ролей з 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. Це більш детально, ніж я дізнався раніше, але він показує набагато більше, ніж можна зробити, налаштувавши подібні дозволи.
Скаперен

1

Для запуску екземпляра EC2 з роллю IAM потрібен адміністративний доступ до об'єкта IAM. Це застосовується навіть у тому випадку, якщо новий екземпляр повинен виконувати точно таку ж роль, як і екземпляр, що робить запуск. Екземпляр, який я запускав, мав дозвіл "PowerUserAccess", який дозволяв запускати екземпляр, але не доступ до ролі IAM. Як тільки я перейшов дозвіл у запуску екземпляра до "AdministratorAccess", він працював.

Оскільки ролі IAM надають дозволи, явно слід вирішити проблему безпеки. Ви б не хотіли, щоб ролі IAM були засобом для дозволу ескалації дозволів. Але це також означає, що для надання будь-якої ролі IAM, запускаючий екземпляр повинен мати "AdministratorAccess" або використовувати ключі доступу / секретні ключі (з таким дозволом) зсередини екземпляра (не рекомендується), що дозволило б надати будь-яку роль IAM.

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


1
Ви правильно проаналізували / описали основну проблему (+1), але ваші висновки є дещо неточними / оманливими - я додав окрему відповідь, щоб правильно пояснити, як потенційна проблема безпеки вирішується IAM.
Steffen Opel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.