Використовувати IAM, щоб дозволити користувачеві редагувати групи безпеки AWS / EC2?


16

Я намагаюся надати групі IAM можливість редагувати наші групи безпеки EC2, але мені не вдалося це зробити, не надаючи доступу до всього в EC2.

Я спробував кілька версій цього:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392336685000",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:security-group/*"
      ]
    }
  ]
}

Але коли я входжу з користувачем IAM, на сторінці групи безпеки я отримую повідомлення про те, що "Ви не маєте права виконувати цю операцію".

Я знаю, що користувач / група працює, тому що якщо я виберу Шаблон політики IAM для "Повного доступу Amazon EC2", користувач може отримати доступ до всього в EC2.

Я, мабуть, не маю багато досвіду роботи з IAM, будь-яка допомога буде дуже вдячна.

Відповіді:


13

Щоб це працювало, вам потрібно чітко ВИЗНАЧИТИ наступне:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392679134000",
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CreateSecurityGroup",
        "ec2:DeleteSecurityGroup",
        "ec2:DescribeInstanceAttribute",
        "ec2:DescribeInstanceStatus",
        "ec2:DescribeInstances",
        "ec2:DescribeNetworkAcls",
        "ec2:DescribeSecurityGroups",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Вищенаведена політика JSON в основному передбачає, що користувач ТОЛЬКО має доступ до вищезазначеного. Вони НЕ матимуть доступу ні до чого іншого. Це включає екземпляри ec2, S3, IAM, cloudfront тощо.


1
Це спрацювало. Дякую. Користувач може бачити всі дані екземплярів, але не може запустити / зупинити / створити, так що це досить близько. Як ви вважаєте, чи є спосіб точно вказати, до яких груп безпеки вони можуть отримати доступ, чи мені потрібно залишати його відкритим для всіх груп безпеки?
Кріс

@ DevMan14, то є спосіб констатувати конкретні групи безпеки? коли я спробую секунду, такий ресурс, як нижче, не працює, і за допомогою цього коду хтось може використовувати aws ec2 description-security-groups та отримати неабияку інформацію про кожну групу безпеки
nsij22

1
Якщо ви бачите EC2ResponseError: 403 Заборонені помилки, незабаром після налаштування / зміни вашої політики, зауважте, що минуло кілька хвилин, перш ніж моя політика набула чинності
storm_m2138

12

Якщо ви хочете обмежити редагування однією групою безпеки, я думаю, що вам потрібні 2 твердження, для мене спрацювало наступне:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1413232782000",
            "Effect": "Allow",
            "Action": [               
                "ec2:DescribeInstanceAttribute",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeSecurityGroups"              
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Stmt1413232782001",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",                
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:<accountid>:security-group/sg-<id>"
            ]
        }
    ]
}

DescribeInstance може не знадобитися, але в моєму випадку я цього хотів, тому не проходив тестування без нього


1
Я зміг редагувати правила SG без правил DescirbeInstance. Наприклад, глобальні параметри * встановлюються лише як: "ec2:DescribeNetworkAcls", "ec2:DescribeSecurityGroups"
storm_m2138

1

Схоже, ваша група безпеки, можливо, використовується екземпляром чи іншим ресурсом EC2. Чи можете ви спробувати:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392336685000",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:instance/*",
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:security-group/*"
      ]
    }
  ]
}

Дякую за відповідь, але це не вийшло. Так, групи безпеки використовуються в декількох екземплярах - чи не важливо, що вони є "групами безпеки EC2", а не "групами безпеки VPC"? - АБО, можливо, я роблю щось інше не так, тому що це не дозволяє користувачеві бачити екземпляри, що я наполовину очікував.
Кріс

1

Я шукав відповідь на запитання, яке @ nsij22 задав у коментарях прийнятої відповіді. На жаль, виглядати так неможливо. Відповідно до IAM Policy Simulator , лише з наступними діями з відповіді @ DevMan14 можна використовувати конкретні ресурси:

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • RevokeSecurityGroupEgress
  • RevokeSecurityGroupIngress

Щодо всього іншого, IAM Policy Simulator говорить:

Ця дія не підтримує дозволи на рівні ресурсу. Політика, що надає доступ, повинна вказувати "*" в ресурсному елементі.

Це виглядає приблизно так:

скріншот.

Усі "дозволені" та "заперечені" однакові, тому я їх розбив.

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