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

Использовать IAM, чтобы разрешить пользователю редактировать группы безопасности AWS / EC2?

Я пытаюсь предоставить группе 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, любая помощь будет принята с благодарностью.

Чтобы это работало, вам необходимо явно РАЗРЕШИТЬ следующее:

{
  "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 и т. Д.

Если вы хотите ограничить редактирование одной группой безопасности, я думаю, вам нужно 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 может не понадобиться, но в моем случае я хотел его, поэтому не тестировал без него

Похоже, ваша группа безопасности используется экземпляром или каким-либо другим ресурсом 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/*"
      ]
    }
  ]
}

Я искал ответ на вопрос который @ nsij22 спросил в комментариях к принятому ответу. К сожалению, похоже, что это невозможно. В соответствии с Симулятор политики IAM, только следующие действия из @ DevMan14Ответ можно использовать с конкретными ресурсами:

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • RevokeSecurityGroupEgress
  • RevokeSecurityGroupIngress

Для всего остального симулятор политики IAM говорит:

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

Выглядит это так:

.

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