AWS IAM: ограничить доступ к консоли только одним экземпляром

Я пытаюсь создать пользователя IAM для консоли AWS с разрешением на перечисление и выполнение действий только на 1 экземпляре.

Итак, у меня всего 6 экземпляров, и я попытался скрыть 5 из них с помощью политик IAM, добавив следующую политику:

Breakdown
1. Сначала отобрал все разрешения
2. Добавлено разрешение только для одного экземпляра

    {
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "condition": {}
            }
        },
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-0123456789abcdef",
            "Condition": {
                "condition": {}
            }
        }
    ]
}

. Это работает только для 1-й части, т.е. запрета для всех экземпляров.
Вторая часть, похоже, не работает.

AWS Console with no permission to any instance data

Разве разрешения не работают? Любая помощь будет принята с благодарностью.

3
задан 15 April 2019 в 07:44
4 ответа

Относительно сокрытия всех экземпляров, кроме одного, от пользователя

Это невозможно сделать с помощью политик IAM. Команды ec2: Describe * (включая ec2: DescribeInstances ) не поддерживают разрешения на уровне ресурсов. Таким образом, вы можете разрешить или запретить только ec2: Опишите * для всего ( * ). Таким образом, ваш пользователь может видеть все экземпляры или ни одного.

Что касается попытки запретить все, затем переопределить разрешение

Порядок заявлений политики не меняет результат политики. Так что не пытайтесь писать или интерпретировать это «сверху вниз».

Политики работают следующим образом:

  1. Политика начинает неявно отрицать все (это подразумевается deny)
  2. Любые утверждения «Allow» отменяют любые подразумеваемые отрицания (это явное разрешение)
  3. Любые операторы «Запретить» отменяют все разрешенные (это явное отрицание)

Итак, если у вас есть оператор «Запретить», ничто не может его отменить.

Чтобы иметь возможность "голубиная дыра" и разрешение, как вы пытаетесь сделать, вы должны сделать одно из следующих:

  • Не отрицать ничего, разрешать только то, что вы хотите разрешитьили
  • Запретить все кроме того, что вы хотите разрешить (в одном выражении)

Для достижения того, что вы хотите

Самое близкое, что вы получите, - это позволить вашему пользователю «видеть» все, но работают только на одном экземпляре EC2. Вам потребуются 2 инструкции:

{
    "Version": "2012-10-17", 
    "Statement": [ 
        {
            "Effect": "Allow",
            "Action": "ec2:Describe*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "arn:aws:ec2:us-east-1:1234567890123:instance/i-12345678"
        }
    ]
}
1
ответ дан 3 December 2019 в 05:38

Текущая политика будет работать в AWS-CLI, например aws ec2 stop-instance должен работать.

Однако для фактического использования веб-консоли вам потребуется еще несколько разрешений только для чтения , потому что консоль пытается перечислите и опишите все экземпляры, чтобы составить список.

Вам может потребоваться как минимум ec2: DescribeInstances , чтобы получить базовый полуразрушенный список.

Если вы заботитесь только о том, чтобы этот пользователь IAM не мог изменять другие экземпляры, вы можете предоставить ему доступ только для чтения с помощью ec2: Describe * - это должно сделать консоль пригодной для использования, не позволяя ему изменять любые не -разрешенные экземпляры.

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

Надеюсь, что это поможет :)

4
ответ дан 3 December 2019 в 05:38

Вы должны отрицать все, но в вашем состоянии используйте ArnNotEquals "arn: aws: ec2: us-east-1: 123456789012: instance / i-0123456789abcdef"

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

См. https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html# Условия_ARN для получения дополнительной информации

0
ответ дан 3 December 2019 в 05:38

Спасибо, MLu и Шаруззаман Ахмат Раслан!

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

  1. Во-первых, необходимо убедиться, что к пользователю прикреплена правильная политика group или, в моем случае, отключена правильная политика. У пользователя не было Доступ EC2.
  2. Затем я использовал встроенную политику, чтобы добавить доступ. Я добавил приведенную ниже политику, которая, как упоминалось в MLu, позволяет не прекращать перечисление экземпляров, но не позволяет обновлять другие экземпляры

     {
     «Версия»: «2012-10-17»,
     "Утверждение": [
      {
      «Эффект»: «Разрешить»,
      «Действие»: «ec2: Describe *»,
      «Ресурс»: «*»
      },
      {
      «Эффект»: «Разрешить»,
      "Действие": "*)",
      «Ресурс»: «arn: aws: ec2: us-east-1: 1234567890123: instance / i-xxxxxxxxxxxxxxxxx»
      }
      ]
     }
     

Надеюсь, это поможет кому-нибудь сэкономить время.

0
ответ дан 3 December 2019 в 05:38

Теги

Похожие вопросы