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

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

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

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

Сломать
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-CLI, например aws ec2 stop-instance должно сработать.

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

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

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

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

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

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

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

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

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

Политики работают так:

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

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

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

  • Ничего не отрицайте, разрешайте только то, что вы хотите, или
  • Все отрицать Кроме что вы хотите разрешить (в одном заявлении)

Чтобы достичь того, что вы хотите

Самое близкое, что вы получите, - это позволить вашему пользователю «видеть» все, но работать только с одним экземпляром 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"
        }
    ]
}

Вы должны отрицать все, но в вашем состоянии используйте 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#Conditions_ARN Чтобы получить больше информации

Спасибо MLu и Sharuzzaman Ahmat Raslan!

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

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

    {
    "Version": "2012-10-17", 
    "Statement": [ 
            {
                "Effect": "Allow",
                "Action": "ec2:Describe*",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": "*)",
                "Resource": "arn:aws:ec2:us-east-1:1234567890123:instance/i-xxxxxxxxxxxxxxxxx"
            }
       ]
    }
    

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