Использовать 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, облачный фронт и т. Д.

Скотт Мур
источник
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 говорит:

Это действие не поддерживает разрешения на уровне ресурсов. Политики, предоставляющие доступ, должны указывать «*» в элементе ресурса.

Это выглядит так:

Скриншот,

Все «разрешено» и «отказано» одинаковы, поэтому я их свернул.

selurvedu
источник