Разрешения политики AWS IAM для некоторых экземпляров EC2 - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу ограничить доступ для конкретного пользователя, чтобы увидеть только несколько экземпляров EC2.Я создал нового пользователя в ролях IAM и прикрепил к нему новую политику.Содержание этой Политики прилагается ниже.Я попытался просмотреть документацию и сделать это сам так:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": [
                "arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID1",
                "arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID2"
            ]
        }
    ]
}

Я разместил свои region, ACCOUNT_ID (идентификатор владельца, а не нового созданного пользователя) и instance-id,но когда я соединяюсь с этим пользователем и перехожу к списку всех экземпляров, я получаю это An error occurred fetching instance data: You are not authorized to perform this operation..

После того, как я поместил код в редактор JSON, на шаге Обзор политики я получил это сообщение:

Эта политика определяет некоторые действия, ресурсы или условия, которые не предоставляют разрешения.Чтобы предоставить доступ, политики должны иметь действие с соответствующим ресурсом или условием.Для получения дополнительной информации выберите Показать остальные. Подробнее

В документации AWS упоминается точно такая же конфигурация, или в этих примерах .

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Предыдущий ответ неверен, вы можете условно разрешить доступ к ec2: DescribeInstances по именам тегов.Это также лучшая практика AWS.Также явно запретите доступ к действиям ec2: CreateTags и ec2: DeleteTags, чтобы запретить пользователям создавать или удалять теги для управления экземпляром.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:DescribeInstances",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/UserName": "${aws:username}"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags"
      ],
      "Resource": "*"
    }
  ]
}
0 голосов
/ 19 февраля 2019

Я предполагаю, что вы подключаетесь как этот пользователь в консоли (но это будет то же самое с CLI). Вот что я думаю происходит:

Чтобы перечислить все экземпляры, консоль, скорее всего, вызывает DescribeInstances API.Согласно списку action / resources / tags , которые можно использовать в политике IAM, этот API не поддерживает фильтр ресурсов в IAM.

Это означает, что у вашего пользователя нет прав доступа к списку.экземпляры и они не будут показаны в консоли.Вы можете проверить эту теорию, используя CLI, чтобы запросить детали определенного экземпляра id, если моя гипотеза верна, она будет авторизована.

Поскольку DescribeInstances не могут быть ограничены ресурсом или тегами,Я не думаю, что можно отфильтровать список экземпляров для пользователя.

Чтобы консоль работала, вам необходимо добавить следующий оператор в политику IAM

 "Statement": [
     { your existing statement }, 

     {
         "Effect": "Allow",
         "Action": "ec2:DescribeInstances",
         "Resource": "*"
     }
 ]

Пожалуйста, сообщите, если я был прав :-) Пример , который вы упомянули в своем вопросе, показывает, что именно: Resources = * на DescribeInstances и специфичный для ресурсов InstanceId для других операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...